gradle自动生成java类

1.引入avapoet用来生成java类

implementation 'com.squareup:javapoet:1.9.0'

2.注册插件

class CreateJavaPlugin implements Plugin<Project> {

    @Override
    void apply(Project project) {
        project.afterEvaluate {
            DefaultDomainObjectCollection<BaseVariant> 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}"
    }

}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。