Android - 无法打开zip存档

时间:2011-03-31 16:59:12

标签: android

我正在从web下载apk文件并将其存储到Context.getCacheDir()中。我正在通过HttpURLConnection下载文件 - 我实际上并没有问代码(它完全正常工作),所以我不在这里发布它。我成功启动了下载。文件被下载到缓存然后被提示安装 - 但系统无法打开我的APK并写入分析错误。

因此问题如下:

03-31 16:48:43.740: INFO/ActivityManager(59): Start proc com.android.packageinstaller for activity com.android.packageinstaller/.PackageInstallerActivity: pid=620 uid=10026 gids={}
03-31 16:48:44.749: WARN/zipro(620): Unable to open zip '/data/data/com.my.app/cache/myApp.apk': Permission denied
03-31 16:48:44.749: DEBUG/asset(620): failed to open Zip archive '/data/data/com.my.app/cache/myApp.apk'
03-31 16:48:44.930: WARN/PackageParser(620): Unable to read AndroidManifest.xml of /data/data/com.my.app/cache/myApp.apk
03-31 16:48:44.930: WARN/PackageParser(620): java.io.FileNotFoundException: AndroidManifest.xml

问题是 - 我没有访问programaticaly / cache的权限。有什么方法可以解决吗?我不想使用外部存储作为下载目录(当我将文件下载到外部存储时安装过程正常工作),缓存非常好,因为文件管理器无法为普通用户访问该文件,这就是我想要的。谢谢你的想法。

这个问题已经让我无法解决了一个多月了......

编辑:仍然没有解决方案,我想我发现第一件事,Android无法实现

编辑2:我一定看上去很糟糕 - 我下载的apk存在于缓存中......仍然没有允许从该目录安装的权限?

3 个答案:

答案 0 :(得分:6)

在您下载的apk文件中

chmod 666,然后将其安装到您的代码中

更多细节:

path = your_apk_file_path_in_cache_dir;
permission="666";

try {
    String command = "chmod " + permission + " " + path;
    Runtime runtime = Runtime.getRuntime();
    runtime.exec(command);
} catch (IOException e) {
    e.printStackTrace();
}

答案 1 :(得分:3)

这可能会对您有所帮助:

FileOutputStream fOutputStream = context.openFileOutput(
    fileName, Context.MODE_WORLD_READABLE);

答案 2 :(得分:1)

我看到发生了什么......

缓存目录是由Android管理的缓存,这意味着只要内部内存开始变低就可以清除它。

如果您的应用程序暂停/停止时,您的应用程序在缓存上占用了太多空间(APK可能正在做什么),Android可能会清理缓存目录。

为了测试它,就是这样,按照您的方式执行所有操作以及安装过程何时启动只需打开DDMS并查看您的文件是否仍在缓存中。

如果没有,那么android已经清理了应用程序的缓存,因为它不再运行了。

尝试使用其他方法,而不是context.getCacheDir()尝试context.getFilesDir()