Flutter安卓项目打包完整指南:从开发到发布

Flutter安卓项目打包完整指南:从开发到发布

一、环境准备

1.1 安装Flutter SDK


# 下载Flutter SDK
git clone https://github.com/flutter/flutter.git -b stable $HOME/flutter-sdk

# 配置环境变量
echo 'export PATH="$HOME/flutter-sdk/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc

# 验证安装
flutter doctor

# 安装Android证书
flutter doctor --android-licenses

1.2 安装Android Studio


# 下载Android Studio
wget https://redirector.gvt1.com/edgedl/android/studio/ide-zips/2023.1.1.21/android-studio-2023.1.1.21-linux.tar.gz

# 解压
tar -xzf android-studio-2023.1.1.21-linux.tar.gz

# 启动
./android-studio/bin/studio.sh

1.3 配置Android SDK


# 设置ANDROID_HOME
echo 'export ANDROID_HOME=$HOME/Android/Sdk' >> ~/.bashrc
echo 'export PATH=$PATH:$ANDROID_HOME/platform-tools:$ANDROID_HOME/tools' >> ~/.bashrc
source ~/.bashrc

# 安装SDK组件
sdkmanager --licenses
sdkmanager "platform-tools" "platforms;android-34" "build-tools;34.0.0"

二、创建Flutter项目

2.1 新建项目


# 创建新项目
flutter create my_flutter_app

# 进入项目目录
cd my_flutter_app

# 运行测试
flutter run

2.2 项目结构


my_flutter_app/
├── android/          # Android原生项目
├── ios/             # iOS原生项目
├── lib/             # Flutter代码
│   └── main.dart   # 入口文件
├── web/             # Web项目
├── test/            # 测试代码
├── pubspec.yaml     # 依赖配置
└── pubspec.lock     # 锁定依赖版本

三、打包配置

3.1 修改应用名称


# android/app/src/main/AndroidManifest.xml
<application
    android:label="我的应用"
    android:name=".MainApplication"
    android:icon="@mipmap/ic_launcher">

3.2 配置应用图标


# 使用flutter_launcher_icons
flutter pub add flutter_launcher_icons

# 配置pubspec.yaml
flutter_icons:
  android: "ic_launcher"
  image_path: "assets/icon.png"

# 生成图标
flutter pub run flutter_launcher_icons:main

3.3 配置启动图


flutter pub add flutter_native_splash

# 配置pubspec.yaml
flutter_native_splash:
  color: "#FFFFFF"
  image: "assets/splash.png"

# 生成启动图
flutter pub run flutter_native_splash:create

四、Release打包

4.1 构建Release APK


# 进入Android目录
cd android

# 构建Release APK
./gradlew assembleRelease

# APK位置
# android/app/build/outputs/apk/release/app-release.apk

4.2 构建Debug APK


# 构建Debug APK
flutter build apk --debug

# 构建Release APK
flutter build apk --release

# 构建App Bundle(推荐,体积更小)
flutter build appbundle --release

4.3 Gradle配置优化


# android/app/build.gradle

android {
    signingConfigs {
        release {
            // 签名配置
        }
    }

    buildTypes {
        release {
            // 混淆配置
            shrinkResources true
            minifyEnabled true

            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

    // 优化构建
    splits {
        abi {
            enable true
            reset()
            universalApk true
            include "armeabi-v7a", "arm64-v8a", "x86", "x86_64"
        }
    }
}

五、签名配置

5.1 生成签名密钥


# 生成 keystore 文件
keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000

# 签名参数
# 密钥库密码:your_password
# 密钥密码:your_password

5.2 配置签名


# android/key.properties
storePassword=your_password
keyPassword=your_password
keyAlias=my-key-alias
storeFile=release.jks

# android/app/build.gradle

android {
    signingConfigs {
        release {
            keyAlias keystoreProperties['keyAlias']
            keyPassword keystoreProperties['keyPassword']
            storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
            storePassword keystoreProperties['storePassword']
        }
    }

    buildTypes {
        release {
            signingConfig signingConfigs.release
        }
    }
}

六、优化APK

6.1 减小APK体积


// 使用flutter build --split-debug-info
flutter build apk --release --split-debug-info

// 启用R8混淆
flutter build apk --obfuscate

6.2 优化图片资源


# 使用TinyPNG压缩图片
# 使用WebP格式
# 移除未使用的资源

6.3 配置ABI分割


// 只打包需要的架构
flutter build apk --target-platform android-arm,android-arm64

七、多渠道打包

7.1 配置Flavor


// android/app/build.gradle

android {
    flavorDimensions "version"

    productFlavors {
        googleplay {
            dimension "version"
            applicationIdSuffix ".googleplay"
            versionNameSuffix "-googleplay"
        }

        huawei {
            dimension "version"
            applicationIdSuffix ".huawei"
            versionNameSuffix "-huawei"
        }
    }
}

7.2 打包命令


# Google Play渠道
flutter build apk --google-play

# 华为渠道
flutter build apk --huawei

# 全部渠道
flutter build apk --flavors googleplay,huawei

八、持续集成

8.1 GitHub Actions


# .github/workflows/android.yml
name: Android CI

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3

      - uses: subosito/flutter-action@v2
        with:
          flutter-version: '3.16.0'

      - name: Install dependencies
        run: flutter pub get

      - name: Build APK
        run: flutter build apk --release

      - name: Upload APK
        uses: actions/upload-artifact@v3
        with:
          name: apk
          path: build/app/outputs/flutter-apk/app-release.apk

8.2 Fastlane配置


# Fastfile
default_platform(:android)

platform :android do
  desc "Build and release to Google Play"
  lane :release do
    gradle(task: "assembleRelease")
    upload_to_play_store
  end

  desc "Build debug APK"
  lane :debug do
    gradle(task: "assembleDebug")
  end
end

九、常见问题

9.1 签名失败


# 错误: Keystore was tampered with, or password was incorrect

# 解决方法:
# 1. 检查密码是否正确
# 2. 确认密钥别名是否正确
# 3. 重新生成keystore

9.2 构建超时


# 错误: Gradle build timeout

# 解决方法:
# 1. 增加内存:org.gradle.jvmargs=-Xmx2048m
# 2. 使用国内镜像源
# 3. 清理构建缓存:flutter clean

9.3 SDK版本问题


# 错误: SDK version mismatch

# 解决方法:
# 1. 更新Flutter SDK
# 2. 检查pubspec.yaml的SDK版本要求
# 3. 运行flutter doctor检查环境

十、总结

本文介绍了Flutter安卓项目打包的完整流程:

✅ 环境准备和配置 ✅ 项目创建和结构 ✅ Release打包和签名 ✅ APK优化和多渠道打包 ✅ 持续集成配置 ✅ 常见问题解决

关键要点:

相关资源:

  • Flutter官网:https://flutter.dev
  • Flutter中文网:https://flutter.cn
  • Android开发者:https://developer.android.com

发表回复

后才能评论