booster二模块业务分析

330 阅读6分钟
---基础兼容---
booster.gradle
kotlin-stdlib
kotlin-reflect
apply plugin: 'kotlin'
apply plugin: 'kotlin-kapt'
apply plugin: 'io.johnsonlee.buildprops'
booster-annotations 提供了 *Booster* 插件开发相关的注解
	官方架构文档中说的Command SPI,ServiceLoader方式服务,提供gradle task(详见DefaultTask)扩展基础.具体应用见booster-task-compression-cwebp。
booster-kotlinx 提供了一系列工具类以及针对 *JDK* 的扩展属性和方法
	kotlin实现的一些基础工具类
booster-build 提供了操作工程及构建环境相关的实用工具类
	androidsdk目录下android.jar位置,支持mac,Linux,
booster-android-gradle-compat 对 *Android Gradle Plugin API* 的抽象,用于消除 *Android Gradle Plugin* 版本间的差异
	AGP抽象屏蔽不同版本AGP差异,兼容不同版本的AGP。 ServiceLoader.load加载不同版本AGP兼容版本实现,工厂模式匹配对应的AGP兼容版本,提供AGP兼容对象实例。
booster-android-gradle-vX_X 兼容
	spi方式AGP对应版本兼容适配实现
booster-android-gradle-api 对 Android gradle API 的抽象,用于屏蔽不同的 Android gradle plugin 版本之间的差异,解决其兼容问题。
	引用AGP兼容对象实例,对外暴露工程构建配置参数。
booster-task-spi 提供了 *Booster* 插件开发相关的 SPI
	spi接口定义VariantProcessor,通过booster-gradle-plugin插件在应用工程中插入业务代码模块依赖,这些业务模块的代码可以被asm插件插入或替换到到app的所有特定时序位置。
booster-transform-spi 提供了通用的字节码操作相关的 SPI
	spi接口定义ClassTransformer,Transformer。提供通用字节码操作上下文。
booster-transform-util 提供了通用的字节码操作相关的实用类和扩展属性及方法
	主要提供字节码转化工具:扩展URLClassLoader类加载,在类加载查询时,对特定类资源提供字节码转换
booster-gradle-plugin 提供了 Booter Gradle 插件
	gradle插件,VariantProcessor服务检索调用(一般是加入注入代码模块依赖),Transformer字节码修改服务扩展检索调用
booster-api 提供了与字节码操作相关的高层次 API
	增强TransformHelper,可以拿到各类资源列表
booster-aapt2 提供了一系列工具类和扩展方法用于解析 *AAPT2* 编译的资源
	protobuf生成个资源配置类可能源自安卓sdk源码,解析资源
booster-command 提供了用于发现和调用外部命令的 SPI,允许开发者来实现自定义的外部命令提供者。
	Command SPI,ServiceLoader方式服务,提供gradle task(详见DefaultTask)扩展基础,命令调用去协议问题.具体应用见booster-task-compression-cwebp。
booster-graph 提供了用于在类继承分析过程中构建调用图的相关的 API
	数据结构及渲染接口
booster-graph-dot 提供了 `dot` 格式的 Graph 渲染 
	dot方式渲染实例
booster-graph-json 提供了 `json` 格式的 Graph 渲染
	json方式渲染实例
booster-cha 提供了类继承分析相关的 API
booster-cha-asm 提供了基于 ASM 的类继承分析
	asm的使用,扩展预留 


---instrument---
booster-android-api 仅用于编译期 Android API 的插桩
booster-android-instrument 提供用于字节码注入相关的工具类
	异常捕获(消息回调处理异常,线程执行异常),异常方法栈处理,反射工具
以下9个模块为实例
booster-android-instrument-activity-thread
	反射方式拿到当前ActivityThread并反射方式替换消息处理回调函数,对消息处理异常进行过滤,关闭异常处理
booster-android-instrument-finalizer-watchdog-daemon
	看门狗,循环检查导致异常的这个线程,反射杀掉这个线程,进而保证应用不奔溃。
booster-android-instrument-logcat
	日志异常打印屏蔽替换类
booster-android-instrument-media-player
	反射方式修改替换MediaPlayer中消息处理回调,屏蔽异常。
booster-android-instrument-res-check
	Assets和Resources的检查
booster-android-instrument-thread
	线程相关的类hook替换类,线程名称前缀,优化allowCoreThreadTimeOut,线程数量
booster-android-instrument-shared-preferences
	将apply改成cimmit并且放到用到ShowThread中处理,避免主线程阻塞。
booster-android-instrument-toast
	通过反射修改回调处理或线程屏蔽掉异常
booster-android-instrument-webview
	提前预加载浏览器,通过反射调用WebViewFactory.startYourEngines。

---transform---
booster-transform-asm 提供了基于 *ASM* 的字节码操作相关的实用类和扩展属性及方法
	asm的使用,扩展预留,autoservice
