安卓5.1(雷电模拟器3.1.18)loadPlugin里面 packageManager.getPackageArchiveInfo得到的packageArchiveInfo为null,
这是系统的问题吗?在其他版本倒是正常,权限是给了的
https://github.com/Tencent/Shadow/blob/d27e984aff6caaa2cf6812c5edbc0aa817ade486/projects/sdk/core/loader/src/main/kotlin/com/tencent/shadow/core/loader/blocs/LoadPluginBloc.kt#L68-L77
是这段代码吧?如果是5.1版本的系统,从线上运营的经验来看,应该是这个OEM系统的实现Bug。因为这段代码作为加载插件的主路径,已经在大量系统上验证没问题了。
目前这段代码已经被 c8185fd9e3b12a34e2824c31dc44ea5f4cb0ffc6 通过编译期自行解析manifest替代掉了。
但如果插件业务代码通过PackageManager获取自身信息,确实还是会转调到PluginPackageManagerImpl中通过getPackageArchiveInfo解析自身apk。
是这段代码,这个getPackageArchiveInfo有其他方法代替吗?这个定制系统的bug的话,比较难搞了,
c8185fd9e3b12a34e2824c31dc44ea5f4cb0ffc6 就是对getPackageArchiveInfo的替代。getPackageArchiveInfo是利用系统API在运行时解析apk。c8185fd9e3b12a34e2824c31dc44ea5f4cb0ffc6 是写了一个编译期模块在编译插件时,自行解析manifest。
如果你的插件自己没有调用getPackageArchiveInfo的需求,直接采用 c8185fd9e3b12a34e2824c31dc44ea5f4cb0ffc6 的实现就行了。
如果插件自身也需要getPackageArchiveInfo,那目前的代码还不能脱离对getPackageArchiveInfo的依赖。要么插件自身代码改造,要么继续开发Shadow基于编译期解析支持。
“”直接采用 c8185fd 的实现“”,我可以理解为把这个commit的修改对应去修改我现在项目的文件就可以了吗?本人比较小白,所以问一下
用git cherry-pick应该就可以了。这里需要2个提交:https://github.com/Tencent/Shadow/pull/731/commits
如果搞不定cherry-pick,就用最新的代码吧。