一、为什么我们要插件话?
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
-Android官方解决方案:multidex support library
2. 插件资源访问
-通过反射,通过调用AssetManager中的addAssetPath方法
3. 插件Activity生命周期
-代理Activity
四、技术原理
ClassLoader[6]
1. 隔离问题
2. Android ClassLoader
-dalvik.system.DexClassLoader
-dalvik.system.PathClassLoader
1. 隔离问题
2. Android ClassLoader
-dalvik.system.DexClassLoader
-dalvik.system.PathClassLoader
五、开源方案
1. DynamicLoadApk2. AndroidDynamicLoader
3. PluginManager
4. DroidPlugin