“一表四图”读懂Android插件化

一、Android插件化发展历程

序号 插件方案名 发布时间 厂商 特点 开源地址
1 dynamicApkLoader 2012年7月 大众点评(屠毅敏) 利用Fragment代理实现页面跳转,首次使用了通过反射AssetManager来调用addAsset()方法实现处理插件中的资源 https://github.com/mmin18/AndroidDynamicLoader
2 dynamic-load-apk 百度(任玉刚) 利用壳Activity来代理实现插件中的PluginActivity,Service也类似 https://github.com/singwhatiwanna/dynamic-load-apk
3 CJFrameForAndroid 张涛 DynamicLoadApk类似,但是解决了Activity的LaunchMode问题 https://github.com/kymjs/CJFrameForAndroid
4 android-pluginmgr houkx 首次提出在AndroidManifest中埋stubActivity实现欺骗AMS,使用dexmaker.jar动态生成stubActivity https://github.com/houkx/android-pluginmgr
5 direct-load-apk loady 对android-pluginmgr实现改造,hook了Instrumentation,并结合了dynamicLoadApk的静态代理和stub桩位欺骗AMS思想 https://github.com/mmyydd/Direct-Load-apk
6 virtualApp virtualApp Android虚拟化技术,可以直接加载独立的第三方应用。完全模拟了一个Android运行环境 https://github.com/asLody/VirtualApp
7 android-plugin-framework limpoxe Android插件框架,免安装运行插件APK ,支持独立插件和非独立插件 https://github.com/limpoxe/Android-Plugin-Framework
8 android-dynamical-loading kaedea https://github.com/kaedea/android-dynamical-loading
9 DroidPlugin 360 通过stub欺骗AMS和hook instrumentation实现Activity的启动,完全模拟了一个Android运行环境。可以加载独立的第三方app https://github.com/DroidPluginTeam/DroidPlugin
10 openAtlas(ACDD) 阿里 通过修改aapt来修改插件的资源id。hook了instrumentation来实现Activity启动,hook了ContextWrapper并重写getResource来获取插件资源
11 DynamicApk 携程 基于阿里的openAtlas,定制了一些相关业务特性
12 small 林光亮 单个classloader。hook了instrumentation,修改了R.java与sources.arsc文件的id https://github.com/wequick/Small
13 zeus 掌阅 https://github.com/iReaderAndroid/ZeusPlugin
14 Atlas 阿里 https://github.com/alibaba/atlas
15 RePlugin 360 https://github.com/Qihoo360/RePlugin
16 VirtualApk 滴滴 https://github.com/didi/VirtualAPK
17 shadow 腾讯 https://github.com/Tencent/Shadow

二、插件化技术的演变
“一表四图”读懂Android插件化_第1张图片

三、插件化的技术细节

  1. Activity的启动过程分析
    1.1、Android版本小于26
    “一表四图”读懂Android插件化_第2张图片
    1.2、Android版本大于等于26
    “一表四图”读懂Android插件化_第3张图片
    1.3、原理归纳
    “一表四图”读懂Android插件化_第4张图片

“一表四图”读懂Android插件化_第5张图片

你可能感兴趣的:(Android,插件化)