16_打包与发布
Flutter 应用打包和发布流程
Android APK/AAB、iOS IPA、Web 构建,以及发布前检查清单。
构建 Android
APK(直接安装包)
# Debug APK(开发调试,体积大、不适合发布)
flutter build apk --debug
# Release APK(发布用,需要签名配置)
flutter build apk --release
# 按 CPU 架构拆包(体积更小,Google Play 推荐)
flutter build apk --target-platform android-arm,android-arm64,android-x64 --split-per-abi
# 输出位置:build/app/outputs/flutter-apk/
AAB(Google Play 必须格式)
flutter build appbundle --release
# 输出位置:build/app/outputs/bundle/release/app-release.aab
Android 签名配置
# ① 生成 keystore(只需一次,务必备份!)
keytool -genkey -v \
-keystore ~/my-release-key.jks \
-keyalg RSA -keysize 2048 \
-validity 10000 \
-alias my-key-alias
# ② android/key.properties(不要提交到 git!加入 .gitignore)
storePassword=你设置的密码
keyPassword=你设置的密码
keyAlias=my-key-alias
storeFile=../../../my-release-key.jks
// ③ android/app/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 keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
storePassword keystoreProperties['storePassword']
}
}
buildTypes {
release {
signingConfig signingConfigs.release
}
}
}
构建 iOS
# 需要 macOS + Xcode + Apple Developer 账号
# 构建 iOS(无签名,用于模拟器)
flutter build ios --release
# 构建 IPA(需要 Apple Developer 账号,配置好 Provisioning Profile)
flutter build ipa
# 输出位置:build/ios/ipa/
Xcode 配置(首次):
- 打开
ios/Runner.xcworkspace - 选择 Runner target → Signing & Capabilities
- 选择 Team(Apple ID)
- 设置 Bundle Identifier(唯一,如
com.yourcompany.appname)
构建 Web
# Release 构建
flutter build web --release
# 指定渲染器
flutter build web --web-renderer html # 体积小,兼容性好
flutter build web --web-renderer canvaskit # 效果好,体积大(~2MB)
# 输出位置:build/web/(静态文件,可直接部署到 Nginx / CDN)
修改应用信息
App 名称
<!-- android/app/src/main/AndroidManifest.xml -->
<application android:label="我的应用" ...>
<!-- ios/Runner/Info.plist -->
<key>CFBundleDisplayName</key>
<string>我的应用</string>
版本号
# pubspec.yaml
version: 1.2.0+3 # 格式:版本名+构建号
# 1.2.0 = 显示给用户的版本
# 3 = Google Play / App Store 内部递增编号
应用图标
# 推荐使用 flutter_launcher_icons 包自动生成各平台图标
dev_dependencies:
flutter_launcher_icons: ^0.13.0
flutter_icons:
android: true
ios: true
image_path: "assets/icon/icon.png" # 1024x1024 PNG,无圆角
dart run flutter_launcher_icons
启动屏(Splash Screen)
dev_dependencies:
flutter_native_splash: ^2.3.0
flutter_native_splash:
color: "#FFFFFF"
image: assets/images/splash.png
android: true
ios: true
dart run flutter_native_splash:create
发布前检查清单
# 1. 代码分析
flutter analyze
# 2. 格式化
dart format lib/
# 3. 运行测试
flutter test
# 4. 检查依赖漏洞
flutter pub audit
# 5. 清理重建
flutter clean && flutter pub get
# 6. 查看构建大小分析
flutter build apk --analyze-size
发布前人工检查:
- 所有接口地址改为生产环境
- 关闭调试日志(
debugPrint替代print,或用条件kDebugMode) - 版本号
pubspec.yaml已更新 - 隐私政策链接已填写
- 应用图标和启动图已替换
- Android 签名已配置
- iOS Bundle ID 和 Team 已配置
- 权限声明(相机、位置、通知)说明合理