【Flutter】从安卓与iOS包体优化到一键自动打包脚本的一条龙服务

系统信息

  • System version: MacOS 12
  • Flutter version: 1.22.5
  • Dart version: 2.10.4
  • Android Studio version: 4.1.1

介绍

  • APK优化包体大小

  • APK多渠道打包

  • APK一键打包脚本

  • IPA优化包体大小

  • IPA无签名打包

  • IPA一键打包脚本

脚本地址

github脚本地址

安卓

APK优化包体大小

  1. 优化图片等资源大小,删除无用资源
  2. 只选择保留必要的so库。第三方SDK也尽量只里保留必要的so库,优化后的包体至少减少几十兆

参考修改android/app/build.gradle 文件

    buildTypes {
        release {
            ndk{
                //"armeabi","armeabi-v7a","arm64-v8a","x86_64","x86"  //x86是兼容模拟器的
                abiFilters "armeabi","armeabi-v7a","arm64-v8a"  //手机没什么x86框架的,只包含arm32和arm64即可
            }
        }
    }

安卓多渠道配置与打包

一、原理与介绍

  • 从 Flutter v1.17 开始,Flutter 命令工具增加了自定义参数的功能 --dart-define,我们可以用这个命令参数在打包或运行 App 时设置参数。这样我们就能在Flutter代码和原生代码中获取传过来的参数,从而实现多渠道功能。
  • 假设我们设置5个渠道 1、应用宝, 2、华为商店, 3、小米商店,4、OPPO商店 5、VIVO商店
二、Flutter代码配置

1、获取参数

配置文件路径:lib/main.dart

/// 这里定义环境变量配置
class EnvironmentConfig {
  static const CHANNEL = String.fromEnvironment('CHANNEL');
  //DEBUG = Y 是调试模式,其他为生产模式
  static const DEBUG = String.fromEnvironment('DEBUG');
}

2、任意的地方使用参数

#获取CHANNEL 参数值
String appMarket = EnvironmentConfig.CHANNEL;
#获取DEBUG 参数值
String debug = EnvironmentConfig.DEBUG;

三、Android代码配置

1、获取参数

配置文件路径:android/app/build.gradle

/// 获取渠道参数使用,这里设置一下默认值
def dartEnvironmentVariables = [
        CHANNEL: 'YYB',
        DEBUG: '',
]

if (project.hasProperty('dart-defines')) {
    dartEnvironmentVariables = dartEnvironmentVariables + project.property('dart-defines')
            .split(',')
            .collectEntries { entry ->
                def pair = URLDecoder.decode(entry).split('=')
                [(pair.first()): pair.last()]
            }
}

2、使用

配置文件路径:android/app/build.gradle

//例子:打包APK时修改文件名带上渠道参数,还有一些SDK也可以通过这种方式设置参数
//dartEnvironmentVariables.CHANNEL 使用参数
android{
   android.applicationVariants.all {
        variant ->
            variant.outputs.all {
                output ->
                    def outputFile = output.outputFile
                    if (outputFile.name.contains("release")) {
                        outputFileName = "APP_${getDateTime()}_${dartEnvironmentVariables.CHANNEL}.apk"
                    }
            }
    }
}

四、多渠道调试与打包指令

# 调试例子1:设置渠道为应用宝。
flutter run --dart-define=CHANNEL=YYB

# 调试例子2:设置渠道为应用宝。DEBUG参数是Y
flutter run --dart-define=CHANNEL=YYB --dart-define=DEBUG=Y

#打包例子1:打包应用宝渠道包
flutter build apk --dart-define=CHANNEL=YYB

#打包例子2:打包应用宝渠道包,DEBUG参数是Y
flutter build apk -

你可能感兴趣的:(Flutter,android,flutter,ios)