Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
格拉德尔。如何在android应用程序中编译前生成源代码_Android_Gradle - Fatal编程技术网

格拉德尔。如何在android应用程序中编译前生成源代码

格拉德尔。如何在android应用程序中编译前生成源代码,android,gradle,Android,Gradle,在我的android应用程序中,我需要生成源代码并在应用程序中使用它。 为此,我创建了用于源代码生成的任务genSources(使用教程)。如果单独运行,则其工作正常 在我的例子中,我需要自动运行源代码生成 从教程中,我发现了以下命令: 编译ejava.dependsOn(genSources) 但这是应用插件的未知命令:“com.android.library” gradle引发以下异常: 错误:(35,0)在项目上找不到属性“compileJava”:数据。 看起来它可以与应用插件一起使用:

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

在我的例子中,我需要自动运行源代码生成

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

编译ejava.dependsOn(genSources)

但这是应用插件的未知命令:“com.android.library”
gradle引发以下异常:
错误:(35,0)在项目上找不到属性“compileJava”:数据。

看起来它可以与应用插件一起使用:“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 build,但gradle 2.2+不会发生任何事情,这应该可以:

tasks.withType(JavaCompile) {
    compileTask -> compileTask.dependsOn genSources
}
如果您还希望在评估时发生(例如,在android studio中将项目与gradle同步时),您可以这样做:

gradle.projectsEvaluated {
    preBuild.dependsOn genSources
}
gradle.projectsEvaluated {
    preBuild.dependsOn genSources
}