-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Open
Description
背景
我们有一个需求:宿主会传递一个 WebView 给插件使用,WebView 有时需要启动 Dialog。Dialog 需要 FragmentActivity 或 AppCompatActivity 作为 Context,而当前 PluginContainerActivity 继承自普通 Activity,导致 Dialog 无法正常弹出。
因此我尝试将 PluginContainerActivity 改为继承 FragmentActivity。
已完成的修改
- 修改
ActivityCodeGenerator.kt,将GeneratedPluginContainerActivity的父类从Activity改为FragmentActivity - 添加
FragmentActivitystub 类用于编译 - 处理
ComponentActivity的 final 方法(如onRetainNonConfigurationInstance) - 解决
KeyEventDispatcher导致的无限递归问题(覆写superDispatchKeyEvent)
遇到的问题
在 sample 项目中测试正常,但在实际项目中遇到以下问题:
问题 1:使用 compileOnly 依赖时类找不到
在 plugin-runtime 中使用 compileOnly 'androidx.fragment:fragment:1.4.1',加载插件时报错:
Failed resolution of: Lcom/tencent/shadow/core/runtime/container/PluginContainerActivity;
问题 2:使用 implementation 依赖时方法不可访问
改为 implementation 'androidx.fragment:fragment:1.4.1' 后,启动时崩溃:
Method 'androidx.lifecycle.LifecycleEventObserver androidx.lifecycle.Lifecycling.lifecycleEventObserver(java.lang.Object)' is inaccessible to class 'androidx.lifecycle.LifecycleRegistry$ObserverWithState' (declaration of 'androidx.lifecycle.LifecycleRegistry$ObserverWithState' appears in /data/app/~~ZsI_dEdXQCfBzCzBCwZ9fg==/com.netease.gl-T_n2e4Q6M7HhQCr2S2jokw==/base.apk)
at androidx.lifecycle.LifecycleRegistry$ObserverWithState.<init>(LifecycleRegistry.java:353)
at androidx.lifecycle.LifecycleRegistry.addObserver(LifecycleRegistry.java:180)
这个错误看起来是宿主和插件的 androidx.lifecycle 类存在版本冲突或类加载器隔离问题。
问题
- 我的修改方向是否有问题?作者能给一个大概要修改的类的路线吗?
- 如果要让
PluginContainerActivity继承FragmentActivity,在 Shadow 框架中还有需要注意哪些地方?
环境信息
- Shadow 版本:基于 2024-12-25 的 master 分支(commit 09e7e0a)
- androidx.fragment 版本:1.4.1
Metadata
Metadata
Assignees
Labels
No labels