第一章 基础概念与前置准备
1.1 构建环境搭建
Flutter打包需要完整的开发环境,包括:
- 操作系统要求:Windows需安装Android Studio,macOS需Xcode(iOS打包必备)
- SDK配置:通过
flutter doctor
检查环境完整性,确保Android SDK Command-line Tools、NDK等组件安装到位 - 依赖管理:在
pubspec.yaml
中声明插件版本,建议锁定版本避免兼容性问题
关键验证命令:
flutter doctor -v # 检查环境完整性
flutter pub get # 同步依赖库
常见问题:
- NDK未安装:导致构建失败(解决方案:通过Android Studio SDK Manager安装NDK)
- Xcode版本过低:无法支持最新iOS SDK(需升级至Xcode 15+)
第二章 Android平台打包全流程
2.1 应用签名机制
Android应用必须使用Keystore签名才能发布:
- 生成Keystore:
keytool -genkey -v -keystore ~/release-key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias release-key
注意Windows路径需使用反斜杠(如C:\\keys\\release-key.jks
)
- 配置文件关联:
在android/key.properties
中配置密钥信息:
storePassword=your_password
keyPassword=your_password
keyAlias=release-key
storeFile=../keys/release-key.jks
- Gradle配置:
修改android/app/build.gradle
加载签名配置:
def keystoreProperties = new Properties()
keystoreProperties.load(new FileInputStream(rootProject.file("key.properties")))
signingConfigs {
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile file(keystoreProperties['storeFile'])
storePassword keystoreProperties['storePassword']
}
}
2.2 构建产物类型
- APK:直接安装文件,支持多架构合并
flutter build apk --release --target-platform android-arm,android-arm64
- App Bundle:Google Play推荐格式,自动按设备分发
flutter build appbundle --release
注意:需在build.gradle
中启用bundle
插件
高频问题:
- ABI兼容性:未指定
--target-platform
导致64位设备闪退(必须包含android-arm64
) - 签名泄露:误将
key.properties
提交到Git仓库(需添加至.gitignore
)
第三章 iOS平台打包深度指南
3.1 Xcode工程配置
- 证书管理:
- 在Apple Developer网站创建App ID并生成Distribution证书
- 通过Xcode自动管理签名(推荐)或手动导入
.p12
文件
- Info.plist配置:
- 添加隐私权限描述(如相机、定位)
<key>NSCameraUsageDescription</key>
<string>需要相机权限用于拍摄照片</string>
3.2 构建与导出
- 命令行构建:
flutter build ios --release --no-codesign
- Xcode归档:
- 选择Product > Archive生成
.xcarchive
文件 - 通过Organizer窗口导出IPA并上传App Store Connect
关键问题:
- Swift兼容性:Windows创建的Flutter项目默认使用Swift,需改用Objective-C(
flutter create -i objc
) - 证书失效:每年需重新生成Provisioning Profile
第四章 多平台适配与优化策略
4.1 多渠道打包方案
通过编译时参数动态注入渠道标识:
- Dart环境变量:
const String channel = String.fromEnvironment('CHANNEL', defaultValue: 'official');
- 构建命令注入:
flutter build apk --release --dart-define=CHANNEL=huawei
- Gradle扩展:
在build.gradle
中读取参数生成不同versionCode
4.2 包体积优化
- ABI拆分:减少APK体积约30%
flutter build apk --release --split-per-abi
- 资源压缩:启用R8/ProGuard混淆(配置
proguard-rules.pro
) - 图片优化:使用WebP格式替代PNG,通过
flutter_image_compress
插件处理
第五章 发布流程与审核要点
5.1 Google Play上架
- 元数据准备:
- 应用截图(至少2张1080x1920)
- 多语言描述(需覆盖目标市场语言)
- 年龄分级问卷填写
- 64位支持:
自2023年起,Google Play强制要求APK包含64位库(需检查android-arm64
架构)
5.2 App Store审核
- TestFlight测试:邀请内部测试员验证功能
- 元数据规范:
- 应用预览视频(30秒以内)
- 隐私政策链接(必须可访问)
- 常见拒审原因:
- 支付未走IAP通道
- 使用私有API(如读取设备UDID)
第六章 高频问题深度解析
问题1:APK签名失败
- 现象:构建时报
Keystore was tampered with, or password incorrect
- 排查步骤:
- 检查
key.properties
路径是否为绝对路径(推荐使用storeFile=../keys/release-key.jks
) - 确认密钥别名与生成时一致(
keytool -list -v -keystore
查看)
问题2:iOS构建版本号冲突
- 根因:拆分ABI时Flutter自动计算
versionCode
(公式:abi版本 * 1000 + 原始版本
) - 解决方案:
flutter build appbundle --build-name=1.2.3 --build-number=45
问题3:Google Play上架报64位缺失
- 验证方法:
apkanalyzer manifest target-platform android-arm64 apk app-release.apk
- 强制构建命令:
flutter build appbundle --release --target-platform android-arm64