Replugin的背景就不介绍了,感兴趣的可以去这里看看。
首先是在项目的根目录的build.gradle中添加宿主依赖:
classpath 'com.qihoo360.replugin:replugin-host-gradle:2.2.4'
然后在宿主App的build.gradle中添加配置:
apply plugin: 'replugin-host-gradle'
/**
* 配置项均为可选配置,默认无需添加
* 更多可选配置项参见replugin-host-gradle的RepluginConfig类
* 可更改配置项参见 自动生成RePluginHostConfig.java
*/
repluginHostConfig {
/**
* 是否使用 AppCompat 库
* 不需要个性化配置时,无需添加
*/
useAppCompat = true
/**
* 背景不透明的坑的数量
* 不需要个性化配置时,无需添加
*/
// countNotTranslucentStandard = 6
// countNotTranslucentSingleTop = 2
// countNotTranslucentSingleTask = 3
// countNotTranslucentSingleInstance = 2
}
以及:
dependencies {
...
implementation 'com.qihoo360.replugin:replugin-host-lib:2.2.4'
}
接着就是重写application了,在这里只说明继承RePluginApplication的情况。
需要重写CreateConfig方法:
@Override protected RePluginConfig createConfig() { RePluginConfig c = new RePluginConfig(); // 允许“插件使用宿主类”。默认为“关闭” c.setUseHostClassIfNotFound(true); // 打印详细日志 c.setPrintDetailLog(true); // FIXME RePlugin默认会对安装的外置插件进行签名校验,这里先关掉,避免调试时出现签名错误 c.setVerifySign(!BuildConfig.DEBUG); // FIXME 若宿主为Release,则此处应加上您认为"合法"的插件的签名,例如,可以写上"宿主"自己的。签名证书的MD5 // RePlugin.addCertSignature("AAAAAAAAA"); // 在Art上,优化第一次loadDex的速度 c.setOptimizeArtLoadDex(true); return c; }
最后将application配置到manifext文件中。
至此宿主APP配置配置完成。
下面接着配置插件:
如果插件跟宿主APP在同一个项目下,那么就要再根目录的build.gradle中添加插件依赖:
classpath 'com.qihoo360.replugin:replugin-plugin-gradle:2.2.4'
然后在插件的buid.gradle中添加配置:
apply plugin: 'replugin-plugin-gradle' repluginPluginConfig { //插件名 pluginName = "plugincomponent" //宿主app的包名 hostApplicationId = "com.lml.plugin" //宿主app的启动activity hostAppLauncherActivity = "test2018.plugincomponent.MainActivity" }
且apply plugin: 'replugin-plugin-gradle'必须是在android模块之后配置。
然后再接着配置:
dependencies {
... implementation 'com.qihoo360.replugin:replugin-plugin-lib:2.2.4' }
现在宿主APP与插件APP的配置都已经完成,那么就剩下启动了(中间安装插件什么的就自行写了,很简单)。
启动有个地方特别注意:
如果我们在插件APP中的manifext中配置了
<meta-data android:name="com.qihoo360.plugin.name" android:value="plugincomponent" />
那么启动就可以以插件名的方式启动类似于这样:
Intent plugincomponent = RePlugin.createIntent("plugincomponent", "test2018.plugincomponent.MainActivity"); RePlugin.startActivity(this, plugincomponent);
如果在插件APP中没有配置,那么启动就是以包名的方式启动的:
Intent plugincomponent = RePlugin.createIntent("test2018.plugincomponent", "test2018.plugincomponent.MainActivity"); RePlugin.startActivity(this, plugincomponent);
综上,在使用Replugin的过程中所要注意的就是这些问题了.