最新内容请见原文:Android 插件化 动态升级

不少朋友私信以及Android开源交流几个 QQ 群中都问到这个问题,这里简单介绍下

1、作用

大多数朋友开始接触这个问题是因为 App 爆棚了,方法数超过了一个 Dex 最大方法数 65535 的上限,从这个介绍中也知道可以通过多个 Dex 来解决这个问题,因而便有了插件化的概念,将一个 App 划分为多个插件(Dex或相关格式)
常用的其他解决方法还包括:删无用代码,用 H5 代替部分逻辑,买付费版的 Proguard
插件化的其他作用包括:(1) 模块解耦,(2) 单个dex函数不能超过 65535,(3) 动态升级,(4) 高效开发(编译速度更快)

2、概念

Android 插件化 —— 是指将一个程序划分为不同的部分,比如一般 App 的皮肤样式就可以看成一个插件
Android 组件化 —— 这个概念实际跟上面相差不那么明显,组件和插件较大的区别就是:组件是指通用及复用性较高的构件,比如图片缓存就可以看成一个组件被多个 App 共用
Android 动态加载 —— 这个实际是更高层次的概念,也有叫法是热加载或 Android 动态部署,指容器(App)在运⾏状态下动态加载某个模块,从而新增功能或改变某⼀部分行为

3、相关资料

插件化的原理实际是 Java ClassLoader 的原理,看其他资料前请先看:Java ClassLoader基础及加载不同依赖 Jar 中的公共类

Android 也有自己的 ClassLoader,分为 dalvik.system.DexClassLoader 和 dalvik.system.PathClassLoader,区别在于 PathClassLoader 不能直接从 zip 包中得到 dex,因此只支持直接操作 dex 文件或者已经安装过的 apk(因为安装过的 apk 在 cache 中存在缓存的 dex 文件)。而 DexClassLoader 可以加载外部的 apk、jar 或 dex文件,并且会在指定的 outpath 路径存放其 dex 文件

(1) 开源项目
https://github.com/singwhatiwanna/dynamic-load-apk
这个项目实现了一部分的动态加载,原理是 DexClassLoader 加 Activity 代理,可以看看。
这个项目里有几个问题没解决,一个是 FragmentActivity 或是 ActionBarActiviy 的代理方式不行,因为存在 ClassLoader 隔离问题,可用打包方式去掉相同依赖包只保留一份来解决。that 指针可通过复写大部分接口从而改为 this 指针调用即可,另外 Activity 的创建过程有缺失

https://github.com/mmin18/AndroidDynamicLoader
这是点评一个工程师介绍的方式,和上面不同的是:他不是用代理 Activity 的方式实现而是用 Fragment 以及 schema 的方式实现

(2) 其他资料
淘宝伯奎:Android插件化及动态部署—ATLAShttp://v.youku.com/v_show/id_XNTMzMjYzMzM2.html

最后:Demo 实现起来很简单,但整体以及细节的考虑很多,还是很费时间的,大家有其他不错的资料也欢迎评论中告诉我

透露下:
如果时间允许的话,国庆前会把我上半年对于插件化分享的 PPT 放出来,至于整体的实现源码的开源因为还有不少小 Bug,还得等一段时间
中秋后会放出上半年一个关于Java 注解以及几个常用开源项目注解原理的分析,欢迎围观

更多相关文章

  1. bugly镜像地址,可以下载android sdk的插件
  2. 安装 Mono for Android Visual Studio 2010 插件
  3. Android 利用 xml 文件实现 ImageView 的加载转圈动画
  4. Android 中插件的编写方法
  5. Android动态生成控件居中显示
  6. Handler传递参数动态更新UI界面demo
  7. Android--动态添加控件
  8. android > WebView > 加载完整网页
  9. Android UI 优化-使用theme 预加载

随机推荐

  1. Android创建XMl文件 .
  2. Android(安卓)代码监控apk安装,卸载,替换
  3. Android的List Dialog实例
  4. android 手风琴
  5. android 判断屏幕是否关闭
  6. android使用5.0的toolbar,自定义布局参考
  7. Android(安卓)XML pull解析
  8. android在Service,BroadCast onReceiver(
  9. Android(安卓)OTA升级详细流程分析(non-AB
  10. Android(安卓)中的建造者模式