Flutter Android打包环境配置完整指南

Flutter Android打包环境配置完整指南

一、环境准备

1.1 系统要求

最低配置:

  • CPU: 4核心及以上
  • 内存: 8GB RAM(建议16GB)
  • 磁盘: 10GB可用空间(建议20GB以上)
  • 系统: Ubuntu 22.04 LTS
  • 推荐配置:

  • CPU: 8核心及以上
  • 内存: 16GB RAM
  • 磁盘: 50GB SSD

1.2 检查系统环境


# 检查系统版本
lsb_release -a

# 检查CPU架构(必须是x86_64或arm64)
uname -m

# 检查内存
free -h

# 检查磁盘空间
df -h

二、安装Java JDK

2.1 安装OpenJDK 17


# 更新软件包
sudo apt update

# 安装OpenJDK 17
sudo apt install -y openjdk-17-jdk

# 验证安装
java -version
javac -version

# 设置JAVA_HOME
echo 'export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64' >> ~/.bashrc
echo 'export PATH=$JAVA_HOME/bin:$PATH' >> ~/.bashrc
source ~/.bashrc

# 验证JAVA_HOME
echo $JAVA_HOME

2.2 配置Java环境变量


# 编辑环境变量文件
sudo tee /etc/environment << 'EOF'
JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$JAVA_HOME/bin"
EOF

source /etc/environment

三、安装Android SDK

3.1 安装命令行工具


# 创建Android SDK目录
mkdir -p $HOME/android-sdk
cd $HOME/android-sdk

# 下载Android命令行工具
wget https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip

# 解压
unzip commandlinetools-linux-11076708_latest.zip

