一、Booster概览
Booster https://github.com/didi/booster主要由 Transformer 和 Task 组成,Transformer 主要用于对字节码进行扫描或修改(取决于 Transformer 的功能),Task 主要用于构建过程中的资源处理,为了满足特异的优化需求,Booster 提供了 Transformer SPI and VariantProcessor SPI 允许开发者进行定制,以下是 Booster 的整体框架:

二、Booster功能
Performance detection | 性能检测
使用 Booster 可以发现潜在的性能问题,例如,在应用中调用可能阻塞 UI 线程或者主线程的 API,如:I/O API 等。详情请参见: booster-transform-lint。

Performance optimization | 性能优化
对于开发者来说,线程管理一直是个头疼的问题,特别是第三方 SDK 中的线程,过多的线程可能会导致内存不足,然而幸运的是,这些问题都能通过 Booster 来解决。

System bugs fix | 系统问题修复
例如全局性地修复 Android API 25 版本中 Toast 导致的崩溃。详情请参见:booster-transform-toast、booster-transform-shared-preferences.

Package size reduction | 应用瘦身
Such as image resources compression, r inline, etc.
如:资源压缩及冗余资源删除、资源索引内联。

2.1 booster-transform-shared-preferences SharedPreferences 优化
shared-preferences的commit的操作(有返回值),有可能阻塞ui线程。Booster对没有用到返回值的commit操作放到异步线程中,对应Transformer实现如下:

@AutoService(ClassTransformer::class)
class SharedPreferencesEditorTransformer : ClassTransformer {private lateinit var logger: PrintWriteroverride fun onPreTransform(context: TransformContext) {this.logger = context.reportsDir.file(Build.ARTIFACT).file(context.name).file("report.txt").touch().printWriter()}override fun onPostTransform(context: TransformContext) {this.logger.close()}override fun transform(context: TransformContext, klass: ClassNode): ClassNode {if (klass.name == SHADOW_EDITOR) {return klass}klass.methods.forEach { method ->method.instructions?.iterator()?.asIterable()?.filterIsInstance(MethodInsnNode::class.java)?.filter {it.opcode == Opcodes.INVOKEINTERFACE && it.owner == SHARED_PREFERENCES_EDITOR}?.forEach { invoke ->when ("${invoke.name}${invoke.desc}") {"commit()Z" -> if (Opcodes.POP == invoke.next?.opcode) {// if the return value of commit() does not used// use asynchronous commit() insteadinvoke.optimize(klass, method)method.instructions.remove(invoke.next)}"apply()V" -> invoke.optimize(klass, method)}}}return klass}private fun MethodInsnNode.optimize(klass: ClassNode, method: MethodNode) {logger.println(" * ${this.owner}.${this.name}${this.desc} => $SHADOW_EDITOR.apply(L$SHARED_PREFERENCES_EDITOR;)V: ${klass.name}.${method.name}${method.desc}")this.itf = falsethis.owner = SHADOW_EDITORthis.name = "apply"this.opcode = Opcodes.INVOKESTATICthis.desc = "(L$SHARED_PREFERENCES_EDITOR;)V"}}private const val SHARED_PREFERENCES_EDITOR = "android/content/SharedPreferences\$Editor"private const val SHADOW_EDITOR = "com/didiglobal/booster/instrument/ShadowEditor"
public class ShadowEditor {public static void apply(final SharedPreferences.Editor editor) {if (Looper.myLooper() == Looper.getMainLooper()) {AsyncTask.SERIAL_EXECUTOR.execute(new Runnable() {@Overridepublic void run() {editor.commit();}});} else {editor.commit();}}}

2.2 booster-task-list-permission
本模块用于显示本工程依赖的 AAR 中使用的 Android 权限列表。

三、Booster自定义Transformer

3.1 transformer-with-asm
https://github.com/boostersamples/transformer-with-asm

@AutoService(ClassTransformer::class)
class SampleAsmTransformer : ClassTransformer {override fun transform(context: TransformContext, klass: ClassNode) = klass.also {println("Transforming ${klass.className}: ")klass.fields.ifNotEmpty {println(klass.fields.joinToString("\n") {"  - " + it.name + ": " + it.desc})}klass.methods.ifNotEmpty {println(klass.methods.joinToString("\n") {"  - " + it.name + it.desc})}}}

3.2 transformer-with-javassist
https://github.com/boostersamples/transformer-with-javassist

@AutoService(ClassTransformer::class)
class SampleJavassistTransformer : ClassTransformer {override fun transform(context: TransformContext, klass: CtClass) = klass.also {println("Javassist Transforming ${klass.name}: ")klass.fields.asList().ifNotEmpty {println(klass.fields.joinToString("\n") {"  - $it"})}klass.methods.asList().ifNotEmpty {println(klass.methods.joinToString("\n") {"  - ${it.name}${Descriptor.toString(it.signature)}"})}}}

Android 质量优化工具 Booster实践相关推荐

  1. Android 性能优化工具

