Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(core.manager): 大于API 33,安装插件时,禁止插件文件可写入 #1357

Merged
merged 3 commits into from
Dec 24, 2024

Conversation

AntonioShare
Copy link
Contributor

Fixed the issue causing crashes due to writable dex files on Android 14. #1344

@tencent-adm
Copy link
Member

tencent-adm commented Dec 24, 2024

CLA assistant check
All committers have signed the CLA.

@AntonioShare AntonioShare changed the title fix(dynamic): Android14 writable dex file fix(dynamic): Android14 writable dex file issue Dec 24, 2024
@AntonioShare AntonioShare changed the title fix(dynamic): Android14 writable dex file issue fix(dynamic): Android14 writable dex file Dec 24, 2024
@shifujun
Copy link
Collaborator

Android SDK android-33 没有安装

看起来CI环境有变化。我修一下。修好我来重新触发这个PR的CI。

@AntonioShare
Copy link
Contributor Author

Android SDK android-33 未安装

看起来CI环境有变化。我修改一下。修改好我来重新触发这个PR的CI。

ok

@shifujun
Copy link
Collaborator

另外这个问题怎么复现呢?CI之前也在api 34的虚拟机上跑过自动化测试,没crash。

@AntonioShare
Copy link
Contributor Author

AntonioShare commented Dec 24, 2024

另外这个问题怎么复现呢?CI之前也在api 34的虚拟机上跑过自动化测试,没crash。

直接跑sample-hello-host,点击按钮“宿主自定义接口的动态化”,如果sample-hello-host的TargetSdk为34会崩溃,如果没有升高TargetSdk,但是运行在34的手机上,会有E等级的错误Attempt to load writable dex file: /data/user/0/com.tencent.shadow.sample.hello.host/files/hello.apk但不会崩溃,所以应该逃过了自动化的测试

@shifujun
Copy link
Collaborator

那需要把自动化测试的host的target升到34来复现问题。

而且加载插件的classloader也需要改吧。

这个项目维护的很低频,我们尽量每个改动都有CI验证才好。

@AntonioShare
Copy link
Contributor Author

那需要把自动化测试的host的target升到34来复现问题。

而且加载插件的classloader也需要改吧。

这个项目维护的很低频,我们尽量每个改动都有CI验证才好。

整体升级为34的话感觉还有很多其他组件需要修改,你看下分步走还是一次性完整提交比较好,如果一次性提交的话我可能还需要一段时间

@AntonioShare
Copy link
Contributor Author

那需要把自动化测试的host的target升到34来复现问题。

而且加载插件的classloader也需要改吧。

这个项目维护的很低频,我们尽量每个改动都有CI验证才好。

看是否需要我分多次pull来解决,保证修改的原子性

尽量少改动的方式增加target 34的一个冒烟测试,
只测试一个随意的插件用例能通过。
由于插件apk都是BasePluginManager负责解压缩的,所以它应该负责它们禁止可写。

但是PluginManager本身的apk更新应该由更新文件的代码本身禁止文件可写入。

Tencent#1344
@shifujun
Copy link
Collaborator

我给target 34加了一个冒烟测试。

试着让它跑起来,还好要改动的不多。

你之前的修改不是很合适。
首先这个设置不可写的问题肯定和loadWhiteList没有关系,不能写在那里面。
然后考虑一下这个设置应该由什么逻辑来做。我觉得还是应该由更新这些动态代码的逻辑来做,
谁最初负责写入这些文件,就应该在写入完成后就设置它们为不可写的状态。
所以PluginManger的更新逻辑就应该更新完之后设置不可写。
而插件的更新逻辑,目前的代码是BasePluginManager做的,所以它应该负责这件事。

@AntonioShare
Copy link
Contributor Author

我给target 34加了一个冒烟测试。

试着让它跑起来,还好要改动的不多。

你之前的修改不是很合适。 首先这个设置不可写的问题肯定和loadWhiteList没有关系,不能写在那里面。 然后考虑一下这个设置应该由什么逻辑来做。我觉得还是应该由更新这些动态代码的逻辑来做, 谁最初负责写入这些文件,就应该在写入完成后就设置它们为不可写的状态。 所以PluginManger的更新逻辑就应该更新完之后设置不可写。 而插件的更新逻辑,目前的代码是BasePluginManager做的,所以它应该负责这件事。

我刚好也在改,你说的没错,并且在安装的时候需要置为可写,我看你已经加上了,并且修复了广播的问题

@shifujun shifujun changed the title fix(dynamic): Android14 writable dex file feat(core.manager): 大于API 33,安装插件时,禁止插件文件可写入 Dec 24, 2024
@shifujun shifujun merged commit f345894 into Tencent:master Dec 24, 2024
13 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
3 participants