Skip to content

Developer API

Quinn edited this page Jul 4, 2022 · 6 revisions

Writing....

Hunter is a framework to develop android gradle plugin based on ASM and Gradle Transform API. You can use Hunter to develop more plugin to monitor your app, enhance 3rd-dependency, enhance android framework.

Plugins based on Hunter support incremental and concurrent compile, so you don't need to afraid of extra build time.

If you want use Hunter to develop a new android gradle plugin, You can use HunterTransform and BaseWeaver,

HunterTransform: It's a incremental and concurrent tool to transport all classes and jars to BaseWeaver. It makes plugins more faster.

BaseWeaver: It's a tool to simplify useage of asm. you just need to tell BaseWeaver which class you want to handle, and provide a ClassWriter to weave the bytecode

final class OkHttpHunterTransform extends HunterTransform {

    private Project project;
    private OkHttpHunterExtension okHttpHunterExtension;

    public OkHttpHunterTransform(Project project) {
        super(project);
        this.project = project;
        project.getExtensions().create("okHttpHunterExt", OkHttpHunterExtension.class); //Custom Extension, Optional
        this.bytecodeWeaver = new OkHttpWeaver();  // Custom Weaver, Required!
    }

    @Override
    public void transform(Context context, Collection<TransformInput> inputs, Collection<TransformInput> referencedInputs, TransformOutputProvider outputProvider, boolean isIncremental) throws IOException, TransformException, InterruptedException {
        okHttpHunterExtension = (OkHttpHunterExtension) project.getExtensions().getByName("okHttpHunterExt");
        super.transform(context, inputs, referencedInputs, outputProvider, isIncremental);
    }

    @Override
    protected RunVariant getRunVariant() {
        return okHttpHunterExtension.runVariant; //RunVariant, default value is ALWAYS
    }

    @Override
    protected boolean inDuplcatedClassSafeMode() {
        return okHttpHunterExtension.duplcatedClassSafeMode;
    }
}
public final class OkHttpWeaver extends BaseWeaver {

    @Override
    protected ClassVisitor wrapClassWriter(ClassWriter classWriter) {
        return new OkHttpClassAdapter(classWriter);  //Custom ClassWriter
    }

}
    
buildscript {
    repositories {
        mavenCentral()
        google()
    }
    dependencies {
        classpath 'cn.quinn.hunter:hunter-transform:1.2.1'
    }
}
Clone this wiki locally