# 创建必要目录
mkdir -p cmdline-tools/latest
mv cmdline-tools/* cmdline-tools/latest/ 2>/dev/null || true

# 清理
rm commandlinetools-linux-11076708_latest.zip

3.2 配置环境变量


# 添加Android SDK环境变量
tee -a ~/.bashrc << 'EOF'

# Android SDK
export ANDROID_HOME=$HOME/android-sdk
export PATH=$PATH:$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/platform-tools
EOF

source ~/.bashrc

# 验证安装
echo $ANDROID_HOME
sdkmanager --version

3.3 安装必要的SDK组件


# 接受 licenses
yes | sdkmanager --licenses

# 安装Android SDK Build-Tools
sdkmanager "build-tools;34.0.0"

# 安装Android SDK Platform
sdkmanager "platforms;android-34"

# 安装Android SDK Platform-Tools
sdkmanager "platform-tools"

# 查看已安装组件
sdkmanager --list_installed

3.4 配置Gradle(可选)


# 安装Gradle(如果需要特定版本)
sudo apt install -y gradle

# 或下载指定版本
wget https://services.gradle.org/distributions/gradle-8.4-bin.zip

unzip gradle-8.4-bin.zip -d /opt/

# 配置环境变量
tee -a ~/.bashrc << 'EOF'

# Gradle
export GRADLE_HOME=/opt/gradle-8.4
export PATH=$GRADLE_HOME/bin:$PATH
EOF

source ~/.bashrc

# 验证安装
gradle --version

四、安装Flutter SDK

4.1 下载Flutter SDK


# 创建Flutter安装目录
sudo mkdir -p /opt/flutter
cd /opt/flutter

# 下载Flutter SDK(使用清华源)
git clone https://mirrors.tuna.tsinghua.edu.cn/git/flutter.git -b stable /opt/flutter

# 或下载预编译包
wget https://storage.googleapis.com/flutter_infra_release/releases/stable/linux/flutter_linux_3.19.0-stable.tar.xz

tar -xf flutter_linux_3.19.0-stable.tar.xz

4.2 配置Flutter环境变量


# 添加Flutter到PATH
tee -a ~/.bashrc << 'EOF'

# Flutter
export FLUTTER_HOME=/opt/flutter
export PATH=$FLUTTER_HOME/bin:$PATH
EOF

source ~/.bashrc

# 验证安装
flutter --version

4.3 运行Flutter doctor


# 检查Flutter环境
flutter doctor -v

# 常见问题及解决
# 1. Android license未接受
flutter doctor --android-licenses

# 2. Android SDK未找到
export ANDROID_HOME=$HOME/android-sdk

# 3. Gradle未找到
export GRADLE_HOME=/opt/gradle-8.4

五、配置Android打包环境

5.1 创建签名密钥


# 创建密钥存放目录
mkdir -p $HOME/android-keystore

# 使用keytool生成密钥库
keytool -genkeypair \
  -v \
  -storetype PKCS12 \
  -keyalg RSA \
  -keysize 2048 \
  -validity 10000 \
  -keystore $HOME/android-keystore/release.keystore \
  -alias release \
  -storepass your_store_password \
  -keypass your_key_password

参数说明:

  • `-validity 10000`: 密钥有效期(天)
  • `-keystore`: 密钥库文件路径
  • `-alias`: 密钥别名
  • `-storepass`: 密钥库密码
  • `-keypass`: 密钥密码

5.2 配置签名信息

在Flutter项目的 android/key.properties 文件中配置:


storePassword=your_store_password
keyPassword=your_key_password
keyAlias=release
storeFile=$HOME/android-keystore/release.keystore

或在 android/app/build.gradle 中配置:


android {
    signingConfigs {
        release {
            keyAlias "release"
            keyPassword "your_key_password"
            storeFile file("$HOME/android-keystore/release.keystore")
            storePassword "your_store_password"
        }
    }

    buildTypes {
        release {
            signingConfig signingConfigs.release
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

5.3 配置Gradle包装器

在Flutter项目中:


cd your_flutter_project

# 生成Gradle wrapper
flutter build apk --debug

# 或手动生成
gradle wrapper --gradle-version=8.4

六、构建APK

6.1 debug版本


# 构建debug APK
flutter build apk --debug

# 构建web的debug版本
flutter build web --debug

6.2 release版本


# 构建release APK
flutter build apk --release

# 构建appbundle(AAB格式,适合Google Play)
flutter build appbundle --release

# 构建特定架构的APK
flutter build apk --release --split-per-abi

6.3 构建web版本


# 构建web版本
flutter build web --release

# 查看构建产物
ls -la build/web/

6.4 常见构建问题

1. 内存不足


# 增加JVM内存
export GRADLE_OPTS="-Xmx2048m -XX:+HeapDumpOnOutOfMemoryError"

2. Gradle下载超时


# 配置国内镜像
mkdir -p ~/.gradle
tee ~/.gradle/gradle.properties << 'EOF'
org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError
org.gradle.parallel=true
org.gradle.caching=true
EOF

# 添加国内镜像
mkdir -p ~/.gradle/init.d
tee ~/.gradle/init.d/mirror.gradle << 'EOF'
allprojects {
    repositories {
        maven { url 'https://maven.aliyun.com/repository/public' }
        maven { url 'https://maven.aliyun.com/repository/central' }
        maven { url 'https://mirrors.aliyun.com/nexus/content/repositories/gradle/' }
    }
}
EOF

3. Android SDK未找到


# 确保ANDROID_HOME正确
export ANDROID_HOME=$HOME/android-sdk

# 验证SDK路径
ls $ANDROID_HOME

# 重新运行doctor
flutter doctor -v

七、优化构建配置

7.1 Flutter build.gradle优化


android {
    buildTypes {
        release {
            // 启用代码混淆
            minifyEnabled true
            // 移除未使用的资源
            shrinkResources true
            // 配置ProGuard
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

    // 优化APK大小
    bundle {
        language {
            enableSplit = true
        }
        density {
            enableSplit = true
        }
        abi {
            enableSplit = true
        }
    }
}

7.2 ProGuard规则

android/app/proguard-rules.pro 中添加:


# Flutter相关的ProGuard规则
-keep class io.flutter.** { *; }
-keep class com.tencent.bugly.** { *; }
-keep class com.squareup.okhttp3.** { *; }
-keep class okhttp3.** { *; }
-keep class okio.** { *; }

# Dart相关的ProGuard规则
-keep class dart._internal.** { *; }
-keep class package:dispatch.** { *; }

# 保持枚举类
-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

7.3 资源优化


# 使用图片压缩工具
# 安装tinypng-cli
npm install -g tinypng-cli

# 压缩图片
tinypng --directory assets/images/

# 使用SVG替代大图片

八、CI/CD自动化构建

8.1 GitHub Actions配置

在项目根目录创建 .github/workflows/build.yml


name: Android Build

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

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v3

    - name: Set up Flutter
      uses: subosito/flutter-action@v2
      with:
        flutter-version: '3.19.0'

    - name: Install dependencies
      run: flutter pub get

    - name: Build APK
      run: flutter build apk --release
      env:
        ANDROID_HOME: /opt/android-sdk
        JAVA_HOME: /usr/lib/jvm/java-17-openjdk-amd64

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

8.2 GitLab CI配置

创建 .gitlab-ci.yml


stages:
  - build

variables:
  FLUTTER_VERSION: "3.19.0"
  ANDROID_SDK_ROOT: "/opt/android-sdk"

build:
  stage: build
  image: cirrusci/flutter:$FLUTTER_VERSION
  script:
    - flutter pub get
    - flutter build apk --release
  artifacts:
    paths:
      - build/app/outputs/flutter-apk/
    expire_in: 1 week

九、常见问题解决

9.1 编码问题


# 设置UTF-8编码
export LC_ALL=C.UTF-8
export LANG=C.UTF-8

9.2 权限问题


# 修复Android SDK权限
sudo chown -R $USER:$USER $ANDROID_HOME
sudo chmod -R u+w $ANDROID_HOME

9.3 Gradle内存不足


# 增加Gradle内存
export GRADLE_OPTS="-Xmx4g -XX:MaxMetaspaceSize=512m"

9.4 SDK组件缺失


# 检查缺失组件
flutter doctor -v

# 安装缺失组件
sdkmanager "platforms;android-34"
sdkmanager "build-tools;34.0.0"

9.5 Flutter依赖问题


# 清理并重新获取依赖
flutter clean
flutter pub cache repair
flutter pub get

十、打包最佳实践

10.1 版本管理

pubspec.yaml 中配置版本:


version: 1.0.0+1

# version: <major>.<minor>.<patch>+<build_number>

10.2 构建脚本

创建 build.sh 自动化构建脚本:


#!/bin/bash

# 配置变量
FLUTTER_HOME=/opt/flutter
ANDROID_HOME=$HOME/android-sdk
BUILD_TYPE=release

# 设置环境变量
export $FLUTTER_HOME
export $ANDROID_HOME

# 进入项目目录
cd /path/to/your/project

# 拉取最新代码
git pull

# 获取依赖
flutter pub get

# 清理构建
flutter clean

# 构建APK
flutter build apk --$BUILD_TYPE

# 构建AAB
flutter build appbundle --$BUILD_TYPE

echo "构建完成!"
echo "APK路径: build/app/outputs/flutter-apk/app-release.apk"
echo "AAB路径: build/app/outputs/bundle/release/app-release.aab"

10.3 多渠道打包

android/app/build.gradle 中配置多渠道:


android {
    flavorDimensions "channel"

    productFlavors {
        prod {
            dimension "channel"
            applicationIdSuffix ""
            versionNameSuffix ""
        }
        dev {
            dimension "channel"
            applicationIdSuffix ".dev"
            versionNameSuffix "-dev"
        }
        test {
            dimension "channel"
            applicationIdSuffix ".test"
            versionNameSuffix "-test"
        }
    }
}

构建指定渠道:


flutter build apk --release --flavor prod

十一、总结

本文详细介绍了在Ubuntu 22.04上配置Flutter Android打包环境的完整流程。

核心要点:

1. ✅ 安装Java JDK 17 2. ✅ 配置Android SDK和命令行工具 3. ✅ 安装Flutter SDK 4. ✅ 配置签名密钥 5. ✅ 构建APK/AAB/web版本 6. ✅ 优化构建配置 7. ✅ 配置CI/CD自动化 8. ✅ 常见问题解决

下一步学习:

  • 深入了解Flutter性能优化
  • 学习Flutter插件开发
  • 掌握Flutter测试策略
  • 了解Flutter Web部署
  • 相关资源:

  • Flutter官方文档:https://docs.flutter.dev/
  • Android SDK文档:https://developer.android.com/studio
  • Gradle文档:https://docs.gradle.org/
  • ProGuard规则:https://www.guardsquare.com/proguard

发表回复

后才能评论