Flutter 是 Google 开发的一款开源跨平台移动应用开发框架,开发者可以使用 Flutter 构建高性能、高保真的 Android 和 iOS 应用。本文将详细介绍如何给 Flutter App 进行打包,主要分为 Android 和 iOS 两部分。在细述打包步骤之前我们先来了解一下 Flutter 打包的原理。
Flutter 打包原理
Flutter是基于Dart语言的,当进行打包操作时,会先将Dart代码编译成特定的格式。Android和iOS的编译方式略有不同,Android是将Dart代码编译为JNI/ARM库形式,然后通过Android Studio创建的原生项目将这些库整合成一个APK或者AAB文件;而iOS则直接将Dart代码编译为iOS的可执行二进制文件,然后通过Xcode打包成符合苹果规范的IPA文件。打包的原理了解完了,接下来我们来详细介绍如何给 Android 和 iOS 的 Flutter App 进行打包。
给 Android 的 Flutter App 打包
1. 准备工作
在开始打包前,请确保已安装并设置好 Flutter 开发环境,并拥有一个具有签名信息的 `key.properties` 文件。签名信息是用于认证和保护您的应用的,如果您尚未创建,请创建并妥善保管好。
2. 设定签名信息
将 `key.properties` 文件放在Flutter工程的 `/android` 文件夹下。然后打开 `/android/app/build.gradle` 文件,在 `android` 字段下方添加如下代码:
```groovy
def keystorePropertiesFile = rootProject.file("key.properties")
def keystoreProperties = new Properties()
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
android {
...
signingConfigs {
release {
// 使用keystoreProperties加载签名信息
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile file(keystoreProperties['storeFile'])
storePassword keystoreProperties['storePassword']
}
}
buildTypes {
release {
signingConfig signingConfigs.release
...
}
}
}
```
3. 生成 Android App Bundle
在工程的根目录下运行以下命令:
```
flutter build appbundle
```
运行成功后,您将在 `/<工程根目录>/build/app/outputs/bundle/release` 文件夹下找到名为 `app-release.aab` 的文件。
4. 可选:生成 APK
如您需要生成 APK 文件,可运行以下命令:
```
flutter build apk
```
执行成功后,您将在 `/<工程根目录>/build/app/outputs/flutter-apk` 文件夹下找到名为 `app-release.apk` 的文件。
给 iOS 的 Flutter App 打包
1. 准备工作
请确保您的 Mac 设备上已经安装并配置好 Flutter 开发环境,并拥有一个有效的 Apple 开发者帐号。
2. 更新 App 版本信息
在 `Info.plist` 文件中更新 `CFBundleShortVersionString` 和 `CFBundleVersion` 字段以设置新版本的目标版本号码和构建版本号。
3. 在 Xcode 中归档项目
在 Flutter 项目根目录,运行如下命令来生成 iOS 版本的 Flutter App:
```
flutter build ios
```
接着,打开项目下的 "ios/Runner.xcworkspace" 文件,设置好签名和证书后,归档项目。
4. 导出 IPA 文件和提交审核
归档成功后,在 Xcode 的 Organizer(组织者)窗口处,您可以选择将项目导出为 IPA 文件,然后通过 App Store Connect 进行上传及检查。
总结
至此,您已经了解了如何对 Android 和 iOS 的 Flutter App 进行打包,以及了解了打包的基本原理。请确保在打包过程中始终遵循相应平台的规范要求,为您的应用提供安全且优秀的用户体验。