    Android 性能优化工具 这段时间总结了一些常用的性能优化工具,当然这些并没有包含全部的工具,下面稍微对这些工具做个简单的总结: 1.应用codeReview工具 StrictMode 检测应用主 ...

  2. Android 性能优化工具 TraceView 简单使用

    背景 最近产品以及测试大佬反应快搜桌面进入搜索页面跳转较为缓慢,影响体验,为了优化这个问题,特地学习Android 性能优化工具 TraceView的 简单使用,这才有了本文. 正文 如下图打开and ...

  3. Android反编译工具与实践

    版权声明 本文原创作者:谷哥的小弟 作者博客地址:http://blog.csdn.net/lfdfhl What is Android Android is a mobile operating s ...

  4. android -------- Lint优化工具

    2019独角兽企业重金招聘Python工程师标准>>> 什么是 Lint Lint 是Android Studio 提供的 代码扫描分析工具,它可以帮助我们发现代码结构/质量问题,同 ...

  5. android布局优化 工具,详解Android布局优化

    怎样才能写出优秀的Android App,是每一个程序员追求的目标.那么怎么才能写出一个优秀的App呢?相信很多初学者也会有这种迷茫.一句话来回答这个问题:细节很重要.今天我们就从最基础的XML布局来 ...

  6. Android 系统性能优化(28)---Android 性能优化工具集合

    磁盘 文件读写:每次打开.关闭或者读写文件,操作系统都需要经过从用户态转换为内核态的切换,这种状态的切换本身是很消耗性能的,所以为了提高文件的读写效率,就需要尽量减少用户态和内核态的切换.使用缓存可以 ...

  7. Android性能优化工具

    Systrace是Android4.1中新增的性能数据采样和分析工具.它可帮助开发者收集Android关键子系统(如surfaceflinger.WindowManagerService等Framew ...

  8. android自动化优化工具,Auto Optimizer手机性能自动优化App

    Auto Optimizer是安卓手机上的一款全自动型性能优化软件,用户只需要设定好相关参数,app就会在合适的时机去对手机进行清理优化,让手机时刻保持最优性能状态.欢迎感兴趣的朋友前来西西下载体验! ...

  9. android自动化优化工具,一键自动优化系统大师下载

    [软件简介] 1.一键系统自动优化大师是一款功能强大的手机系统优化软件: 2.一键,只需一键,你的系统就可以得到优化,并且还会帮你自动优化哦,一键就OK,超级简单好用: 3.同时还提供了对系统进行系统 ...

  10. 滴滴 App 质量优化黑科技,都做了什么

    点击上方"开发者技术前线",选择"星标" 每天 14.00 在看 | 真爱 作者: 承香墨影 | 来源:公众号 承香墨影 一. 序 当 App 达到一定体量的时 ...

最新文章

  1. 安装 Fedora 22 后要做的事情
  2. 有关C语言指针学习思想的随笔常用形式的总结(原创)
  3. python编程语法-Python基础及语法(十三)
  4. 虚拟机中安装MAC OS X教程(适用所有电脑方法,特别是cpu不支持硬件虚拟化的电脑)...
  5. 库函数设计:关于文件类打开操作函数不自动创建不存在的父目录问题
  6. 初建FreeMarker工程
  7. 在Spring Boot测试中使用Testcontainer进行数据库集成测试
  8. Java重载遇到泛型
  9. FTServer 0.9 发布,全文搜索服务器
  10. 使用iframe实现在pc端预览移动端页面的效果
  11. hello linux
  12. 安卓实现百度地图定位
  13. 路由器:斐讯K3C刷官改,固件版本是32.1.46.268
  14. 新华字典电子版_《新华字典》不收[王莹]字考证
  15. python linux 上 RS485通信 Modbus协议
  16. 安卓手机投屏软件_手机投屏软件哪个好?推荐这五款投屏神器
  17. 计算机用老毛桃u盘备份系统,老毛桃一键还原,教您电脑如何使用老毛桃一键还原...
  18. 连接请求被计算机拒绝访问,Windows 10共享打印机解决方案被拒绝访问
  19. mysql sql语句中变量_mysql-sql语句中变量的使用
  20. 论文笔记《Influence Maximization in Near-Linear Time: A Martingale Approach》

热门文章

  1. 证书服务器,及申请证书。
  2. 维基百科六度分隔理论
  3. EfficientFormer | 苹果手机实时推理的Transformer模型,登顶轻量化Backbone之巅
  4. u盘服务器安装win7系统安装教程,最简单的u盘装win7系统详细教程及步骤
  5. excel自动求和_excel工作表的行或列怎么自动求和
  6. iOS中相对1970的时间转换为现在时间
  7. [欧范 必备]帅气 中性 军色 工装 铜扣勋章 休闲衬衣 男女通款
  8. iGrimaceV8 V8在线威锋源apt.so/tuzhurenv8手机直接下载安装教程图:
  9. 【数据结构与算法】试卷 1(含答案)
  10. 【自我介绍】小白程序员的成神之路