如何根据 --dart-define 参数构建具有不同图标的 Flutter 应用程序

nil*_*ile 3 flutter

我正在使用--dart-define=myEnv=production参数来定义构建的应用程序环境。--release(这与--debugflutter 构建参数不同)。

使用参数构建时--dart-define=myEnv=prod,我需要有一个应用程序图标,而对于使用不同变量值myEnv或没有此变量的构建,我需要有另一个应用程序图标。

我没有使用任何第三方库作为图标。

我的Android图标存储在路径:android/app/src/main/res

并且iOS图标存储在路径中:ios/Runner/Assets.xcassets/AppIcon.appiconset

我只想将第二个图标放在不同的路径上,并在Info.plistAndroidManifest.xml文件中指示类似以下内容:

...
<key>CFBundleIconFile</key>
<string>$myEnv/icon.png</string>
...
Run Code Online (Sandbox Code Playgroud)
    <application
        tools:replace="android:label,android:theme"
        android:name=".Application"
        android:label="MyCoolApp"
        android:theme="@style/Theme.AppCompat"
        android:icon=$myEnv/"@mipmap/launcher_icon">
...
Run Code Online (Sandbox Code Playgroud)

Nik*_*nau 5

有一些步骤可以做到这一点:

处方:

  • 当我使用 3 env 时,我将提供示例(我使用这样的变量:--dart-define=ENV_FLUTTER_IMG_SUFFIX=_dev为了简洁一点,但你可以使用你自己的变量
  • 不要.在名称中使用(点),android 有一些问题
  1. 如果您还没有这样做,请将您的变量放入本机代码中(Flutter --dart-define
  2. 创建 3 组 ios 图标,其中第二部分是变量的值(例如_dev_stage和空(对于 prod)) Ios 图标
  3. 创建 3 组Android图标,其中第二部分是变量的值(例如_dev_stageempty(对于 prod))
  4. 转到 Xcode 中的项目,转到目标->构建设置-> 查找Asset Catalog App Icon Set Name
  5. 改成AppIconAppIcon$(ENV_FLUTTER_IMG_SUFFIX)
  6. 必须./android/app/src/build.gradle
  7. 添加到您的defaultConfig2 个(如果您也想使用圆形图标)或 1 个新变量:
resValue "string", "img_name", "@mipmap/ic_launcher$dartEnvironmentVariables.ENV_FLUTTER_IMG_SUFFIX"
resValue "string", "img_round_name", "@mipmap/ic_launcher_round$dartEnvironmentVariables.ENV_FLUTTER_IMG_SUFFIX"
Run Code Online (Sandbox Code Playgroud)
  1. ./android/app/src/main/AndroidManifest.xml
  2. 将您的图标定义更改为
android:icon="@string/img_name"    
android:roundIcon="@string/img_round_name"
Run Code Online (Sandbox Code Playgroud)