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

如何在Android设备上安装同一Flutter应用的多个构建版本?

解决Flutter多版本应用安装冲突问题

Android系统是通过包名(applicationId)来区分不同应用的,你只修改android:label没改包名,同一包名的构建版本会被识别为同一个应用,导致安装冲突。要实现多版本共存,核心是给每个环境的flavor配置独立的包名,同时搭配不同的应用名称。

一、Android端核心配置

  1. 打开android/app/build.gradle,在android代码块中添加flavor配置,为每个环境指定独立的applicationId和应用名称:
android {
    // 保留原有其他配置(compileSdkVersion、defaultConfig等)
    flavorDimensions "environment"
    productFlavors {
        production {
            dimension "environment"
            applicationId "com.yourcompany.yourapp" // 正式版包名(与Play商店一致)
            resValue "string", "app_name", "应用名称"
        }
        dev {
            dimension "environment"
            applicationId "com.yourcompany.yourapp.dev" // Dev版独立包名
            resValue "string", "app_name", "应用名称 - Dev"
        }
        stg {
            dimension "environment"
            applicationId "com.yourcompany.yourapp.stg" // STG版独立包名
            resValue "string", "app_name", "应用名称 - STG"
        }
    }
}

这里用resValue动态生成app_name字符串,无需手动修改strings.xml,每个flavor会自动对应不同的应用名称。

  1. 确认AndroidManifest.xml里的android:label引用的是这个动态字符串,不要硬编码:
<application
    android:label="@string/app_name"
    // 其他属性保持不变
>

二、Flutter代码区分环境(可选)

如果需要在Flutter代码中根据环境切换API地址等配置,有两种简单方式:

  • 方式一:通过dart-define参数传递
    运行Dev版时:
flutter run --flavor dev --dart-define=BASE_URL=https://dev-api.yourapp.com

在Flutter中获取该值:

const baseUrl = String.fromEnvironment('BASE_URL');
  • 方式二:在build.gradle中添加编译常量
    在每个productFlavor里加入:
buildConfigField "String", "BASE_URL", "\"https://dev-api.yourapp.com\""

然后通过Flutter的平台通道读取Android端的BuildConfig值。

三、构建与安装不同版本

现在可以分别构建不同环境的APK,它们能同时安装在设备上:

  • 构建正式版:
flutter build apk --flavor production
  • 构建Dev版:
flutter build apk --flavor dev
  • 构建STG版:
flutter build apk --flavor stg

四、iOS端补充(如需跨平台支持)

如果iOS也需要多版本共存,在Xcode中做以下配置:

  1. 打开ios/Runner.xcworkspace,进入Manage Schemes,为dev、stg分别创建独立的Scheme。
  2. 每个Scheme对应的Build Settings里,设置不同的Bundle Identifier(比如com.yourcompany.yourapp.dev)。
  3. 修改Info.plist的CFBundleDisplayName为动态值,或通过Scheme配置指定不同的应用名称。

这样配置后,每个环境的应用都会被系统识别为独立APP,不会再出现安装冲突问题。

内容的提问来源于stack exchange,提问作者Avdept

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 23:44:59