问题:根据口味设置applicationId。更大的问题是:已经有两个应用程序在商店里,它们都有不同的applicationId风格。
在我们的Android应用程序中,我们需要引入新的口味/维度。尺寸:
flavorDimensions“公司”、“应用程序”、“服务器”
看到这一点,这就是为什么我们不能在applicationIdSuffix中使用build.gradle,因为它是自动添加的。(点)后缀前。
我们已经有方法来决定每种口味都应该做哪一种versionCode (thanks to that answer on Stack)
def getCurrentFlavor() {
Gradle gradle = getGradle()
String tskReqStr = gradle.getStartParameter().getTaskRequests().toString()
Pattern pattern
if (tskReqStr.contains("assemble"))
pattern = Pattern.compile("assemble(\\w+)(Release|Debug)")
else
pattern = Pattern.compile("generate(\\w+)(Release|Debug)")
Matcher matcher = pattern.matcher(tskReqStr)
if (matcher.find())
return matcher.group(1).toLowerCase()
else {
println "NO MATCH FOUND"
return ""
}更多的问题:帮助我们设置版本代码的相同方法,无法帮助applicationId。
def getFlavorApplicationId() {
def flavor = getCurrentFlavor()
if (flavor.contains("company1") && flavor.contains("app1")) {
return ext.company1app1AppId
} else if (flavor.contains("company2") && flavor.contains("app1")) {
return ext.company2app1AppId
} else if (flavor.contains("company2") && flavor.contains("app2")) {
return ext.company2app2AppId
}
return "nothing"
}当应用程序构建/同步时,一切都正常工作(文件BuildConfig和生成的apk具有正确的applicationId)。当我们试图使用applicationId运行这个应用程序时,问题就发生了,这取决于口味。
Error while executing: am start -n "**non.of.those**/com.rsqtechnologies.rsqphysio.splash.SplashActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER
Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=non.of.those/com.rsqtechnologies.rsqphysio.splash.SplashActivity }
Error type 3
Error: Activity class {**non.of.those**/com.rsqtechnologies.rsqphysio.splash.SplashActivity} does not exist.
Error while Launching activity如果我对此有很好的理解,Android 不会用applicationId来运行BuildConfig的应用程序,甚至不会使用生成的.apk。它正在尝试在启动应用程序时生成它(当它无法从gradle任务- def getCurrentFlavor()收集关于风味的信息时)
当我用相同的命令在终端上运行这个应用程序时,appId是正确的--一切都很好。
我已经尝试过的事情:
有人有什么建议吗?相当复杂的问题,我可以分享更多的细节,如果有人感兴趣。
发布于 2020-02-06 14:49:00
当您使用groovy时,您可以更改所有合并风格的applicationId:
android.applicationVariants.all { variant ->
def isApp1 = variant.name.contains('app1')
def isApp2 = variant.name.contains('app2')
def idAppendix = ""
if (isApp1) idAppendix = ".withDotForApp1"
if (isApp2) idAppendix = "noDotForApp2"
mergedFlavor.setApplicationId(mergedFlavor.applicationId + idAppendix)
}请注意,如果您计划使用kotlinscript,这是行不通的,因为合并后的风格的应用程序if是一个val,并且不提供setter。
https://stackoverflow.com/questions/56291036
复制相似问题