2016-06-09 1 views
1

J'essaie de changer l'emplacement du fichier AndroidManifest.xml lorsque j'utilise la version expérimentale du plugin Gradle version 0.7.x. La raison pour cela est que je génère le fichier (comme il n'y a pas de remplaçant manifeste/remplaçant de propriété dans le plugin expérimental) donc je ne veux pas un fichier de sortie avec les sources.Comment puis-je déplacer le fichier AndroidManifest.xml avec le plug-in expérimental Gradle 0.7.x?

Mon application 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 
    } 
} 

Le dessus configure bien, mais lorsque je tente de construire je reçois:

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.` 

Je ne peux pas sembler changer la valeur par défaut manifeste « propriété » du tout , quelqu'un a eu de la chance?

Répondre

0

Essayez

 manifest { source { srcDirs = $buildDir } } 

Cela semble faire ok avec juste 1 manifeste, mais le plugin expérimental vomit si vous lui donnez 2 répertoires que vous souhaitez fusionner.

(je suis aussi devine que vous avez une autre tâche pour générer le manifeste dans la BuildDir $ depuis le sucé loin par des tâches propres ....)

Mise à jour:

question secondaire, la check [Deubg | Release] La tâche manifeste veut que le fichier existe lorsqu'il s'exécute. Ce qui précède fonctionne bien pour moi pour un fichier statique. Pour quelque chose généré à partir d'une tâche dans le répertoire de construction que je devais ajouter une dépendance qui ressemble à

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

La boucle tasks.all me permet d'ajouter que si les tâches checkDebugManifest et/ou checkReleaseManifest vont arriver (j'avais problème avec ./gradlew clean ne trouvant pas la tâche checkDebugManifest sans cela.)

+0

ne fonctionne pas pour moi (se plaint encore de test/app/src/main/AndroidManifest.xml non existant) même quand BuildDir est autre chose. Gradient la version expérimentale 0.7.2 avec gradle 2.10? –

+0

Mon cas de test était avec le répertoire = étant en dehors de la structure du projet et existant avant le début de l'évaluation. (spécifiquement, "../../otherSource/src/main") Quand je le pointe vers quelque chose comme "outputs/manifest" et que j'ai la tâche de l'assembler dans ce répertoire, il échoue. J'ai essayé de mettre ma tâche à faire au début du processus, mais il rechigne. 'project.afterEvaluate { build.dependsOn mergeManifest }' Je pense que le fichier doit exister très tôt, mais je ne sais pas trop comment le faire. –

+0

Ah, merci pour le commentaire très tôt - maintenant je l'ai eu, en faisant androidDebug androidRelease dépend de createManifest enfin faire la tâche checkManifest regarder le bon fichier –

0

J'ai eu un problème similaire avec com.android.tools.build:gradle-experimental:0.7.0-alpha4. La façon dont je le résous était avec le code suivant:

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

Et vous n'avez pas de fichier app/src/main/AndroidManifest.xml? –

+0

C'est exact, je n'ai pas de 'app/src/main/AndroidManifest.xml' dans mon projet. – OlivierM