插件apk没有真正加载到android系统中,因此插件apk代码调用了获取metadata时就会出现PackageName not found 异常的情况;
要解决问题,先看下代码是如何调用的,比如以下调用
ApplicationInfo appInfo = this.getPackageManager() .getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA); String msg=appInfo.metaData.getString("myMsg"); System.out.println("myMsg:"+msg);
通过getPackageManage接口来获取包管理,然后再找application的metadata。因此,通过覆盖系统的PackageManage,在getPackageManage()返回自己的继承PackageManage新的类。继承类重写方法getapplicationInfo判断包名是插件的apk包名时,就用系统PackageManage解析插件apk的metadata,然后再返回applicationInfo。代码如下:
this.getPackageManager().getPackageArchiveInfo(xxx/xxxx.apk, PackageManager.GET_META_DATA);