booster-transform-javassist 提供了基于 *Javassist* 的字节码操作相关的实用类和扩展属性及方法
	javassist的使用,扩展预留,autoservice
以下16个模块为asm字节码用例、
booster-transform-activity-thread
	为系统bug兜底,工程中加入booster-android-instrument-activity-thread依赖,进行hook
booster-transform-br-inline This module is used for BR index inline if databinding is enabled.
	资源内联,
booster-transform-finalizer-watchdog-daemon
	在应用工程中加入booster-android-instrument-finalizer-watchdog-daemon模块依赖,通过字节码找到APP的onCreate方法并添加看门狗检查杀线程的调用
booster-transform-logcat
	在应用工程中加入booster-android-instrument-logcat模块依赖,通过asm字节码找到Log,System,Throwable等对象的打印方法,替换成Shadow类方法进行屏蔽,当然除了屏蔽也可以定制。
booster-transform-media-player
	在应用工程中加入booster-android-instrument-media-player模块依赖,通过asm字节码找到MediaPlayer静态方法和创建方法,替换成ShadowMediaPlayer的相应方法
booster-transform-res-check
	在应用工程加booster-android-instrument-res-check模块依赖,asm字节码方式找到Application的attachBaseContext和onCreate方法并加入资源检查的调用字节码。
booster-transform-service-loader used for `ServiceLoader` optimization on Android, as we known, JDK provided `ServiceLoader` since Java 1.5, due the different implementation, using `ServiceLoader` on Android platform will cause performance issue, booster trying to fix this problem by manipulate the bytecode.
	实现文件目录jar包含的service扫描,通过asm替换过滤服务加载方法(ServiceLoader.load(Service.class).iterator()为Arrays.asList(new Service[] { new A(), new B() }).iterator(),避免性能问题
booster-transform-thread used for multi-threading optimization.
	在应用工程中加booster-android-instrument-thread模块依赖,asm字节码方式找到线程相关的类方法,进行替换或者插入,优化方法插入
booster-transform-shared-preferences
	在应用工程中加booster-android-instrument-thread模块依赖,asm字节码方式找到线程相关的类方法,进行替换或者插入,优化方法插入
booster-transform-toast provides a transformer that used to fix system bug caused by `Toast` on Android 7.1.1
	在应用工程中加booster-android-instrument-toast模块依赖,asm字节码方式找到Toast.show方法替换成ShadowToast.show
booster-transform-webview
	在应用工程中加booster-android-instrument-webview模块依赖,asm字节码方式找到Application.oncreate函数插入ShadowWebView.preloadWebView调用
booster-transform-r-inline  used for resource index inline, such as fields in `R$id`, `R$layout`, `R$string`, etc.
booster-transform-usage used to find the usage of specific API.

---task---
booster-task-check-snapshot 插件实例,checkSnapshot用于检查依赖中是否包含有 snapshot 的依赖项
booster-task-list-artifact 插件实例,用于显示 Android 工程的 artifacts
	VariantProcessor实现,显示工程中的artifacts名称
booster-task-list-permission 插件实例,显示本工程依赖的 AAR 中使用的 Android 权限列表。
	VariantProcessor实现,解析每个aar压缩包中的清单文件,打印包含的权限。
booster-task-list-shared-library 插件实例,显示每个依赖项中包含的动态库
	VariantProcessor实现,显示每个包含的.so文件
booster-task-analyser 插件实列,analyseReferenceXXX
	VariantProcessor实现,提供ReferenceAnalyser以及PerformanceAnalyser,借助booster(command,graph,cha)能生成图。
booster-task-graph 插件用例,assembleDebug.dot.png
	VariantProcessor实现,借助booster(command,graph,cha)能生成dependencies.png。
booster-task-compression 提供了图像资源压缩任务基类,允许开发者对其进行扩展
	提供压缩任务api(命令封装,创建任务工厂,图像资源压缩任务基类),提供基础压缩工具集成压缩时序流程,允许开发者对其进行扩展。
booster-task-compression-cwebp 插件实例,assembleDebug -Pbooster.task.compression.cwebp.quality=75
	CommandProvider实现commandSpi扩展提供cwebp工具(多平台),
booster-pngquant-provider
	提供pngguant命令工具位置信息,可以被booster-command加载。
booster-task-compression-pngquant 插件实例,pngquant
	VariantProcessor实现,处理变体时根据是否appt2创建不同类型的压缩处理任务,创建压缩任务时会安装已检索的pngguant(compression->command spi->pngquant-provider提供),压缩处理任务会获取工程配置的压缩参数以及具体压缩任务类型拼接压缩命令,执行pngguant命令。
booster-task-compression-processed-res 插件实例,*resources-${variant}.ap_* file compression
	VariantProcessor实现,对AP_资源进行压缩
booster-task-resource-deredundancy
	VariantProcessor实现,解析manifest布局方向,根据情况移除不必要的工程资源。