本文解决以下两个问题
一、在尝试使用apk本地路径获取packageInfo时,报出:
android.content.pm.PackageParser$PackageParserException: Failed to parse /storage/emulated/0/a.apk
二、使用newInstance()时,报出:
Wrong number of arguments; expected 0, got 1
解决问题
1. 原因是没有动态申请权限
在使用apk本地路径获取packageInfo时, 也就是调用这样一个api, 假设我本地apk存储的路径为: /storage/emulated/0/a.apk
PackageInfo packageArchiveInfo = getPackageManager().getPackageArchiveInfo(pluginApk.getAbsolutePath(), PackageManager.GET_ACTIVITIES);
返回给我的packageArchiveInfo对象为null, 查看cause, 指明清单文件找不到
java.io.FileNotFoundException: AndroidManifest.xml
当我传入apk路径 getPackageCodePath(),也就是自身运行APP的apk路径却没问题.
跟踪错误发现原因出在AssetManager类的addAssetPath()方法,这个方法最终调用到的是native的,最终返回cookie为0抛出此异常.
int cookie = assets.addAssetPath(apkPath);
if (cookie == 0) {
throw new PackageParserException(INSTALL_PARSE_FAILED_NOT_APK,
"Failed to parse " + apkPath);
}
2. 第二个问题明显是因为参数不一致导致的
一看操作能不报错吗, new了一个object的方法,实则应该是一个数组
这样就没错了