Android 不同的 packageName 和 flavors

Android different packageName with flavors

我需要安装项目的 2 个版本(生产和开发)。我需要 2 个应用程序。我试图通过使用口味来实现它,但是当我签署 apk 时,它总是生成相同的应用程序,具有相同的 packageName (com.company.project)。我试过从 defaultConfig 中删除 applicationId 但它不起作用 neither.In 清单,包名称是 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"                        
                }
            }

当您创建 productFlavors 时,相应的 gradle 任务也会发生变化。

比如原来你只有assembleDebugassembleRelease。但是,在实施 productFlavors 之后,gradle 任务将发生变化。考虑到你的例子,它将是

  • assembleDevelopmentDebug
  • assembleDevelopmentRelease
  • assembleProductionDebug
  • assembleProductionRelease

如果您正在使用 Android Studio,那么您不必担心 gradle 任务。只需从菜单中 select Build Variant 并构建项目。它将 运行 相应的 gradle 任务并安装构建。

我写了一篇博客解释这个,Product Flavors in Android. A sample project is also available on GitHub

我正在做类似的事情,我的 build.gradle 看起来像这样并且有效:

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

我实际上是在 Build -> Edit Flavors 中设置的,它为我生成了所有内容。

最后我这样做了:

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]
    }