> 滴滴开源框架
1. 质量优化框架Booster- https://github.com/didi/booster
滴滴在 Github 上开源了一个 Android App 的质量优化工具 Booster,通过动态发现和加载机制,提供了可扩展的能力。等于是一款移动应用的质量优化框架。
从特性上笼统来说,Booster 可以做到性能检测和优化、包体积瘦身、代码注入等。。
Booster 主要由 Transformer 和 Task 组成。
Transformer 用于对字节码进行扫描或修改(取决于 Transformer 的功能),而 Task 则用于处理构建中的资源。
为了满足不同业务场景下的优化需求,Booster 提供了 Transformer SPI 和 VariantProcessor SPI 接口,来允许开发者进行定制。
内置 Transformers
booster-transform-bugfix-toast:修复 7.0 中 Toast 导致的系统错误。
booster-transform-lint:检查潜在的性能问题。
booster-transform-shrink:用于清除 class 文件中的常量。
booster-transform-usage:用于扫描特定 API 的使用情况。
内置 Tasks
Booster-task-artifact:提供显示 artifact 的 Task。
Booster-task-dependency:提供显示所有依赖项的标识符以及文件路径的 Task。
Booster-task-permission:提供显示所有依赖项使用的 Android 权限。
2. 一款功能齐全的客户端( iOS 、Android )研发助手DoraemonKit- https://github.com/didi/DoraemonKit
3. DroidAssist 是一个轻量级的 Android 字节码编辑插件,基于 Javassist 对字节码操作,根据 xml 配置处理 class 文件,以达到对 class 文件进行动态修改的效果- https://github.com/didi/DroidAssist
> Transform API
ASM 与 Transform。
一个简单易懂的transformDemo, 包括了如何支持增量更新, 如何使用ASM Core和ASM Tree Api, 具一定的封装性- https://github.com/YuTianTina/TransformDemo
AppPlugin源码解析- https://yutiantina.github.io/2018/07/06/AppPlugin%E6%BA%90%E7%A0%81%E8%A7%A3%E6%9E%90/
深入理解Transform- https://juejin.im/post/5cbffc7af265da03a97aed41
其实Transform API在一个android工程的打包流程中作用非常大, 像是我们熟知的混淆处理, 类文件转dex文件的处理, 都是通过Transform API去完成的.
自从1.5.0-beta1版本开始, android gradle插件就包含了一个Transform API, 它允许第三方插件在编译后的类文件转换为dex文件之前做处理操作.
而使用Transform API, 我们完全可以不用去关注相关task的生成与执行流程, 它让我们可以只聚焦在如何对输入的类文件进行处理
自定义的Transform继承于com.android.build.api.transform.Transform
android.registerTransform(theTransform)或者android.registerTransform(theTransform, dependencies).就可以进行注册.
了解了android的com.android.application以及com.android.library两个插件都继承于BasePlugin。
application内的相关transform流程, 由于篇幅原因, 可以自行去看相关源码, 这里的transform task流程分别是从Desugar->MergeJavaRes->自定义的transform->MergeClasses->Shrinker(包括ResourcesShrinker和DexSplitter和Proguard)->MultiDex->BundleMultiDex->Dex->ResourcesShrinker->DexSplitter, 由此调用链, 我们也可以看出在处理类文件的时候, 是不需要去考虑混淆的处理的.
组件通信中的作用
Transform API在组件化工程中有很多应用方向, 目前我们项目中在自开发的路由框架中, 通过其去做了模块的自动化静态注册, 同时考虑到路由通过协议文档维护的不确定性(页面路由地址的维护不及时导致对应开发无法及时更新对应代码), 我们做了路由的常量管理, 首先通过扫描整个工程项目代码收集路由信息, 建立符合一定规则的路由原始基础信息文件, 通过variant#registerJavaGeneratingTask注册 通过对应原始信息文件生成对应常量Java文件下沉在基础通用组件中的task, 这样上层依赖于这个基础组件的项目都可以通过直接调用常量来使用路由.在各组件代码隔离的情况下, 可以通过由组件aar传递原始信息文件, 仍然走上面的步骤生成对应的常量表, 而存在的类重复的问题, 通过自定义Transform处理合并
业务监控中的作用
在应用工程中, 我们通常有关于网络监控,应用性能检测(包括页面加载时间, 甚至包括各个方法调用所耗时间, 可能存在超过阈值需要警告)的需求, 这些需求我们都不可能嵌入在业务代码中, 都是可以基于Transform API进行处理. 而针对于埋点, 我们也可以通过Transform实现自动化埋点的功能, 通过ASM Core和ASM Tree将尽可能多的字段信息形成记录传递, 这里有些我们项目中已经实现了, 有一些则是我们需要去优化或者去实现的.