为什么需要插件化
1. Dalvik虚拟机有方法数限制:Dex 64k method size limit / LinearAlloc exceeded 5MB capacity, App规模变大时会遇到这个问题
2. 模块解耦
3. 动态升级
4. 按需下载
概念
1. 插件化-指将一个程序划分为不同的部分,比如App皮肤样式
2. 组件化-指通用及复用性较高的构件,比如图片缓存可以看成一个组件被多个 App 共用
3. 动态加载
技术点
1. dex拆分和插件dex加载
-Android官方解决方案:multidex support library
2. 插件资源访问
-通过反射,通过调用AssetManager中的addAssetPath方法
3. 插件Activity生命周期
-代理Activity
技术原理
ClassLoader[6]
1. 隔离问题
2. Android ClassLoader
-dalvik.system.DexClassLoader
-dalvik.system.PathClassLoader
开源方案
1. DynamicLoadApk
2. AndroidDynamicLoader
3. PluginManager
4. DroidPlugin
参考资料
1. http://www.trinea.cn/android/android-plugin/
2. http://www.zhihu.com/question/19981105/answer/30865268
3. https://github.com/Qihoo360/DroidPlugin
4. http://mp.weixin.qq.com/s?__biz=MzAwNDY1ODY2OQ==&mid=207151651&idx=1&sn=9eab282711f4eb2b4daf2fbae5a5ca9a&scene=23&srcid=1012oLGP9VIwtu65wkinTUwb#rd
5. http://ingramchen.io/blog/2014/09/prevention-of-android-dex-64k-method-size-limit.html
6. http://www.trinea.cn/android/java-loader-common-class/
7. https://github.com/singwhatiwanna/dynamic-load-apk
8. https://github.com/alibaba/AndFix
1. Dalvik虚拟机有方法数限制:Dex 64k method size limit / LinearAlloc exceeded 5MB capacity, App规模变大时会遇到这个问题
2. 模块解耦
3. 动态升级
4. 按需下载
概念
1. 插件化-指将一个程序划分为不同的部分,比如App皮肤样式
2. 组件化-指通用及复用性较高的构件,比如图片缓存可以看成一个组件被多个 App 共用
3. 动态加载
技术点
1. dex拆分和插件dex加载
-Android官方解决方案:multidex support library
2. 插件资源访问
-通过反射,通过调用AssetManager中的addAssetPath方法
3. 插件Activity生命周期
-代理Activity
技术原理
ClassLoader[6]
1. 隔离问题
2. Android ClassLoader
-dalvik.system.DexClassLoader
-dalvik.system.PathClassLoader
开源方案
1. DynamicLoadApk
2. AndroidDynamicLoader
3. PluginManager
4. DroidPlugin
参考资料
1. http://www.trinea.cn/android/android-plugin/
2. http://www.zhihu.com/question/19981105/answer/30865268
3. https://github.com/Qihoo360/DroidPlugin
4. http://mp.weixin.qq.com/s?__biz=MzAwNDY1ODY2OQ==&mid=207151651&idx=1&sn=9eab282711f4eb2b4daf2fbae5a5ca9a&scene=23&srcid=1012oLGP9VIwtu65wkinTUwb#rd
5. http://ingramchen.io/blog/2014/09/prevention-of-android-dex-64k-method-size-limit.html
6. http://www.trinea.cn/android/java-loader-common-class/
7. https://github.com/singwhatiwanna/dynamic-load-apk
8. https://github.com/alibaba/AndFix