360 Replugin 插件化 支持 Androidx和Java8

最近项目需求,需要将公司里面多个APP都融合在一起,所以来试试360插件框架,

先贴源码和wiki连接 https://github.com/Qihoo360/RePlugin/blob/dev/README_CN.md

按照wiki上面的接入说明,很快,自己编写的Demo就能能运行了。想着也挺简单的。

于是开始接入项目,问题接踵而至!

1.如何适配Androidx

官网给的接入版本如下

classpath 'com.qihoo360.replugin:replugin-host-gradle:2.2.4'

compile 'com.qihoo360.replugin:replugin-host-lib:2.2.4'

classpath 'com.qihoo360.replugin:replugin-plugin-gradle:2.2.4'

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

只能支持 AndroidGradle 插件版本 2.3.3 的,根本没法达到 Androidx 需要的 AndroidGradle 插件版本 3.2.0 的最低要求。

好在源码下载下来后看到,Relpugin 的版本已经更新至 2.3.4 了,尝试了更新版本,然后将 AndroidGradle 插件版本升级 3.5.3

妥了,可以编译,可以运行了,开心。

刚点开项目,报错了

     Caused by: java.lang.IllegalStateException: This app has been built with an incorrect configuration. Please configure your build for VectorDrawableCompat.

百度一波, 都是让我把 AndroidGradle 插件版本升级到 2.0 以上,可是我的已经是 3.5.3 了,不明觉厉,还有说在 build.gradle 中加入 

defaultConfig {
    vectorDrawables.useSupportLibrary = true
    ...
  }

不好使,没办法,降低 AndroidGradle 插件版本到 3.2.0 满足 Androidx 最低要求。编起来,等待中,报错,接下来第二个问题。

2.插件项目需要支持Java8

AndroidGradle 插件版本到降到 3.2.0 后,编译报错如下:

error processing F:\plugin_space\Plugin2\app\build\intermediates\transforms\___ReClass___\debug\7.jar
java.lang.RuntimeException
	at org.objectweb.asm.ClassVisitor.visitModule(ClassVisitor.java:148)
	at org.objectweb.asm.ClassReader.readModule(ClassReader.java:731)
	at org.objectweb.asm.ClassReader.accept(ClassReader.java:632)
	at org.objectweb.asm.ClassReader.accept(ClassReader.java:500)
	at com.android.builder.desugaring.DesugaringClassAnalyzer.analyze(DesugaringClassAnalyzer.java:144)
	at com.android.builder.desugaring.DesugaringClassAnalyzer.analyzeJar(DesugaringClassAnalyzer.java:92)
	at com.android.builder.desugaring.DesugaringClassAnalyzer.analyze(DesugaringClassAnalyzer.java:63)
	at com.android.build.gradle.internal.transforms.DesugarIncrementalTransformHelper.lambda$getInitalGraphData$4(DesugarIncrementalTransformHelper.java:150)
	at java.util.concurrent.ForkJoinTask$AdaptedCallable.exec(ForkJoinTask.java:1424)
	at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
	at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
	at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
	at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)

莫名其妙的错,感觉不妙,像是在打包 jar 时候的错,进入知识盲区,百度也不好使了,正在慌乱之际,灵光一现,AndroidGradle 插件版本 3.5.3 的时候编译通过了,只是运行有问题,那我找个中间版本的试试,于是将 AndroidGradle 插件版本改为 3.4.0

classpath 'com.android.tools.build:gradle:3.4.0'

编译......,通过了,开心,放到宿主,安装运行....跑起来了,开心坏了。

接下来就是一些代码上调试的问题,比如

Q: 插件注册的静态广播在插件未启动的时候无法接收

A:发送广播之前调用下面代码,将插件Manifest先解析出来,静态广播就能收到了

RePlugin.fetchComponentList(P_Constants.ALIAS_PLUGIN_1);

Q:插件如何打断点,如何调试

A:在插件代码端的Studio,点击调试按钮,弹出的对话框中选择 show all processes,找到自己的进程打上断点。

Q:插件里面获取Context的方式

A:在插件中,PluginApplication.getContext(),getApplicationContext(),RePlugin.getPluginContext(),getApplication(),RePlugin.getHostContext() 都有所不一样

以下是对应的对象地址,所以在插件中如果要使用 Context,需要注意使用的对象。

2020-08-06 16:26:57.637 14270-14270/com.optima.ww_host D/WMA-WMA-PLUGIN: PluginApplication.getContext() =       com.optima.ww_plugin.PluginApplication@d6c4fad
2020-08-06 16:26:57.637 14270-14270/com.optima.ww_host D/WMA-WMA-PLUGIN: getApplicationContext() =                     com.optima.ww_plugin.PluginApplication@d6c4fad
2020-08-06 16:26:57.637 14270-14270/com.optima.ww_host D/WMA-WMA-PLUGIN: RePlugin.getPluginContext() =            com.qihoo360.loader2.PluginContext@21b3291
2020-08-06 16:26:57.637 14270-14270/com.optima.ww_host D/WMA-WMA-PLUGIN: getApplication() =                                    com.optima.ww_host.MainApplication@1709404
2020-08-06 16:26:57.637 14270-14270/com.optima.ww_host D/WMA-WMA-PLUGIN: RePlugin.getHostContext() =                com.optima.ww_host.MainApplication@1709404

接下来上传我的 Demo 地址吧

宿主:https://github.com/IamMusicBoom/Host

插件1:https://github.com/IamMusicBoom/Plugin1

插件2:https://github.com/IamMusicBoom/Plugin2

依赖包,封装库:https://github.com/IamMusicBoom/RePluginLib

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值