如何为相同的产品口味设置多个 ApplicationId?

How to have multiple ApplicationIds for the same product flavor?

我们有一个白标应用程序,其中有一些适合不同客户的口味。一个新客户来了,希望能够通过他们自己的开发者帐户发布应用程序。但是,在发布之前,我们需要通过我们的内部测试轨道测试应用程序并验证产品环境是否正常工作(例如计费)。

当我们开始开发时,我们创造了一种新的产品风味,"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"
    }
}

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

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

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