android + gradle:每种风格的不同清单元数据

时间:2014-02-20 03:17:26

标签: android gradle android-manifest

我想根据产品风格定义不同的meta-data清单属性。我试图这样做,

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

main清单已完成,但proddev版本稀疏且只包含元数据,

<?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]

感谢。

1 个答案:

答案 0 :(得分:20)

在您的gradle文件中,您无需定义清单的路径。

使用:

productFlavors{
 prod {}
 dev{}
}

验证您的目录结构是否正确:src目录下每个样式的名称为flavor的目录,以及每个目录中的覆盖清单文件。

Gradle将合并文件。

PS - 如果您的元数据标记位于应用程序标记内,您还应该在覆盖清单中应用应用程序标记。