推荐阅读:

滴滴Booster移动App质量优化框架-学习之旅 一

Android 模块Api化演练

不一样视角的Glide剖析(一)

滴滴Booster移动App质量优化框架-学习之旅 二对重复资源优化和无用资源优化进行了讨论。这里对不可编译无用assets资源优化进行讨论。

先看微信Matrix-ApkChecker是怎样检索对无用assets资源。ApkCheckers是针对 android 安装包的分析检测工具,反汇编apk包中dex文件,在内存生产smali相关数据,检索  const-string 指令 line,根据const-string指令 后面字符串常量值 与 assets资源名是否相等,找出usedAssetsResouces,比如:

//如果 能在assets文件夹booster_demo_1.png
//则booster_demo_1.png为usedAssetsResources
const-string v0, "booster_demo_1.png"

反汇编dex使用了如下两个jar包:

implementation "org.smali:smali:2.2.7"
implementation "org.smali:baksmali:2.2.7"

不过这种方式只能粗略的检索出来,比如使用三方图片加载库,是鉴别不了的,比如使用Glide加载assets中图片:

val url = "file:///android_asset/booster_demo_1.png" Glide.with(context).load(url).into(holder.image)

在构建过程中进行无用assets资源优化,需要考虑两点

1.Hook点 即在哪个Task之后或者之前进行优化

2.inputFiles(dex、assets) 来源

无用assets资源优化,肯定在apk生成之前进行,Hook点就选择在packageDebug/packageRelease task之前

variant.packageAndroidTask.doFirst{
...
//unusedAssetsResources优化
variant.removeUnusedAssetsResources(it.logger,results) variant.generateReport(results) }

使用TaskTreePlugin插件查看packageDebug / packageRelease的task tree,cmdz终端执行如下命令:

gradlew :app:packageDebug :app:taskTree --task-depth   > log-debug.txt

可以看到packageDebug/packageRelease tasktree如下图:

打印mergedAssetsTask和dex相关task的outputFiles,如下图:

如果之前成功地打过包,查看这个两个task的outputFiles下的文件如下:

现在无用assets资源优化的inputFiles dex和assets都找到了。

无用assets资源优化实现

 

步骤如下:

1.找出assets资源

2.反汇编dex找出usedAssetsResources

3根据配置解析出无用assets白名单

4.根据前三步,得到unusedAssetsResources

5.删除unusedAssetsResources文件

详见:doRemoveUnusedAssetsResources方法

验证:分别在App module assets放入显示如下图片资源:

集成无用assets资源优化功能,打release包,插件输出报告如下:

查看release.apk包中assets文件如下:

运行app,可以成功加载显示assets图片资源。

本篇文章比较简短,只讨论了无用assets资源优化,大佬们也许觉得写得有些啰嗦,估计一句也可以表述清楚,但我这里重在表述实现的思路过程。没有经过大量测试,仅供参考学习,共同成长。

源码传送门:BoosterStudy

参考资料:

官方公众号-Apk 分析减包利器

如果您对博主的更新内容持续感兴趣,请关注公众号!

