Android cache目录下应用内更新失败

1,011

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

Android cache目录下应用内更新失败

问题场景

前段时间发现了一个很神奇的问题,在安卓6.0的设备上,将apk下载到cache目录下,常规用代码进行更新的时候,却发现提示“解析错误-解析软件包时出现问题”。

刚开始怀疑是apk下载时损坏的问题。

我尝试获取cache目录下的apk文件与正常的apk文件进行对比,没有什么问题。

使用adb install 也可以正常安装。

然后我发现,在Android设备6.0上, getFilesDir().getAbsolutePath()目录下的apk安装时提示 “解析错误-解析软件包时出现问题”;

Environment.getExternalStorageDirectory().getPath() 目录下却可以正常安装。

而在7.0及以上的设备中,无论在哪个目录下都可以正常安装。

问题原因

从错误日志中看出这些关键词,PermissonDenied,failed to open, Unable to read;说明软件是没有权限执行cache目录下的apk文件。

6.0 没有对该apk的运行权限。

具体我也不明白为什么会出现这种情况,看到资料说7.0对权限做出了变化,按说权限的变化会越来越严格才对,有知道原因的小伙伴可以回复下。

问题解决

方法一(尝试失败):

既然没有权限,那就是加权限,查到资料看到需要在安装apk方法前,添加chmod("777", apkFile.getAbsolutePath()) ,我这里尝试了并没有成功。


chmod("777", apkFile.getAbsolutePath());//apk放在cache文件中,需要获取读写权限

public static void chmod(String permission, String path) {

try {

String command = "chmod " + permission + " " + path;

Runtime runtime = Runtime.getRuntime();

runtime.exec(command);

} catch (IOException e) {

e.printStackTrace();

}

}

方法二:

换个目录,我尝试在外部存储apk时,就不会出现“应用安装包损坏”的提示,所以我们把目录改为外部存储。

使用 Environment.getExternalStorageDirectory().getPath() 目录。

参考链接:

blog.csdn.net/anyanyan07/…