首页 > 代码库 > 应用商城 下载apk 安装包解析错误 没有权限 Permission denied Android - failed to open zip archive
应用商城 下载apk 安装包解析错误 没有权限 Permission denied Android - failed to open zip archive
1.错误提示:
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
2.错误提示显示:没有权限打开 压缩文件
Unable to open zip '/data/data/com.my.app/cache/myApp.apk': Permission denied 。3.知识要点:
(1)做应用商城开发时 我们下载apk遇到一种情况就是 下载的apk 保存在哪里?两种情况: 一是保存在 sd卡,一是保存在机器本身的内存中。为了保证我们开发的应用商店能用,下载的apk最好保存在内存中,有可能有些机器没有sd卡(这不起怪,有些android电视机就不标配sd卡)。
(2) 应用商城多线程下载apk 的时候没有问题,下载下来的apk数据包是完整的,用 U盘拷贝出来也可以安装。但是在静默安装时候提示Permission Denied ,但是我在安装此apk之前 修改了apk的权限:
String[] command = { "chmod", "-R", "777", apkFile.getPath() }; ProcessBuilder builder = new ProcessBuilder(command); try { builder.start(); if (Debug.isDebug) { Log.d("Download", "process builder start success"); } break; } catch (IOException e) { connt = connt + 1; if (connt >= 10) { break; } else { Log.e("Download", "process builder start exception"); } }
问题就出现在这里,权限虽然改了,但是修改权限的函数
<pre name="code" class="java">ProcessBuilder builder = new ProcessBuilder(command);builder.start();是开启一个新的进程。此时就会出现线程异步操作问题,即:修改权限的进程和安装apk 的进程是一个异步线程操作,可能在安装apk 之前 对应的apk 权限还没有修改完成,所以出现了 提示Permission Denied 错误。
4.解决办法:
在修改apk 的权限之后让主线程睡眠500ms 到1000ms 即可。
try { Thread.sleep(500); } catch (Exception e) { e.printStackTrace(); }
完结!
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。