java – 使用flavor尺寸时设置Android applicationId的正确方法是什么?

java – 使用flavor尺寸时设置Android applicationId的正确方法是什么?,第1张

概述我在我的项目中使用了flavor维度,并且我一直在使用for循环将applicationId设置为我生成的flavor: flavorDimensions "appname", "brand"productFlavors { user { dimension "appname" } installer { dimension "appnam 我在我的项目中使用了flavor维度,并且我一直在使用for循环将applicationID设置为我生成的flavor:
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")  breakcase "userBrandb":  mergedFlavour.setApplicationID("com.mycompany.product.user.b")  mergedFlavour.setVersionname("2.0.0")breakcase "userBrandc":  mergedFlavour.setApplicationID("com.mycompany.product.user.othername")  mergedFlavour.setVersionname("1.5.0")  breakcase "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")  breakcase "installerBrandb":  mergedFlavour.setApplicationID("com.mycompany.product.installer.b")  mergedFlavour.setVersionname("1.0.0")  breakdefault:  throw new GradleException("flavor ${flavorString} is not supported,please configure it first...")  break}

我有两个问题:

1 – 这是正确的方法吗? androID插件不支持使用flavorDimensions配置applicationID的方法吗?

2 – 我在这里提到的配置适用于大多数情况,例如,如果你使用的Google-services.Json已经在里面定义了应用程序包.对于简单的productFlavor用法,配置正常,但如果我使用flavor维度,gradle总是抱怨:

:app:processUserBrandaDeBUGGoogleServicesNo 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插件BUG吗?

解决方法 简而言之,关键字是applicationIDSuffix,如下所示:
productFlavors {    pro {        applicationIDSuffix = ".pro"    }    free {        applicationIDSuffix = ".free"    }}buildTypes {    deBUG {        applicationIDSuffix ".deBUG"    }}

更强大,你可以这样做:

applicationVariants.all { variant ->    def flavorData = rootProject.ext[variant.buildType.name]    variant.mergedFlavor.setApplicationID(flavorData.applicationID)    //do other things}
总结

以上是内存溢出为你收集整理的java – 使用flavor尺寸时设置Android applicationId的正确方法是什么?全部内容,希望文章能够帮你解决java – 使用flavor尺寸时设置Android applicationId的正确方法是什么?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1148246.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存