摇篮。如何在Android应用程序中编译之前生成源代码

时间:2015-04-13 09:34:04

标签: android gradle

在我的Android应用程序中,我需要生成源代码并在应用程序中使用它 为此我创建了任务 genSources (使用教程)来生成源代码。如果单独运行,它可以正常工作。

在我的情况下,我需要自动运行源代码生成。

从教程中我发现了以下命令:

compileJava.dependsOn(genSources)

但这是 apply plugin的未知命令:' com.android.library'
gradle抛出异常:
Error:(35, 0) Could not find property 'compileJava' on project ':data'.

看起来它可以与应用插件一起使用:' Java'
但我不能一起使用这两个插件

如何在编译之前解决此问题并生成所需的源代码?

的build.gradle

apply plugin: 'com.android.library'

configurations {pmd}

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2"
    defaultConfig {
        minSdkVersion 19
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

buildscript {
    repositories {
        maven {
            url "http://repo1.maven.org/maven2/"
        }
    }

    dependencies {
        classpath group: 'net.sourceforge.fmpp', name: 'fmpp', version: '0.9.14'
    }

    ant.taskdef(name: 'fmpp', classname:'fmpp.tools.AntTask', classpath: buildscript.configurations.classpath.asPath)
}

task genSources << {
    println "Generating sources...."
    ant.fmpp configuration:"src/main/resources/codegen/config.fmpp",
            sourceRoot:"src/main/resources/codegen/templates",
            outputRoot:"target/generated-sources/main/java";
}
compileJava.dependsOn(genSources)
sourceSets {
    main {
        java {
            srcDir 'target/generated-sources/main/java'
        }
    }
}

dependencies {
    ...
}

已更新

我找到了一些解决方案,至少不会抛出异常

gradle.projectsEvaluated {
    compileJava.dependsOn(genSources)
}

然后我执行gradle build但没有任何反应

1 个答案:

答案 0 :(得分:11)

使用gradle 2.2+,这应该有效:

tasks.withType(JavaCompile) {
    compileTask -> compileTask.dependsOn genSources
}

如果您在评估时也希望它发生(例如,当您在android studio中使用gradle同步项目时),您可以这样做:

gradle.projectsEvaluated {
    preBuild.dependsOn genSources
}