Android-无法打开zip存档
我正在从web下载apk文件并将其存储到Context.getCacheDir()中。我正在通过HttpURLConnection下载文件-我并没有询问代码的实际情况(它完全正常工作),所以我没有在这里发布它。我成功启动下载。文件下载到缓存中,然后提示安装-但系统无法打开我的APK并写入错误分析 因此,问题如下:Android-无法打开zip存档,android,Android,我正在从web下载apk文件并将其存储到Context.getCacheDir()中。我正在通过HttpURLConnection下载文件-我并没有询问代码的实际情况(它完全正常工作),所以我没有在这里发布它。我成功启动下载。文件下载到缓存中,然后提示安装-但系统无法打开我的APK并写入错误分析 因此,问题如下: 03-31 16:48:43.740: INFO/ActivityManager(59): Start proc com.android.packageinstaller for ac
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
问题是-我没有访问编程/缓存的权限。有办法解决吗?我不想使用外部存储作为下载目录(当我将文件下载到外部存储时,安装过程会起作用),缓存非常好,因为一般用户无法从文件管理器访问文件,这正是我想要的。谢谢你的想法
这个问题对我来说已经解决了一个多月了
编辑:仍然没有解决方案,我试着认为我找到了第一件事,这在Android上是不可能的
Edit2:我看起来一定很糟糕-我下载的apk存在于缓存中。。。仍然没有允许从该目录安装的权限?我知道发生了什么 cache dir是一个由Android管理的缓存,这意味着只要内部内存开始不足,它就可以被清除 如果应用程序暂停/停止时,应用程序在缓存上占用了太多空间(APK可能正在做的事情),Android可能会清理缓存目录 要测试这种情况,请按您所做的一切操作,当安装过程开始时,只需打开DDMS,查看您的文件是否仍在缓存中 如果没有,那么android已经清理了应用程序的缓存,因为它不再运行了
在将下载的apk文件安装到代码中之前,请尝试使用不同的方法,而不是在下载的apk文件上使用
context.getCacheDir()
Trycontext.getFilesDir()
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();
}
这可能会帮助您:
FileOutputStream fOutputStream = context.openFileOutput(
fileName, Context.MODE_WORLD_READABLE);
您好,我实际使用的是Context.getCacheDir(),在ADB的缓存中看不到下载的应用程序。。。看起来系统会在更新后立即删除它…context.getFilesDir()和getCacheDir()的情况相同-没有成功这就是问题所在…您知道apk的大小吗?似乎它太大了,无法存储在内部存储器中…您需要将其存储在SD卡中…安装…然后删除。apk有200 kB,缓存肯定更大。我现在正按照你说的那样做。我只是想,一定有更好的解决方案。您是否尝试过使用openFileOutput()…如果没有,请尝试使用MODE\u WORLD\u READABLE,int)您是否尝试过使用
openFileOutput()
…如果没有,请尝试使用MODE\u WORLD\u READABLE
您好,您找到上述问题的解决方案了吗。我现在也遇到了类似的问题。我在这篇评论的几乎每个答案中都看到了WORLD\u writeable
的建议。除了测试权限有问题外,不要这样做。谢谢。。运行该命令后,软件包安装程序可以打开下载的文件。我将使用chmod 644
,因为这是/system
应用程序的权限设置。不确定您为什么需要允许其他程序写入权限的chmod 666
。您也可以通过adb
安装它,然后重新启动。