需求
当在异常网络下进行 APK 包下载时,会导致下载几 KB 的 APK 包,随机进入安装会显示“解析错误”的提示。为此,特意增加验证判断:
通过PackageManager
获取本地 APK 安装包的PackageInfo
, 跟客户端下载的信息进行对比,就可以解决这次的包异常的问题。
PackageManager
PackageManager:用于管理安装的apk和未安装的apk的类。
getPackageArchiveInfo
getPackageArchiveInfo :用于获取 APK 安装包文件信息
PackageInfo
PackageInfo:对应AndroidManifest.xml中包的所有信息。
常见字段:
- public String packageName;包名
- public String[] splitNames;
- public int versionCode;版本号
- public String versionName;版本名称
- public ApplicationInfo applicationInfo;
- public long firstInstallTime;第一次安装时间
- public long lastUpdateTime;上次更新时间
- public ActivityInfo[] activities;所有的Activity信息
- public ActivityInfo[] receivers; 所有的广播接收者
- public ServiceInfo[] services;所有的服务信息
- public ProviderInfo[] providers;获取ContentProvide
- public PermissionInfo[] permissions;所有的权限信息
代码
public boolean getAPKPackageInfo(String path) {
// 获取PackageManagerAPK的信息
try {
PackageManager packageManager = mActivity.getPackageManager();
PackageInfo packageInfo = packageManager
.getPackageArchiveInfo(path, PackageManager.GET_ACTIVITIES);
if (U.notNull(packageInfo) && packageInfo.versionName
.equals(getUpdateInfo().newVersionName)) {
return true;
}
} catch (Throwable ignore) {
}
return false;
}
网友评论