跳转到正文
YGJoon
返回

Flutter 应用打包发布详解

编辑文章

简介

应用打包发布是开发流程中的重要环节。本文详细介绍如何打包和发布 Flutter 应用到 Android 和 iOS 平台。

Android 打包

生成密钥

keytool -genkey -v -keystore key.jks \
        -keyalg RSA -keysize 2048 -validity 10000 \
        -alias key

配置密钥

创建 key.properties

storePassword=<store password>
keyPassword=<key password>
keyAlias=key
storeFile=<key store file location>

配置 build.gradle

def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('key.properties')
if (keystorePropertiesFile.exists()) {
    keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}

android {
    signingConfigs {
        release {
            keyAlias keystoreProperties['keyAlias']
            keyPassword keystoreProperties['keyPassword']
            storeFile file(keystoreProperties['storeFile'])
            storePassword keystoreProperties['storePassword']
        }
    }
    buildTypes {
        release {
            signingConfig signingConfigs.release
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'),
                    'proguard-rules.pro'
        }
    }
}

打包命令

## 生成 APK
flutter build apk --release

## 生成 App Bundle
flutter build appbundle

iOS 打包

配置证书

  1. 在 Apple Developer 网站创建证书
  2. 在 Xcode 中配置证书和 Provisioning Profile

配置应用信息

<!-- ios/Runner/Info.plist -->
<key>CFBundleDisplayName</key>
<string>应用名称</string>
<key>CFBundleIdentifier</key>
<string>com.example.myapp</string>
<key>CFBundleShortVersionString</key>
<string>1.0.0</string>
<key>CFBundleVersion</key>
<string>1</string>

打包命令

flutter build ios --release

版本管理

pubspec.yaml

version: 1.0.0+1  # 版本号+构建号

版本号格式

多渠道打包

Android 渠道配置

android {
    flavorDimensions "default"
    productFlavors {
        google {
            dimension "default"
            manifestPlaceholders = [
                CHANNEL_VALUE: "google"
            ]
        }
        huawei {
            dimension "default"
            manifestPlaceholders = [
                CHANNEL_VALUE: "huawei"
            ]
        }
    }
}

打包命令

## 打包特定渠道
flutter build apk --flavor google
flutter build apk --flavor huawei

自动化打包

Fastlane 配置

## fastlane/Fastfile
default_platform(:android)

platform :android do
  desc "Deploy to Play Store"
  lane :deploy do
    gradle(
      task: "clean assembleRelease",
      properties: {
        "android.injected.signing.store.file" => ENV["KEYSTORE_FILE"],
        "android.injected.signing.store.password" => ENV["STORE_PASSWORD"],
        "android.injected.signing.key.alias" => ENV["KEY_ALIAS"],
        "android.injected.signing.key.password" => ENV["KEY_PASSWORD"],
      }
    )
    upload_to_play_store(
      track: 'internal',
      aab: '../build/app/outputs/bundle/release/app-release.aab'
    )
  end
end

platform :ios do
  desc "Deploy to App Store"
  lane :deploy do
    build_ios_app(
      workspace: "Runner.xcworkspace",
      scheme: "Runner",
      export_method: "app-store"
    )
    upload_to_app_store(
      skip_screenshots: true,
      skip_metadata: true
    )
  end
end

CI/CD 配置

## .github/workflows/release.yml
name: Release
on:
  push:
    tags:
      - 'v*'
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-java@v1
        with:
          java-version: '11'
      - uses: subosito/flutter-action@v1
      - run: flutter pub get
      - run: flutter test
      - run: flutter build apk --release
      - uses: actions/upload-artifact@v2
        with:
          name: release-apk
          path: build/app/outputs/flutter-apk/app-release.apk

发布检查清单

通用检查

Android 检查

iOS 检查

最佳实践

  1. 使用版本控制
  2. 自动化构建流程
  3. 分环境配置
  4. 代码混淆
  5. 安全性检查

注意事项

  1. 密钥保管
  2. 敏感信息处理
  3. 版本兼容性
  4. 发布时间规划
  5. 紧急回滚方案

总结

应用打包发布是一个复杂的过程,需要注意很多细节。通过合理的配置和自动化工具,可以简化发布流程,提高发布效率。


编辑文章
分享这篇文章:

上一篇
Flutter 推送通知实现详解
下一篇
Flutter 国际化实现详解