1、目前开源的插件开发框架大致有哪些?
1、 任玉刚 的 dynamic-load-apk
Github 地址:https://github.com/singwhatiwanna/dynamic-load-apk
2、mmyydd 的 Direct-Load-apk
Github 地址:https://github.com/mmyydd/Direct-Load-apk
3、limpoxe 的 Android-Plugin-Framework
Github 地址:https://github.com/limpoxe/Android-Plugin-Framework
4、bunnyblue 的 ACDD
Github 地址:https://github.com/bunnyblue/ACDD
5、携程网 的DynamicAPK
Github 地址:https://github.com/CtripMobile/DynamicAPK
6、奇虎360 的 DroidPlugin
Github 地址:https://github.com/DroidPluginTeam/DroidPlugin/blob/master/readme_cn.md
7、AndroidDynamicLoader
Github 地址:https://github.com/mmin18/AndroidDynamicLoader
8、Galenlin 林光亮 的 Small
Github 地址:https://github.com/wequick/Small
世界那么大,组件那么小。Small,做最轻巧的跨平台插件化框架。– Galenlin
2、插件化介绍和原理博客
3、框架对比
原文地址: https://github.com/wequick/Small/edit/master/Android/COMPARISION.md
为方便列表,简写如下:
DyLA : Dynamic-load-apk @singwhatiwanna, 百度
DiLA : Direct-Load-apk @FinalLody
APF : Android-Plugin-Framework @limpoxe
ACDD : ACDD @bunnyblue
DyAPK : DynamicAPK @TediWang, 携程
DPG : DroidPlugin @cmzy, 360
- 功能
\ | DyLA | DiLA | ACDD | DyAPK | DPG | APF | Small |
---|---|---|---|---|---|---|---|
加载非独立插件[1] | × | x | √ | √ | × | √ | √ |
加载.so后缀插件 | × | × | ! [2] | × | × | × | √ |
Activity生命周期 | √ | √ | √ | √ | √ | √ | √ |
Service动态注册 | × | × | √ | × | √ | √ | x [3] |
资源分包共享[4] | × | × | ! [5] | ! [5] | × | ! [6] | √ |
公共插件打包共享[7] | × | × | × | × | × | × | √ |
支持AppCompat[8] | × | × | × | × | × | × | √ |
支持本地网页组件 | × | × | × | × | × | × | √ |
支持联调插件[9] | × | x | × | × | × | × | √ |
[1] 独立插件:一个完整的apk包,可以独立运行。比如从你的程序跑起淘宝、QQ,但这加载起来是要闹哪样?
非独立插件:依赖于宿主,宿主是个壳,插件可使用其资源代码并分离之以最小化,这才是业务需要嘛。
– “所有不能加载非独立插件的插件化框架都是耍流氓”。
[2] ACDD加载.so用了Native方法(libdexopt.so),不是Java层,源码见dexopt.cpp。
[3] Service更新频度低,可预先注册在宿主的manifest中,如果没有很好的理由说服我,现不支持。
[4] 要实现宿主、各个插件资源可互相访问,需要对他们的资源进行分段处理以避免冲突。
[5] 这些框架修改aapt源码、重编、覆盖SDK Manager下载的aapt,我只想说“杀(wan)鸡(de)焉(kai)用(xin)牛(jiu)刀(hao)”。
Small使用gradle-small-plugin,在后期修改二进制文件,实现了PP段分区。
[6] 使用public-padding对资源id的TT段进行分区,分开了宿主和插件。但是插件之间无法分段。
[7] 除了宿主提供一些公共资源与代码外,我们仍需封装一些业务层面的公共库,这些库被其他插件所依赖。
公共插件打包的目的就是可以单独更新公共库插件,并且相关插件不需要动到。
[8] AppCompat: Android Studio默认添加的主题包,Google主推的Metrial Design包也依赖于此。大势所趋。
[9] 联调插件:使用Android Studio调试![