编译时字节码修改
android app的构建是使用gradle 工具,它提供给了开发者自定义编译期行为的能力。一般情况下,我们在transform阶段进行字节码的修改,插入,删除等操作。通过字节码处理,我们可以完成很多cool的事情,比如根据编译时注解,完成一些特定的操作等。
实现修改字节码的工具有:
javassist (如库 ‘org.javassist:javassist:3.27.0-GA’)
ASM ( 如库’com.android.tools.build:gradle:3.6.4’)
插件开发的一般步骤
- 继承Plugin
class TestPlugin implements Plugin<Project> {
@Override
void apply(Project project) {
System.out.println("========================");
System.out.println("hello TestPlugin")
System.out.println("========================")
project.extensions.findByType(AppExtension.class).registerTransform(new MyTransform(project));
- 自定义Transfrom
class MyTransform extends Transform {
private Project project
MyTransform(Project project) {
this.project = project
}
@Override
String getName() {
return "MyTransform"
}
@Override
Set<QualifiedContent.ContentType> getInputTypes() {
return TransformManager.CONTENT_CLASS
}
@Override
Set<? super QualifiedContent.Scope> getScopes() {
return TransformManager.SCOPE_FULL_PROJECT
}
@Override
boolean isIncremental() {
return false