由于工作中开发的Android项目比较大,编译瞬间比较长,就算是二次编译,也要好几分钟,其他插件又不能很好的适配我的项目,所以就自己做了一个增量编译的插件,设计实现上是尽可能简单,减少维护成本,有需要的同学可以参考,尝试接入自己的项目
项目地址 https://gitee.com/wuyijun/AndroidBuilder
一、原理
- 增量编译Java原理:
Android ClassLoader的findClass会从ClassLoader.pathList.dexElements[]数组里面按顺序查找dex加载class,所以可以Hook了ClassLoader.pathList.dexElements[],将补丁的dex插入到数组的最前端,所以会优先查找到修改的类。
-
增量编译res原理
在应用启动调用Application#attachBaseContext时,此时插件工程的Application还未初始化,替换ActivityThread里面的mPackages和mResourcePackages的资源路径,从而到达替换资源的效果。
二、打包流程
- 全量打包流程
- 全量打包流程