方法一关掉aapt2
ini复制代码android.enableAapt2=false
在mergeDebugResources后 , processDebugResources前扫描文件夹
前面说过 , mergeDebugResources是合并所有module的资源文件到固定目录
那么processDebugResources是什么呢?就是处理这些已经合并完成的文件 , 生成R.id , 资源索引之类的文件
那么我们的任务就必须插入到processDebugResources前面 , 而不是mergeDebugResources了
方法二仔细翻了翻MergeResources里面的方法 , 有一个getResSet和computeResourceSetList看起来有点意思 。那么computeResourceSetList中又调用了getResSet 。最后发现computeResourceSetList果然可以获取所有文件列表 。
less复制代码/*** Computes the list of resource sets to be used during execution based all the inputs.*/@VisibleForTesting@NonNullList<ResourceSet> computeResourceSetList()
【Android图片资源检测插件实现】注释也很有意思 , 有道翻译一下:根据所有输入计算执行期间使用的资源集列表 。
鉴于该方法是友元方法 , 就使用反射获取 。
因为3.3之后 , aapt2是强制开启的 , 并且aapt2 merge后的文件不是原文件了哦!注意aapt1合并后 , 还是正常的xxx.png 。aapt2合并后的文件扩展名为flatallRawAndroidResources和扫描合并文件夹的差异 。allRawAndroidResources提供的是未合并前的资源路径
所以 , 方法一不支持大于3.3的gradle版本 。方法二支持 。可以平滑过渡到新版本 。鉴于新版本的gradle直接提供了allRawAndroidResources这样的方法 , 所以在3.3以上 , 直接使用它就可以了
- 源码依赖的module , 编译时 , 会获取该文件的真实路径
- aar依赖的路径 , 会获取到aar-cache的路径
- 所以:如果开启自动转换webp功能你会发现:你本地源代码中的png , 都转成了webp
- 不会影响源代码
- 已经扫描过的 , 且确认无法经过webp优化的图片 , 把这些名称写入一个本地文件 , 优化扫描速度
- 拦截了多少图片
- 转换了多少图片
- 3. 统计各个模块的图片资源情况 。在合适的时间进行预警
推荐阅读
- 把Android手机变成电脑摄像头,开发者倒苦水:40行代码搞定,但需要40个项目文件支持!
- 调料配方分析检测 检测调料配方需要到哪里检测
- 甲醛检测治理方法 甲醛检测治理方法有哪些
- 联想笔记本未检测到电池 笔记本未检测到电池
- tds水质检测多少为饮用水 水质检测多少可以直饮
- 怎么检验新iphone是不是翻新机 新苹果手机怎么检测是否翻新机
- 核酸检测怎么做的疼不疼 核酸检测怎么做痛苦吗
- 支付宝如何预约上门核酸检测报告 支付宝如何预约上门核酸检测
- 做核酸检测之前吃了东西会影响结果吗 核酸检测前吃了东西怎么办
- e视力表标准检测方法有哪些 e视力表标准检测方法