首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >格拉德尔。在android应用程序编译前如何生成源代码

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

Stack Overflow用户
提问于 2015-04-13 09:34:04
回答 1查看 9.1K关注 0票数 12

在我的android应用程序中,我需要生成源代码并在应用程序中使用它。

为此,我创建了用于源生成的任务genSources (使用教程)。如果单独运行它,它将正确工作。

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

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

compileJava.dependsOn(genSources)

但这是未知的命令

应用插件:'com.android.library‘

gradle抛出以下异常:

Error:(35, 0) Could not find property 'compileJava' on project ':data'.

看起来它可以与apply插件一起使用:'Java‘

但是我不能把这两个插件放在一起

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

build.gradle

代码语言:javascript
复制
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 {
    ...
}

更新

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

代码语言:javascript
复制
gradle.projectsEvaluated {
    compileJava.dependsOn(genSources)
}

然后我执行gradle build,但是什么都没有发生

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-13 09:53:42

对于gradle 2.2+,这应该是可行的:

代码语言:javascript
复制
tasks.withType(JavaCompile) {
    compileTask -> compileTask.dependsOn genSources
}

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

代码语言:javascript
复制
gradle.projectsEvaluated {
    preBuild.dependsOn genSources
}
票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29602095

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档