2015-04-13 4 views
7

generieren In meiner Android-Anwendung muss ich Quellcode generieren und in der App verwenden.
Dafür erstellte ich Aufgabe genSources (mit Tutorials) für die Generierung der Quelle. Es funktioniert korrekt, wenn es separat ausgeführt wird.Gradel. Wie man Quellcode vor dem Kompilieren in Android-App

In meinem Fall muss ich die Quellcode-Generierung automatisch ausführen.

Von Tutorial ich den folgenden Befehl herausgefunden:

compileJava.dependsOn (genSources)

aber das ist unbekannt Befehl für die
anwenden Plugin: 'com.android.library'
gradle wirft folgende Ausnahme:
Error:(35, 0) Could not find property 'compileJava' on project ':data'.

Sieht aus wie es u sein kann sed mit anwenden Plugin: ‚Java‘
aber ich kann nicht diese 2 Plugins zusammen

Wie kann ich dieses Problem lösen und erzeugen benötigte Quellcode vor dem Kompilieren?

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

AKTUALISIERT

ich eine Lösung gefunden wurde, die zumindest nicht

gradle.projectsEvaluated { 
    compileJava.dependsOn(genSources) 
} 

Dann habe ich gradle build ausführen Ausnahme auslösen, aber es passiert nichts

Antwort

8

Mit gradle 2.2+ dies sollte funktionieren:

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

Wenn Sie es auch, wenn Sie passieren zu bewerten (z Wenn Sie Ihr Projekt mit Gradle in android Studio synchronisieren) können Sie es so machen:

gradle.projectsEvaluated { 
    preBuild.dependsOn genSources 
} 
Verwandte Themen