android + gradle: разные метаданные манифеста для каждого варианта

iЯ хотел бы определить другой атрибут манифеста meta-data в зависимости от разновидности продукта. Я пытался сделать это,

src/
  main/
    AndroidManifest.xml
  prod/
    AndroidManifest.xml
  dev/
    AndroidManifest.xml

манифест main завершен, но версии prod и dev разрежены и содержат только метаданные,

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.example.inventory"
          android:versionCode="1"
          android:versionName="1.0">

  <meta-data android:name="analytics"
             android:value="true"/>

</manifest>

насколько я понимаю, проявления аромата сольются с основным. В моем build.gradle я делаю,

android {
  productFlavors {
    prod {
      manifest.srcFile "prod/AndroidManifest.xml"
    }
    dev {
      manifest.srcFile "dev/AndroidManifest.xml"
    }
  }
  ...
}

однако, я пытаюсь собрать assembleProdDebug, я получаю это,

* What went wrong:
A problem occurred evaluating project ':Inventory'.
> No signature of method: org.gradle.api.java.archives.internal.DefaultManifest.srcFile() is applicable for argument types: (java.lang.String) values: [prod/AndroidManifest.xml]

person Jeffrey Blattman    schedule 20.02.2014    source источник


Ответы (1)


В вашем файле gradle вам не нужно определять путь к манифесту.

использовать:

productFlavors{
 prod {}
 dev{}
}

Убедитесь, что ваша структура каталогов верна: каталог с именем варианта, для каждого варианта, в каталоге src, и в каждом каталоге поместите файл манифеста переопределения.

Gradle объединит файлы.

PS — если ваш тег метаданных находится внутри тега приложения, вы также должны применить тег приложения в переопределяющем манифесте.

person Ran Wakshlak    schedule 20.02.2014