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

Flutter同代码发布不同图标名称应用及应用识别方法问询

Flutter 单代码库发布双受众应用(爱犬/爱猫版)实现方案

核心思路

通过区分应用的包名/Bundle ID作为标识,在Flutter层自动加载对应受众的配置文件;同时在Android/iOS平台分别配置独立的应用信息(名称、图标、包名),实现一份代码发布两款差异化应用。


Flutter 层核心实现

1. 准备差异化配置文件

在assets目录下创建两个配置文件,分别对应爱犬和爱猫用户:

  • assets/dog_config.json:包含犬系主题色、文案、资源路径等
  • assets/cat_config.json:包含猫系主题色、文案、资源路径等

示例配置(dog_config.json):

{
  "appName": "爱犬乐园",
  "primaryColor": "#E64A19",
  "welcomeText": "欢迎来到汪星人世界!",
  "iconPrefix": "dog_"
}

2. 获取应用标识并加载配置

使用package_info_plus插件获取当前应用的包名/Bundle ID,根据标识判断加载对应配置:

import 'dart:convert';
import 'package:flutter/services.dart';
import 'package:package_info_plus/package_info_plus.dart';

class AppConfig {
  late String appName;
  late String primaryColor;
  late String welcomeText;

  static Future<AppConfig> load() async {
    PackageInfo packageInfo = await PackageInfo.fromPackageInfo();
    String configPath;

    // 根据包名判断应用类型
    if (packageInfo.packageName == "com.yourcompany.dogapp") {
      configPath = "assets/dog_config.json";
    } else if (packageInfo.packageName == "com.yourcompany.catapp") {
      configPath = "assets/cat_config.json";
    } else {
      throw Exception("Unknown app flavor");
    }

    // 读取配置文件
    String jsonString = await rootBundle.loadString(configPath);
    Map<String, dynamic> jsonMap = json.decode(jsonString);

    AppConfig config = AppConfig();
    config.appName = jsonMap["appName"];
    config.primaryColor = jsonMap["primaryColor"];
    config.welcomeText = jsonMap["welcomeText"];
    return config;
  }
}

在main.dart中初始化配置:

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  AppConfig config = await AppConfig.load();
  runApp(MyApp(config: config));
}

Android 平台配置(多Flavor实现)

1. 配置Product Flavors

打开android/app/build.gradle,在android节点下添加productFlavors:

android {
    // ... 其他配置

    flavorDimensions "appType"
    productFlavors {
        dog {
            dimension "appType"
            applicationId "com.yourcompany.dogapp" // 犬系应用包名
            resValue "string", "app_name", "爱犬乐园" // 应用名称
            manifestPlaceholders = [appIcon: "@mipmap/ic_launcher_dog"] // 图标占位符
        }
        cat {
            dimension "appType"
            applicationId "com.yourcompany.catapp" // 猫系应用包名
            resValue "string", "app_name", "爱猫乐园" // 应用名称
            manifestPlaceholders = [appIcon: "@mipmap/ic_launcher_cat"] // 图标占位符
        }
    }
}

2. 配置差异化图标

在android/app/src目录下创建dog和cat两个子目录,分别放置对应应用的图标资源:

  • src/dog/res/mipmap-xxxhdpi/ic_launcher_dog.png
  • src/cat/res/mipmap-xxxhdpi/ic_launcher_cat.png

修改AndroidManifest.xml中的图标引用为占位符:

<application
    android:label="@string/app_name"
    android:icon="${appIcon}">
    <!-- ... 其他配置 -->
</application>

3. 构建不同版本

使用命令行构建:

# 构建犬系应用APK
flutter build apk --flavor dog
# 构建猫系应用APK
flutter build apk --flavor cat

或在Android Studio的Build Variants面板中选择对应的flavor(dogDebug/catRelease等)进行构建。


iOS 平台配置(多Target实现)

1. 复制Target创建多应用

打开iOS项目(ios/Runner.xcworkspace):

  1. 在Xcode左侧导航栏选中Runner Target,右键选择Duplicate
  2. 在弹出的窗口中选择Duplicate Only,将新Target命名为DogApp和CatApp(分别对应两个受众)

2. 配置差异化信息

对每个Target分别设置:

  • Bundle ID:在Signing & Capabilities面板中,为DogApp设置com.yourcompany.dogapp,CatApp设置com.yourcompany.catapp
  • 应用名称:在Info.plist中修改CFBundleDisplayName为对应名称("爱犬乐园"/"爱猫乐园")
  • 应用图标:
    1. 在Assets.xcassets中新建DogIcon和CatIcon两个App Icon资源组,分别导入对应图标
    2. 选中Target,进入Build Settings面板,搜索App Icon Source,选择对应的资源组(DogIcon/CatIcon)

3. 构建不同版本

使用命令行构建:

# 构建犬系应用IPA
flutter build ios --flavor dog --target ios/DogApp.xcworkspace
# 构建猫系应用IPA
flutter build ios --flavor cat --target ios/CatApp.xcworkspace

或在Xcode中选择对应的Scheme(DogApp/CatApp)进行构建。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 03:24:57