如何为相同的产品风味拥有多个 ApplicationId?

Posted

技术标签:

【中文标题】如何为相同的产品风味拥有多个 ApplicationId?【英文标题】:How to have multiple ApplicationIds for the same product flavor? 【发布时间】:2019-08-06 21:54:41 【问题描述】:

我们有一个白标应用程序,为不同的客户提供多种口味。一个新客户出现了,他们希望能够通过他们自己的开发者帐户发布应用程序。但是,在发布之前,我们需要通过内部测试轨道对应用进行测试,并验证 prod 环境是否正常工作(例如计费)。

当我们开始开发时,我们创建了一个新的产品风格,“com.business.android.product”。现在我们即将发布,我们需要一个不同的包名称,“com.example.android.thing”。我的问题是,我们怎样才能有两个相同风格的包名称(即在 /product 源文件夹中使用相同的代码)?

这是我们的风格和构建类型设置的示例

productFlavors 
    prod1 
        applicationId "com.business.android"
        buildConfigField 'boolean', 'REPORT_CRASHES', "true"
    
    prod2 
        applicationId "com.business.android.product2"
        buildConfigField 'boolean', 'REPORT_CRASHES', "true"
    
    prod3 
        applicationId "com.business.android.product3"
        buildConfigField 'boolean', 'REPORT_CRASHES', "true"
        def flavor = "spg"
    
    prod4 
        applicationId "com.company.android.product4"
        buildConfigField 'boolean', 'REPORT_CRASHES', "true"
    

    /* Need a way to have all the code in /prod4 flavor source folder but with
     * a very different applicationId - ex. somebusiness.android.product4
     *
     */


buildTypes 
    debug 
        debuggable true
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        signingConfig signingConfigs.KEY
        def buildType = "debug"
        def targetEnvironment = "production"
        buildConfigField "boolean", "PRODUCTION_ENV", "true"
    

    debugTst 
        minifyEnabled false
        debuggable true
        signingConfig signingConfigs.KEY
        def buildType = "debug"
        buildConfigField "boolean", "PRODUCTION_ENV", "false"
    

    release 
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        signingConfig signingConfigs.KEY
        def buildType = "release"
        buildConfigField "boolean", "PRODUCTION_ENV", "true"
    

    releaseTst 
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        signingConfig signingConfigs.KEY
        def buildType = "release"
        buildConfigField "boolean", "PRODUCTION_ENV", "false"
    

【问题讨论】:

您有任何错误或问题吗? 没有错误,对不起,我想我没有很好地解释这个。我无法想出一种方法来更改产品风味“prod4”的 applicationId,同时仍使用 /prod4 文件夹中的相同风味源代码。可以选择创建另一种风格,但这意味着我需要将 /prod4 中的所有代码复制到新风格的文件夹中,我们称之为 /prod4release 【参考方案1】:

此问题可以通过执行以下操作来解决:

sourceSets 
    prod4Ext.java.srcDirs += 'src/prod4/java'
    prod4Ext.res.srcDirs += 'src/prod4/res'

这将为新创建的风味 prod4Ext 提供 prod4 风味的源代码和布局。

【讨论】:

这个解决方案不会影响其他口味吗? 这只会影响风味“prod4Ext”。

以上是关于如何为相同的产品风味拥有多个 ApplicationId?的主要内容,如果未能解决你的问题,请参考以下文章

如何为多个产品托管相同的代码?

如何为多种产品设计产品表,其中每种产品都有很多参数

如何为模板重用 Kendo UI 组件?属性“.name”为多个 HTML 元素在 DOM 中提供完全相同的 ID

如何为拥有多个设备的用户管理 APN 令牌?

Apache:如何为一个ServerName拥有多个站点?

如何为同一产品生成相同的条形码,如果产品不同,则应创建新的条形码[关闭]