RePlugin 常见问题总结

来源:互联网 发布:大数据应用方向 编辑:程序博客网 时间:2024/06/05 20:44

1.共享宿主
讲宿主需要的文件提取出来编译成库,骗过编译期。主要看demo1中的build.gradle有相关说明。 骗过编译期。

2.插件文件64K(multidex)了怎么破?需要对插件进行编译拆包。com.ceabie.dextools:gradle-dexknife-plugin:1.6.1分包的问题,打包后虽然有主classes有找到com.qihoo360.replugin.Entry但还是报错,自己手动添加maindexlist.txt在里面添加com.qihoo360.replugin打包进去就好了,具体操作请参考,感谢博主

3.context异常,当前是的上下文是谁的,这个要明确。宿主or插件。

4.android 8.0 异常代码RePlugin.getConfig().getCallbacks().createPluginClassLoader(mPluginObj.mInfo, mPath, out, soDir, parent);不会再out目录下面生成.dex文件

5.插件相关权限要提前在宿主中注册。

6.demo里面的host运行抱错,可先注释掉,可直接运行。

    private void testThreadClassLoader() {        // 在2.1.7及以前版本,如果直接调用此方法,则拿到的ClassLoader可能是PathClassLoader或者为空。有极个别Java库会用到此方法        // 这里务必确保:cl == getClassLoader(),才符合预期//        ClassLoader cl = Thread.currentThread().getContextClassLoader();//        if (cl != getClassLoader()) {//            throw new RuntimeException("Thread.current.classLoader != getClassLoader(). cl=" + cl + "; getC=" + getClassLoader());//        }    }

7.intent传serializable对象失败。
检测是否serializable对象里面是否有id,建议用Parcelable来传值。

8.源码与字节码不匹配,清除gradle repo缓存后就ok了。

9.支持混淆,务必要确保你调用的,以Provided形式的Jar是被Keep住的。

10.LocalBoradcastManager和PluginLocalBroadcastManager 是平行关系,非继承!

11.插件中的Activity嵌套Fragment崩溃,记得Fragment不被混淆,声明为Public的,而且得有一个Public的构造函数。如果遇到xml中fragment问题,可先new再add进去。

12.启动抱错,忘记加repluginPluginConfig 在插件中

repluginPluginConfig {     //宿主app的包名    pluginName = "插件名.demo1"      //宿主app的包名    hostApplicationId = "宿主.参见demo"    //宿主app的启动activity    hostAppLauncherActivity = "插件.参见demo"}

13.插件可以复用主程序的资源,可以的,因为会同时把host和plugin的Context传递给插件.

14.插件里面WebView读取asserts的ERR_FILE_NOT_FOUND参见issue

15.插件中引用AAR中的activity,会出现白屏.参见issue

16.Didn’t find class “com.qihoo360.replugin.Entry”.检查是否缺少相关依赖

compile 'com.qihoo360.replugin:replugin-plugin-lib:2.1.6'

17.大部分Context导致的问题,要明白是宿主的Context还是插件的Context。我们当前是在哪里使用的Context。使用宿主资源建议用getIdentifier,最好还不要资源混淆宿主源文件。

18.插件app好像不兼容百度地图,因为Windows环境下编译时,大小写不区分导致的问题(实际上也是百度地图Jar包生成时出现了问题,明明是a,但文件名变成了A)

19.嵌套插件,原理上行得通。但是最好不要加固!

20.无法启动demo第3个PluginFragmentActivity。
setUseHostClassIfNotFound(true)方法?没有调用的话就会出这个Error,因为只有打开此开关后才会从宿主中读取Fragment等公共库

21.加固问题。宿主加固没问题,插件加固目前是不可以的

22.阿里路由框架问题,可去次库寻找答案

23.后续会持续收集各种问题。

1)RePlugin主程序接入指南
2)RePlugin的FAQ