gradle自动生成java类

1.引入avapoet用来生成java类

implementation 'com.squareup:javapoet:1.9.0'

2.注册插件

class CreateJavaPlugin implements Plugin {

    @Override
    void apply(Project project) {
        project.afterEvaluate {
            DefaultDomainObjectCollection variants
            if (project.plugins.hasPlugin(AppPlugin.class)) {
                variants = project.android.applicationVariants
            } else if (project.plugins.hasPlugin(LibraryPlugin.class)) {
                variants = project.android.libraryVariants
            } else {
                return
            }
            variants.all { variant ->
                    def task = project.tasks.create("create${variant.name.capitalize()}JavaTask",
                            CreateJavaTask.class)
                    //注册生成java类的task,指定生成地址,需要和task中写入java的地址一致
//                    variant.registerJavaGeneratingTask(task,new File(project.buildDir, "generated/source/container"))
                    variant.registerJavaGeneratingTask(task, new File(project.projectDir, "src/main/java"))
            }

        }
    }

}

3.生成java的task

class CreateJavaTask extends DefaultTask {

    @TaskAction
    void doTask() {
        //生成java类
        TypeSpec.Builder builder = TypeSpec.classBuilder("TestJava")
                .addModifiers(Modifier.PUBLIC, Modifier.ABSTRACT)
        JavaFile javaFile = JavaFile.builder("com.test.sdk", builder.build()).build()
        //将java写入到文件夹下
//        File file = new File(project.buildDir, "generated/source/container")
        File file = new File(project.projectDir, "src/main/java")
        if (!file.exists()) {
            file.mkdirs()
        }
        javaFile.writeTo(file)
        println "[write to]: ${file.absolutePath}"
    }

}

你可能感兴趣的:(gradle自动生成java类)