Android不同的packageName与flavors

10

我需要安装两个版本的项目(生产和开发)。 我需要2个应用程序。 我正在尝试使用flavors来实现它,但是当我签署apk时,它总是生成相同的应用程序,具有相同的packageName(com.company.project)。 我已经尝试从defaultConfig中删除applicationId,但也不起作用。在清单中,包名称为com.company.project。

有人知道如何做到这一点吗?

这是build.gradle文件

defaultConfig {
            multiDexEnabled true
            minSdkVersion 16
            targetSdkVersion 23
            versionCode 1
            versionName "1.0"
            applicationId "com.company.project"
    }    
    productFlavors {
                development {
                    applicationId
                    "com.company.project.DEV"
                    versionName "1.0-dev"
                    resValue "string", "app_name", "Project-Dev"                     
                }
                production {
                    applicationId
                    "com.company.project.PROD"
                    resValue "string", "app_name", "Project-Prod"
                    versionName "1.0-prod"                        
                }
            }

你是如何构建你的独立 APK 的?也就是说,你使用什么命令?在构建后,你是如何确认包名的? - rothloup
@rothloup 默认情况下,Gradle 可以完成你所需的一切。只需在 Android Studio 中创建你的项目即可。 - Acuna
3个回答

2
当你创建了productFlavors,相应的gradle任务也会发生变化。
例如,最初只有assembleDebugassembleRelease。但是,在实现productFlavors后,gradle任务将发生变化。考虑您的示例,它将是
  • assembleDevelopmentDebug
  • assembleDevelopmentRelease
  • assembleProductionDebug
  • assembleProductionRelease
如果您使用Android Studio,则无需担心gradle任务。只需从菜单中选择Build Variant并构建项目即可。它将运行相应的gradle任务并安装构建。
我写了一篇博客解释这个问题:在Android中使用Product Flavors。还提供了一个样本项目在GitHub上。

1

我正在做类似的事情,我的 build.gradle 看起来像这样,并且它可以工作:

flavorDimensions 'Level'
productFlavors {
    alpha {
        dimension 'Level'
        applicationIdSuffix '.alpha'
    }
    beta {
        dimension 'Level'
        applicationIdSuffix '.beta'
    }
    major {
        dimension 'Level'
    }
}

我实际上是在“构建” -> “编辑风味”中设置的,它为我生成了所有内容。


我5年前问过这个问题,但当我回答时忘了自动回复。这是一个不错的开始,但对于更复杂的项目,我的答案更好,因为它可以替换清单中的包名。 - Borja

1

最终我是这样做的:

def appName = 'AppName'
productFlavors {
    devel {
        applicationIdSuffix ".devel"
        def buildId, appNameLabel
        buildId = androidApplicationId + '.devel' + androidVersionCode
        appNameLabel = appName + 'd' + androidVersionName
        buildConfigField "String", "BUILD_ID", '"' + buildId + '"'
        manifestPlaceholders = [app_name_label: appNameLabel, buildId: buildId]        }

    QA { 
        applicationIdSuffix ".qa"
        def buildId, appNameLabel
        buildId = androidApplicationId + '.qa' + androidVersionCode
        appNameLabel = appName + 'q' + androidVersionName
        buildConfigField "String", "BUILD_ID", '"' + buildId + '"'
        manifestPlaceholders = [app_name_label: appNameLabel, buildId: buildId]
    }

    pro {
        buildConfigField "String", "BUILD_ID", '"' + androidApplicationId + '"'
        manifestPlaceholders = [app_name_label: appName, buildId: androidApplicationId]
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接