Shadow icon indicating copy to clipboard operation
Shadow copied to clipboard

安卓5.1(雷电模拟器3.1.18)loadPlugin里面 packageManager.getPackageArchiveInfo得到的packageArchiveInfo为null,

Open yexingyun opened this issue 3 years ago • 5 comments

这是系统的问题吗?在其他版本倒是正常,权限是给了的

yexingyun avatar Apr 07 '22 07:04 yexingyun

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。

shifujun avatar Apr 07 '22 07:04 shifujun

是这段代码,这个getPackageArchiveInfo有其他方法代替吗?这个定制系统的bug的话,比较难搞了,

yexingyun avatar Apr 07 '22 08:04 yexingyun

c8185fd9e3b12a34e2824c31dc44ea5f4cb0ffc6 就是对getPackageArchiveInfo的替代。getPackageArchiveInfo是利用系统API在运行时解析apk。c8185fd9e3b12a34e2824c31dc44ea5f4cb0ffc6 是写了一个编译期模块在编译插件时,自行解析manifest。

如果你的插件自己没有调用getPackageArchiveInfo的需求,直接采用 c8185fd9e3b12a34e2824c31dc44ea5f4cb0ffc6 的实现就行了。

如果插件自身也需要getPackageArchiveInfo,那目前的代码还不能脱离对getPackageArchiveInfo的依赖。要么插件自身代码改造,要么继续开发Shadow基于编译期解析支持。

shifujun avatar Apr 07 '22 08:04 shifujun

“”直接采用 c8185fd 的实现“”,我可以理解为把这个commit的修改对应去修改我现在项目的文件就可以了吗?本人比较小白,所以问一下

yexingyun avatar Apr 07 '22 09:04 yexingyun

用git cherry-pick应该就可以了。这里需要2个提交:https://github.com/Tencent/Shadow/pull/731/commits

如果搞不定cherry-pick,就用最新的代码吧。

shifujun avatar Apr 07 '22 09:04 shifujun