2015-04-13 20 views
7

Trong ứng dụng Android của tôi, tôi cần tạo mã nguồn và sử dụng nó trong ứng dụng.
Đối với điều đó tôi đã tạo công việc genSources (sử dụng hướng dẫn) để tạo nguồn. Nó hoạt động chính xác nếu chạy nó một cách riêng biệt.Gradle. Làm thế nào để tạo mã nguồn trước khi biên dịch trong ứng dụng android

Trong trường hợp của tôi, tôi cần chạy tự động tạo mã nguồn.

Từ hướng dẫn tôi phát hiện ra lệnh sau:

compileJava.dependsOn (genSources)

nhưng đó là unknow command cho plugin
áp dụng: 'com.android.library'
ném gradle theo ngoại lệ:
Error:(35, 0) Could not find property 'compileJava' on project ':data'.

Dường như nó có thể là u sed với áp dụng plugin: 'Java'
nhưng tôi không thể sử dụng các plugin 2 cùng

Làm thế nào tôi có thể giải quyết vấn đề này và tạo ra mã nguồn cần thiết trước khi biên dịch?

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 { 
    ... 
} 

CẬP NHẬT

Tôi đã tìm thấy một số giải pháp mà ít nhất là không ném ngoại lệ

gradle.projectsEvaluated { 
    compileJava.dependsOn(genSources) 
} 

Sau đó, tôi thực hiện gradle build nhưng không có gì xảy

Trả lời

8

Với gradle 2.2 + này nên làm việc:

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

Nếu bạn cũng muốn nó xảy ra khi bạn đánh giá (ví dụ khi đồng bộ hóa dự án của bạn với gradle trong android studio), bạn có thể làm như sau:

gradle.projectsEvaluated { 
    preBuild.dependsOn genSources 
} 
Các vấn đề liên quan