[英]Gradle: Multi-Dimension Flavor ApplicationId
我有一個相對復雜的項目,每個應用程序都需要兩個維度。 在下面的示例中,我將其重寫得更加簡單:
flavorDimensions "shape", "color"
productFlavors {
blue {
flavorDimension "color"
}
red {
flavorDimension "color"
}
green {
flavorDimension "color"
}
square {
flavorDimension "shape"
}
circle {
flavorDimension "shape"
}
我希望能夠為每個變體設置不同的applicationId,例如:squareblue將對circleblue設置不同的applicationId。 我無法在顏色尺寸中設置applicationId,因為每個形狀都相同。 在上面的示例中,我將需要6個不同的applicationIds。 這些ID也不遵循任何模式,它們可以是任何東西。
我在這里看到了答案: 如何使用flavourDimensions為每種風味組合設置不同的applicationId? 但這意味着我需要手動設置它,由於變體的數量(1000個),這對於我的項目是不可行的。
我真正想做的是在顏色尺寸上設置兩個applicationid,然后在構建時根據形狀尺寸選擇正確的一個。 我嘗試過定義變量,但是還沒有成功,它們只是被最后一個變量覆蓋。
Gradle內置了一個extras屬性 ,因此無需定義類即可執行此操作。
看起來像這樣,可能打了兩個錯字:
productFlavors {
blue {
flavorDimension "color"
ext.squareId = "yourAppId"
ext.circleId = "yourAppId"
}
android.applicationVariants.all { variant ->
def flavors = variant.getFlavors()
if (flavors[0].name.equals("square")){
variant.mergedFlavor.setApplicationId(flavors[1].ext.squareId)
} ...
}
我從這里的此示例中找到了以下解決方案: Gradle Android插件-添加自定義的flavour屬性?
如果將這樣的類添加到gradle文件中,則可以將自定義屬性添加到productFlavor
class AppIdExtension {
String squareId
String circleId
AppIdExtension(String sId, String cId){
squareId = sId
circleId = cId
}
public void setSquareId(String id){
squareId = id
}
public String getSquareId(){
squareId
}
public void setCircleId(String id){
circleId = id
}
public String getCircleId(){
circleId
}
}
然后,通過在android { }
部分的開頭添加以下代碼,將其添加到每種口味的擴展中
productFlavors.whenObjectAdded { flavor ->
flavor.extensions.create("shapeIds", AppIdExtension, "", "")
}
然后在您的產品風味內,您可以設置每種形狀類型的值
blue {
flavorDimension "color"
platformIds.squareId "yourAppId"
platformIds.circleId "yourAppId"
}
最后,在productFlavors { }
部分之后,添加以下內容:
android.variantFilter { variant ->
def applicationId = ""
def flavors = variant.getFlavors()
if(flavors[0].name.equals("square")){
applicationId = flavors[1].platformIds.squareId
} else if(flavors[0].name.equals("circle")){
applicationId = flavors[1].platformIds.circleId
}
variant.getDefaultConfig().applicationId applicationId
}
這可能不是實現它的最優雅或最有效的方法,但是它對我來說是完美的。 現在,我可以在productFlavor部分中添加所有我的ID,然后variantFilter根據第一種口味設置正確的applicationId。
def appId = "my.custom.package"
if (appId == "some.package") {
..... Change conditions based on the flavors maybe defined more variables
}
defaultConfig {
applicationId "${appId}"
...............
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.