我使用香味尺寸在我的項目,我一直在使用一個for循環的applicationID設置爲我的口味產生:使用flavor的大小時,設置Android applicationId的正確方法是什麼?
flavorDimensions "appname", "brand"
productFlavors {
user {
dimension "appname"
}
installer {
dimension "appname"
}
branda {
dimension "brand"
}
brandb {
dimension "brand"
}
brandc {
dimension "brand"
}
brandd {
dimension "brand"
}
}
的我過濾那些我現在不支持:
variantFilter { variant ->
def names = variant.flavors*.name
if (names.contains("installer") && (names.contains("brandc") || names.contains("brancd"))) {
variant.ignore = true
}
}
然後我的applicationID根據風味名的更新:
applicationVariants.all { variant ->
def flavorString = variant.getVariantData().getVariantConfiguration().getFlavorName()
def mergedFlavour = variant.getVariantData().getVariantConfiguration().getMergedFlavor();
switch (flavorString) {
/**
* user
*/
case "userBranda":
mergedFlavour.setApplicationId("com.mycompany.product.user.someName")
mergedFlavour.setVersionName("1.0.0")
break
case "userBrandb":
mergedFlavour.setApplicationId("com.mycompany.product.user.b")
mergedFlavour.setVersionName("2.0.0")
break
case "userBrandc":
mergedFlavour.setApplicationId("com.mycompany.product.user.otherName")
mergedFlavour.setVersionName("1.5.0")
break
case "userBrandd":
mergedFlavour.setApplicationId("com.mycompany.product.user.d")
mergedFlavour.setVersionName("1.0.1")
break
/**
* installer
*/
case "installerBranda":
mergedFlavour.setApplicationId("com.mycompany.product.installer.marketingName")
mergedFlavour.setVersionName("1.0.0")
break
case "installerBrandb":
mergedFlavour.setApplicationId("com.mycompany.product.installer.b")
mergedFlavour.setVersionName("1.0.0")
break
default:
throw new GradleException("flavor ${flavorString} is not supported, please configure it first...")
break
}
我有兩個問題:
- 這是正確的方法嗎? android插件不支持使用flavorDimensions配置applicationId的方法?
- 我在這裏提到的配置適用於大多數情況,例如,如果您使用的是已經定義了應用程序包的google-services.json。對於簡單的productFlavor使用,配置工作正常,但如果我用香精方面,gradle這個總是在抱怨:
:app:processUserBrandaDebugGoogleServices
No matching client found for package name 'com.mycompany.product'
基本上「com.mycompany.product」是默認的AndroidManifest定義的包。 XML。 如果我看在
app/build/intermediates/manifests/full/userBranda/debug/AndroidManifest.xml
我可以看到,包已成功取代。
我可以得出的結論是,只爲味道維度,不知何故,gradle會在processUserBrandaDebugGoogleServices之後合併清單,這意味着此時在清單中定義的包仍然是默認包。
這裏有同樣問題的人嗎?如何解決此問題?這是一個Android gradle插件錯誤?
見http://tools.android.com/tech- docs/new-build-system/applicationid-vs-packagename瞭解更多細節。 –
該文檔沒有提到有關爲flavorDimensions設置applicationId的任何信息。 –
所以http://stackoverflow.com/a/26585241/4310905幾乎是一樣的,所以你的代碼看起來不錯。 –