在build.gradle
,我的产品口味设置:的Android,摇篮,产品的口味和清单
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 [email protected] 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.
为什么它试图merg当我指定它应该看别处?
我该如何解决这个问题?
我希望有人会质疑为什么我这样做,或者为什么我不使用建议的风味项目结构。那么,我需要一个正常的清单在Gradle外部使用,例如从Eclipse部署(请一次一个!),我也需要通过构建过程注入的版本。
所以首先,这里有很多味道 - 我只是试图保持给定的例子简单。我不能(AFAIK)从原始清单中删除属性,因为这是IDE部署使用的属性。不过,我可以创建第三个,没有属性,并默认使用Gradle。似乎过度! –
@RobPridham:“这是IDE部署使用的那个” - 如果您使用的是Android Studio,Build Variants工具控制IDE使用的内容。 – CommonsWare
确实。不幸的是 - 仍然使用Eclipse和ADT进行这种开发,以获得各种优秀(尽管不太好)的原因。 –