Android - 无法打开zip存档

Way*_*int 8 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
Run Code Online (Sandbox Code Playgroud)

问题是 - 我没有访问programaticaly/cache的权限.有什么方法可以解决吗?我不想使用外部存储作为一个下载目录(当我下载文件到外部存储设备安装过程工程),缓存是伟大的,因为该文件将不从文件管理器一般用户访问的,这就是我想要的.谢谢你的想法.

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

编辑:仍然没有解决方案,我试图认为我找到了第一件事,这是Android无法实现的

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

小智 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();
}
Run Code Online (Sandbox Code Playgroud)


Pan*_*hro 1

我看到发生了什么事..

缓存目录是由 Android 管理的缓存,这意味着一旦内部内存开始不足,它就可以被清理。

并且,如果您的应用程序在缓存上占用了太多空间(APK 可能正在执行的操作),那么当您的应用程序暂停/停止时,Android 可能会清理您的缓存目录。

要测试这种情况,请像您所做的那样执行所有操作,当安装过程开始时,只需打开 DDMS 并查看您的文件是否仍在缓存中。

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

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