在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進行這種開發,以獲得各種優秀(儘管不太好)的原因。 –