在build.gradle
中,我设置了产品风味:
productFlavors
{
AlternateFlavour
{
applicationId "com.myapp.alternateflavour"
}
}
然后在 sourceSets 部分,我为这些风格使用不同的资源、资产和清单目录:
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
}
AlternateFlavour {
manifest.srcFile 'manifest-tmp/AlternateFlavour/AndroidManifest.xml'
java.srcDirs = ['src']
res.srcDirs = ['res-tmp/AlternateFlavour']
assets.srcDirs = ['assets-tmp/AlternateFlavour']
}
}
到目前为止还可以。
在风味使用的清单中,部分是自动生成的,我有:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.myapp.myapp"
android:versionCode="1010001"
android:versionName="V1.1.0.1" >
但在根项目的原始清单中如下:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.myapp.myapp"
android:versionCode="1010000"
android:versionName="V1.1.0.DEBUG" >
这会导致 Gradle 失败:
Error:
Attribute manifest@versionCode value=(1010001) from AndroidManifest.xml:4:5-28
is also present at AndroidManifest.xml:4:5-28 value=(1010000).
Attributes of <manifest> elements are not merged.
为什么它试图与原始清单合并,当我指定它应该在别处寻找时?
我该如何阻止呢?
我希望有些人会质疑我为什么要这样做,或者确实为什么我不使用建议的风味项目结构。好吧,我需要一个在 Gradle 之外使用的普通清单,例如从 Eclipse 部署(请一次做一件事!),我还需要在构建过程中注入版本。