Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android-无法打开zip存档_Android - Fatal编程技术网

Android-无法打开zip存档

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

我正在从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
问题是-我没有访问编程/缓存的权限。有办法解决吗?我不想使用外部存储作为下载目录(当我将文件下载到外部存储时,安装过程会起作用),缓存非常好,因为一般用户无法从文件管理器访问文件,这正是我想要的。谢谢你的想法

这个问题对我来说已经解决了一个多月了

编辑:仍然没有解决方案,我试着认为我找到了第一件事,这在Android上是不可能的


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

我知道发生了什么

cache dir是一个由Android管理的缓存,这意味着只要内部内存开始不足,它就可以被清除

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

要测试这种情况,请按您所做的一切操作,当安装过程开始时,只需打开DDMS,查看您的文件是否仍在缓存中

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


在将下载的apk文件安装到代码中之前,请尝试使用不同的方法,而不是在下载的apk文件上使用
context.getCacheDir()
Try
context.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
安装它,然后重新启动。