You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Google Play Beta测试中使用差异化应用包名

嘿,这个需求太常见啦!要给Dev、QA版本分别设置不同包名,同时保留生产版的原包名,用Android的Product Flavors(产品风味)就能轻松搞定,我给你一步步说清楚:

1. 配置Module级别的build.gradle文件

打开你的app模块下的build.gradle(注意是Module级别的,不是Project根目录的),找到android代码块,按下面的方式添加productFlavors配置:

android {
    compileSdk 34 // 替换成你的compileSdk版本
    namespace "com.companyname.appandroid" // 和生产版包名保持一致

    defaultConfig {
        applicationId "com.companyname.appandroid" // 生产版的核心包名
        minSdk 21 // 替换成你的minSdk版本
        targetSdk 34
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    // 核心:定义Dev和QA两个专属风味
    productFlavors {
        dev {
            // 给生产版包名添加.dev后缀,最终包名就是com.companyname.appandroid.dev
            applicationIdSuffix ".dev"
            // 可选:添加Dev环境专属常量,代码里可通过BuildConfig.BASE_URL直接调用
            buildConfigField "String", "BASE_URL", "\"https://dev.yourdomain.com/api/\""
            // 也可以单独设置版本标识,比如versionName "1.0-dev"
        }
        qa {
            applicationIdSuffix ".qa"
            buildConfigField "String", "BASE_URL", "\"https://qa.yourdomain.com/api/\""
        }
        // 生产版无需额外定义,自动沿用defaultConfig里的配置
    }

    buildTypes {
        debug {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

    // 可选:给不同风味配置专属签名(比如Dev用debug签名,QA用测试release签名)
    signingConfigs {
        debug {
            storeFile file("debug.keystore")
            storePassword "android"
            keyAlias "androiddebugkey"
            keyPassword "android"
        }
        qaRelease {
            storeFile file("qa-release.keystore")
            storePassword "your-qa-password"
            keyAlias "qa-key"
            keyPassword "your-qa-key-password"
        }
        prodRelease {
            storeFile file("prod-release.keystore")
            storePassword "your-prod-password"
            keyAlias "prod-key"
            keyPassword "your-prod-key-password"
        }
    }

    // 关联风味与构建类型的签名配置
    variantFilter { variant ->
        def flavorName = variant.flavorName
        def buildTypeName = variant.buildType.name
        if (flavorName == "qa" && buildTypeName == "release") {
            variant.buildType.signingConfig = signingConfigs.qaRelease
        } else if (flavorName == "" && buildTypeName == "release") {
            variant.buildType.signingConfig = signingConfigs.prodRelease
        }
    }
}

2. 构建不同环境的应用

配置完成后,你有两种方式生成对应版本:

  • Android Studio界面操作:打开右侧的「Build Variants」面板(没显示的话,可通过View > Tool Windows > Build Variants调出),在「Active Build Variant」下拉菜单里选择对应的变体,比如devDebug(Dev环境的debug版本)、qaRelease(QA环境的release版本),然后点击Build > Make Project即可。
  • 命令行构建:在项目根目录执行对应gradle命令,比如:
    • 构建Dev环境debug包:./gradlew assembleDevDebug
    • 构建QA环境release包:./gradlew assembleQaRelease
    • 构建生产版release包:./gradlew assembleRelease

3. 额外优化与注意事项

  • 多版本共存:因为包名不同,Dev、QA、生产版的应用可以同时安装在同一台设备上,完美满足Beta测试的并行需求。
  • 专属资源区分:如果需要给不同环境设置不同图标、字符串,可在src目录下创建dev、qa文件夹,比如src/dev/res/drawable/ic_launcher.png,构建时会自动覆盖main目录下的同名资源。
  • BuildConfig变量:配置的buildConfigField可直接在代码中调用,比如if (BuildConfig.BASE_URL.contains("dev")) { /* 执行Dev环境专属逻辑 */ },方便区分不同环境的业务流程。
  • 版本号管理:如果给不同风味单独设置versionCode,记得保持版本号的递增逻辑,避免上架或测试时出现版本冲突。

这样配置完,你就能轻松生成对应包名的Dev、QA版本,生产版也能保持原包名不变,完全符合你的需求~

内容的提问来源于stack exchange,提问作者Jaysingh D Thakur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:50:31