一、前言

在上一篇博客的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。

更多相关文章

  1. android真实项目教程(一)——App应用框架搭建_by_CJJ
  2. android 应用程序自适应屏幕大小
  3. 自定义Android(cacerts.bks)添加根证书
  4. Android开发学习笔记:我的第一个Android程序--HelloWorld
  5. android 图片浏览器 APP 源码
  6. Android(安卓)ANR原因分析(基于traces.txt文件),
  7. Android学习整理- 8 -MediaPlayer 放歌
  8. android实现m3u8直播缓存/下载,M3U8Manger
  9. Android(安卓)Study -- pmem driver代码分析

随机推荐

  1. Android之GPU过度绘制与图形渲染优化——
  2. Android事件总线框架设计:EventBus3.0源码
  3. Android(安卓)官方 Training 文档学习总
  4. 你觉得Android又凉了?那带你看下2020年And
  5. VINS在Android上的实现
  6. Android实现自定义测滑栏
  7. 用Ant手动打包android程序,android分包机
  8. 一篇文章带你领略Android混淆的魅力
  9. Android(安卓)UI 模式(patterns)
  10. 从Titlebar到Actionbar再到Toolbar