滴滴Booster移动APP质量优化框架 学习之旅 三的更多相关文章

  1. 滴滴Booster移动APP质量优化框架 学习之旅 二

    推荐阅读: 滴滴Booster移动App质量优化框架-学习之旅 一 Android 模块Api化演练 不一样视角的Glide剖析(一) 续写滴滴Booster移动APP质量优化框架学习之旅,上篇文章分 ...

  2. 滴滴Booster移动APP质量优化框架 学习之旅

    推荐阅读: 滴滴Booster移动App质量优化框架-学习之旅 一 Android 模块Api化演练 不一样视角的Glide剖析(一) 一.Booster简介 Booster是滴滴最近开源一个的移动应 ...

  3. 滴滴 App 的质量优化框架 Booster,开源了!

    一. 序 当 App 达到一定体量的时候,肯定是要考虑质量优化.有些小问题,看似只有 0.01% 触发率,但是如果发生在 DAU 过千万的产品中,就很严重了. 滴滴这个独角兽的 DAU 早已过千万,自 ...

  4. Omi框架学习之旅 - 之开篇扯蛋

    说实话, 我也不知道Omi是干啥的, 只因此框架是alloyTeam出的, dntzhang写的, 也有其他腾讯大神参与了, 还有一些其他贡献者, 以上我也不太清楚, 当我胡说八嘎. 因其写法有人说好 ...

  5. Hadoop学习之旅三:MapReduce

    MapReduce编程模型 在Google的一篇重要的论文MapReduce: Simplified Data Processing on Large Clusters中提到,Google公司有大量的 ...

  6. .net转php laraval框架学习系列(三)项目实战---Route&Controllers

    本章来学习laravel的路由 一个简单的路由列子 Route::get('/', function() { return 'Hello World'; }); 路由的写法和Node的风格很相似.上面 ...

  7. Go 框架学习之旅 ① 深入解析 net/http 启动服务的层级逻辑

    Web Server. net/http 标准库怎么学. 库函数. 结构定义. 结构函数. 思维导图解析HTTP服务端. 层级逻辑. 创建框架的Server结构. OSI参考模型. TCP/IP五层模 ...

  8. Omi框架学习之旅 - Hello World 及原理说明

    学什么东西都从hello world开始, 我也不知道为啥. 恩,先上demo代码, 然后提出问题, 之后解答问题, 最后源码说明. hello world - demo: class Hello e ...

  9. struts2框架学习之第三天

    day03 上传下载 1        上传下载组件介绍 l  jspSmartUpload(model1的年代): l  apache-commons-fileupload,Struts2默认上传组 ...

随机推荐

  1. 九度OJ 1148:Financial Management(财务管理) (平均数)

    与1141题相同. 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:843 解决:502 题目描述: Larry graduated this year and finally has a ...

  2. mysql系列之7.mysql读写分离

    准备 下载如下linux安装包 jdk-6u31-linux-x64-rpm.bin amoeba-mysql-binary-2.2.0.tar.gz # crontab -e  //同步时间 */ ...

  3. 我的Java开发学习之旅------>使用循环递归算法把数组里数据数组合全部列出

    面试题如下:把一个数组里的数组合全部列出,比如1和2列出来为1,2,12,21. (面试题出自<Java程序员面试宝典>) 代码如下: import java.util.Arrays; i ...

  4. 我的Android进阶之旅------>Android图片处理(Matrix,ColorMatrix)

    本文转载于:http://www.cnblogs.com/leon19870907/articles/1978065.html 在编程中有时候需要对图片做特殊的处理,比如将图片做出黑白的,或者老照片的 ...

  5. java多线程系列笔记 目录

    基础篇 Java多线程系列 基础篇01 线程的状态 Java多线程系列 基础篇02 线程的创建和运行 Java多线程系列 基础篇03 线程的优先级和守护线程 Java多线程系列 基础篇04 线程中断 ...

  6. i=i+2 与i+=2

    i=i+2 比 i+=2多了一次对变量 i 的运算.后者效率高

  7. iOS SDK:iOS调试技巧

    感谢原创 在程序中,无论是你想弄清楚为什么数组中有3个对象而不是5个,或者为什么一个新的玩家开始之后,游戏在倒退——调试在这些处理过程中是比较重要的一部分.通过本文的学习,我们将知道在程序中,可以使用 ...

  8. 吴恩达机器学习笔记(八) —— 降维与主成分分析法(PCA)

    主要内容: 一.降维与PCA 二.PCA算法过程 三.PCA之恢复 四.如何选取维数K 五.PCA的作用与适用场合 一.降维与PCA 1.所谓降维,就是将数据由原来的n个特征(feature)缩减为k ...

  9. POJ2104 K-th Number —— 区间第k小 整体二分

    题目链接:https://vjudge.net/problem/POJ-2104 K-th Number Time Limit: 20000MS   Memory Limit: 65536K Tota ...

  10. 如何在Mac的Finder中显示/usr、/tmp、/var等隐藏目录

    原文链接: http://blog.csdn.net/yhawaii/article/details/7435918 Finder中默认是不显示/usr./tmp./var等隐藏目录的,通过在终端中输 ...