具体报错信息:
09-19 10:36:48.163 181-212/? W/Vold: Failed to unmount /storage/udisk (Device or resource busy, retries 6, action 0)
09-19 10:36:48.536 181-212/? E/ProcessKiller: Process com.example.petrochina_oil (27188) has open file /mnt/media_rw/udisk/ad_res/myupdates/petrochina_oil-v1.1.5-20190918_161401.apk
原因是因为文件占用:
/**
* 获取apk包的信息:版本号,名称,图标等
*
* @param //absPath apk包的绝对路径
* @param //context
*/
public static ApplicationInfo apkInfo(String absPath, Context context) {
ApplicationInfo appInfo = null;
String version = "";
PackageManager pm = context.getPackageManager();
PackageInfo pkgInfo = pm.getPackageArchiveInfo(absPath, PackageManager.GET_ACTIVITIES);
if (pkgInfo != null) {
appInfo = pkgInfo.applicationInfo;
/* 必须加这两句,不然下面icon获取是default icon而不是应用包的icon */
appInfo.sourceDir = absPath;
appInfo.publicSourceDir = absPath;
String appName = pm.getApplicationLabel(appInfo).toString();// 得到应用名
String packageName = appInfo.packageName; // 得到包名
version = pkgInfo.versionName; // 得到版本信息
/* icon1和icon2其实是一样的 */
//获取u盘里面的文件图标会导致文件占用
Drawable icon1 = pm.getApplicationIcon(appInfo);// 得到图标信息
Drawable icon2 = appInfo.loadIcon(pm);
String pkgInfoStr = String.format("PackageName:%s, Vesion: %s, AppName: %s", packageName, version, appName);
Log.i(MainActivity.TAG, String.format("PkgInfo: %s", pkgInfoStr));
}
return appInfo;
}
将以下这两行注释掉就可以了:
Drawable icon1 = pm.getApplicationIcon(appInfo);// 得到图标信息
Drawable icon2 = appInfo.loadIcon(pm);
本文详细解析了在尝试更新Android设备上的应用时,由于U盘中的APK文件被系统占用而引发的错误。通过分析具体报错信息及代码段,我们发现获取APK图标信息的过程是导致文件占用的原因。最终解决方案为注释掉获取图标的两行代码,有效避免了文件占用问题。
4013

被折叠的 条评论
为什么被折叠?



