2016-06-09 10 views
1

Ich versuche, den Speicherort der AndroidManifest.xml-Datei zu ändern, wenn Sie das experimentelle Gradle-Plugin Version 0.7.x verwenden. Der Grund dafür ist, dass ich die Datei erzeuge (da es im Experimental-Plugin keine manifeste Merger/Property-Ersetzung gibt), also möchte ich keine Ausgabedatei zusammen mit den Quellen.Wie kann ich die Datei AndroidManifest.xml mit dem experimentellen Gradle-Plugin 0.7.x verschieben?

Meine app build.gradle:

apply plugin: "com.android.model.application" 

def buildDir = project.buildDir 

model { 
    android { 
    compileSdkVersion 23 
    buildToolsVersion "23.0.1" 

    defaultConfig { 
     applicationId "com.myapp.android" 
     minSdkVersion.apiLevel 9 
     targetSdkVersion.apiLevel 23 
     versionCode 1 
     versionName "1.0" 
    } 
    sources { 
     main { 
     manifest { 
      source { 
      srcDirs = ["$buildDir"] 
      } 
     } 
     } 
    } 
    } 
} 

task createManifest { 
    doLast { 
    buildDir.mkdirs() 
    new FileOutputStream(new File(buildDir, "AndroidManifest.xml")) 
    } 
} 

tasks.all { task -> 
    if (task.name.startsWith('check') && task.name.endsWith('Manifest'))  { 
    task.dependsOn createManifest 
    } 
} 

Die oben konfiguriert in Ordnung, aber wenn ich versuche, ich zu bauen:

A problem was found with the configuration of task ':app:checkDebugManifest'. 
> File '/home/the_jk/source/test/app/src/main/AndroidManifest.xml' specified for property 'manifest' does not exist.` 

Ich kann nicht die Standard-Manifest „Eigentum“ scheinen überhaupt zu ändern Hatte jemand Glück?

Antwort

0

Versuchen

 manifest { source { srcDirs = $buildDir } } 

Dies scheint mit nur 1 manifest ok zu tun, aber die experimentelle Plugin barfs, wenn Sie es zwei Verzeichnisse, die Sie zusammenführen möchten.

(ich auch bin Erraten Sie eine andere Aufgabe haben, das Manifest in dem $ builddir zu erzeugen, da die durch saubere Aufgaben weggeblasen wird ....)

Update:

zweitrangig, die überprüfen [Deubg | Release] Manifest-Task möchte, dass die Datei existiert, wenn sie ausgeführt wird. Das oben genannte funktioniert für mich für eine statische Datei. Für etwas von einer Aufgabe im Build-Verzeichnis erzeugt ich eine Abhängigkeit hinzuzufügen hatte, die wie

task createManifest { 
     // code to create $buildDir if it did not exist 
     // code to generate AndrdroidManfest.xml in $buildDir 
} 

tasks.all { 
    task -> 
     if (task.name.startsWith('check') && task.name.endsWith('Manifest')) { 
      task.dependsOn createManifest 
     } 
} 

Die tasks.all Schleife nur noch hinzufügen lässt mich sieht es aus, wenn checkDebugManifest und/oder checkReleaseManifest Aufgaben geschehen werden (ich hatte Problem mit ./gradlew sauber nicht finden die checkDebugManifest Aufgabe ohne sie.)

+0

Ist für mich nicht (klagt noch über Test/app/src/main/AndroidManifest.xml nicht vorhanden) auch tho builddir ist etwas anderes. Gradle experimentelle Version 0.7.2 mit Gradle 2.10? –

+0

Mein Testfall befand sich mit dem Verzeichnis = außerhalb der Projektstruktur und existierte vor der Auswertung. (speziell "../../otherSource/src/main") Wenn ich es auf etwas wie "outputs/manifest" zeige und die Aufgabe so eingerichtet habe, dass es in diesem Verzeichnis zusammengebaut wird, schlägt es fehl. Ich habe versucht, meine Aufgabe zu machen, es früh in dem Prozess zu tun, aber es macht einen Strich durch die Rechnung. 'project.afterEvaluate { build.dependsOn mergeManifest }' Ich denke, die Datei muss sehr früh existieren, nicht sicher, wie es passieren soll. –

+0

Ah, vielen Dank für den sehr frühen Kommentar - jetzt habe ich es, machen AndroidDebug und AndroidRelease abhängig von createManifest schließlich die checkManifest Aufgabe auf die richtige Datei schauen –

0

Ich hatte ein ähnliches Problem mit com.android.tools.build:gradle-experimental:0.7.0-alpha4. So wie ich das lösen sie mit folgendem Code war:

sources { 
     main { 
      manifest { 
       source { 
        srcDirs = [ "$buildDir" ] 
       } 
      } 
     } 
    } 
+0

Und du hast keine app/src/main/AndroidManifest.xml-Datei? –

+0

Das ist richtig, ich habe keine 'app/src/main/AndroidManifest.xml' in meinem Projekt. – OlivierM