首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多维不同风格的applicationId

多维不同风格的applicationId
EN

Stack Overflow用户
提问于 2019-05-24 10:41:49
回答 1查看 731关注 0票数 1

问题:根据口味设置applicationId。更大的问题是:已经有两个应用程序在商店里,它们都有不同的applicationId风格。

  1. com.name.dimension1.dimension2
  2. com.name.dimension1dimension2 (无点)

在我们的Android应用程序中,我们需要引入新的口味/维度。尺寸:

flavorDimensions“公司”、“应用程序”、“服务器”

看到这一点,这就是为什么我们不能在applicationIdSuffix中使用build.gradle,因为它是自动添加的。(点)后缀前。

我们已经有方法来决定每种口味都应该做哪一种versionCode (thanks to that answer on Stack)

代码语言:javascript
复制
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。

代码语言:javascript
复制
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运行这个应用程序时,问题就发生了,这取决于口味。

代码语言:javascript
复制
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是正确的--一切都很好。

我已经尝试过的事情:

有人有什么建议吗?相当复杂的问题,我可以分享更多的细节,如果有人感兴趣。

EN

回答 1

Stack Overflow用户

发布于 2020-02-06 14:49:00

当您使用groovy时,您可以更改所有合并风格的applicationId:

代码语言:javascript
复制
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。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56291036

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档