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的正确方法是什么?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)