现在的进展
见PluginDemo ,现在实现了插件中类、资源、Activity的加载。
1、类的加载
step1:通过反射把插件dex和宿主dexElements合并成一个新的dex数组,替换宿主之前的dexElements字段;
2、资源的加载
step2:通过修改过的aapt程序把插件中的资源修id改为不是以0x7f开头的常量(避免与宿主资源冲突);
step3:在宿主app中通过反射调用addAssetPath()方法把宿主及插件的资源都加载进来,并最终生成一个包含所有资源的Resources;
3、Activity的加载
step4:对ActivityManagerNative的getDefault()方法进行Hook,把TargetActivity替换为StubActivity;
step5:对H类的mCallback字段进行Hook,拦截它的handleMessage()方法,把StubActivity再替换回TargetActivity。
不定期更新
现在只适配到API25
更多适配见
Android插件化的兼容性(上):Android O的适配
Android插件化的兼容性(中):Android P的适配
Android插件化的兼容性(下):突破Android P中灰黑名单的限制
更多案例
类加载相关
资源加载相关
Activity加载相关
启动没有在AndroidManifest中声明的Activity
通过hook加载插件中的Activity(需要明确Activity在哪一个插件中)
解耦插件类加载与Activity加载
IPC相关
通过aidl调用远程服务
编辑于2019年4月7日