Android热补丁动态修复技术(四):完善框架①
一、前言
在上一篇博客的Demo中,我们指定了注入代码的类只有MainActivity,比较简单。
这次我们需要自动遍历所有的类注入代码。
二、app module编译后的class放在哪
还记得上一篇博文中,PreDexTransfrom的inputs路径吗,在这
app\build\intermediates\classes\debug
debug目录下有两个文件夹,android和com,他们包含的文件如下。
android\support\v7中包含的是v7包中的R文件
com\aitsuki\hotpatchdemo中就是我们项目编译后的class了
注入代码的话,BuildConfig.class和R文件是不需要注入的。
三、app module依赖的Module编译后的class放在哪
我先说答案吧,app依赖的module会事先被打包成jar放到这个目录
app\build\intermediates\exploded-aar
我们正好可以将注入Dex的代码独立封装到一个Module,然后看看它被保存在哪里了。
我已经封装好了,如下
然后查看Transfrom的输入和输出,如下
黄色框圈起来的那一个目录就是我们的hotpatch模块了。
直接解压classes.jar如下
app module依赖的library module会在dexTransfrom执行之前首先被打包成jar,放到
app\build\intermediates\exploded-aar这个目录。
我们看preDexTransfrom的inputs,大多数都是support包,这些都是不需要注入代码的。
四、app module依赖的jar包放在哪
项目中我添加了依赖Glide和xUtils3,看看inputs
依赖的jar包和module一样,是保存在exploded-arr这个目录,但是如果本地缓存保存着这个jar包,也有可能从.gradle\caches中获取。
五、总结2、3、4
那么,到底哪些需要注入代码,哪些不需要呢?
- 首先来说DirInput,也就是debug目录,不需要注入代码的有
- R文件不需要
- BuildConfig不需要
- android\support目录不需要
然后JarInput,引入的jar包和support包可定是不需要的。而我们发现module打包成jar之后的文件名都叫classes.jar
- jarInput, 包含classes.jar且包含 exploded-aar\Project名的需要注入代码
ps: 因为项目比较简单,所以可能还有没考虑到的条件,但是实际开发的时候可以观察inputs目录针对修改。
5.1 PreDexTransfrom代码修改
我们需要在Transfrom中修改下代码,排除掉不需要注入代码的jar。
更多相关文章
- android真实项目教程(一)——App应用框架搭建_by_CJJ
- android 应用程序自适应屏幕大小
- 自定义Android(cacerts.bks)添加根证书
- Android开发学习笔记:我的第一个Android程序--HelloWorld
- android 图片浏览器 APP 源码
- Android(安卓)ANR原因分析(基于traces.txt文件),
- Android学习整理- 8 -MediaPlayer 放歌
- android实现m3u8直播缓存/下载,M3U8Manger
- Android(安卓)Study -- pmem driver代码分析