RePlugin提供了非常丰富的“自定义行为”特性。帮助您更好的在“无需修改源代码”的情况下,来使用RePlugin。
本文将分为两大部分:如何自定义
最常见的自定义行为
如何自定义?
RePlugin的自定义行为,全部集中在RePluginConfig类中,并写了非常详细的JavaDoc供您们参考。
设置Config
推荐在RePluginApplication中覆写createConfig方法,如下:publicclassSampleApplicationextendsRePluginApplication{
@Override
protectedRePluginConfigcreateConfig(){
RePluginConfigc=newRePluginConfig();
...
returnc;
}
如果您是“非继承式”,则需要在调用 RePlugin.App.attachBaseContext() 的地方,传递RePluginConfig即可。具体做法如下:RePluginConfigc=newRePluginConfig();
...
RePlugin.App.attachBaseContext(context,c);注意:RePluginConfig中的东西是“只允许写一次的”。一旦在上述两个地方设置了RePluginConfig之后,则其内变量不允许再修改,其表现为调用所有set方法均失效,提示“rpc.cam: do not modify”错误。
设置Callbacks
Callbacks(含EventCallbacks)都存在RePluginConfig内,设置方法:RePluginConfig.setCallbacks()
RePluginConfig.setEventCallbacks()
除此之外,针对RePluginCallbacks,我们还提供了一套更便捷的设置方式,同样,可以继承RePluginApplication中的createCallbacks方法,并让其继承RePluginCallbacks,如下:publicclassSampleApplicationextendsRePluginApplication{
@Override
protectedRePluginCallbackscreateCallbacks(){
returnnewHostCallbacks(this);
}
privateclassHostCallbacksextendsRePluginCallbacks{
privateHostCallbacks(Contextcontext){
super(context);
}
...
}
}
只需createCallbacks即可,无需配置RePluginConfig,其RePluginApplication类内部会做相应的处理。
常见的自定义行为
以下是您们经常用到的常见自定义行为,在Sample的Host中已经都体现了,大家欢迎参考。
除了这些常见自定义行为外,RePlugin还提供了大量的方法帮助您设置。具体可参见以下类的JavaDoc帮助:RePluginConfig
RePluginCallbacks
RePluginEventCalbacks
RePlugin
在插件不存在时,提示下载
通过覆写 RePluginCallbacks.onPluginNotExistsForActivity() 方法,当插件"没有安装"时触发此逻辑,可打开您的"下载对话框"并开始下载。其中"intent"需传递到"对话框"内,这样可在下载完成后,打开这个插件的Activity。
@Override
publicbooleanonPluginNotExistsForActivity(Contextcontext,Stringplugin,Intentintent,intprocess){
…
returnsuper.onPluginNotExistsForActivity(context,plugin,intent,process);
}
开启“插件类不存在时读取宿主”功能
RePlugin默认不鼓励大家使用此功能(具体原因参见FAQ的说明)。但由于此类需求相对较多(包括360手机助手在内)。我们研究出一套“稳定的”插件与宿主共享类方案,插件可“无缝”使用宿主类,且没有Hook,无需改变父子类加载器关系。
具体做法很简单,调用RePluginConfig.setUseHostClassIfNotFound(true)即可。如不调用,则默认不支持此功能,这样更稳定。
开启/关闭“签名校验”功能
有关“签名校验”的具体信息,请点击此处阅读《插件的管理》中“安全与签名校验”一节。其开关在RePluginConfig.setVerifySign()中。
针对打点统计数据,或特殊事件的处理
RePluginEventCallbacks就是为此需求而设计。请详见JavaDoc以及Sample中所述,这里只展示最常用的“插件安装失败”的示例。
@Override
publicvoidonInstallPluginFailed(Stringpath,InstallResultcode){
QDasStats.reportFail(xxx);
super.onInstallPluginFailed(path,code);
}