[目录]
- 项目运行和调试
- 打包
- Android 打包
- iOS ipa 打包
一、项目运行和调试
flutter pub get
更新pub
flutter pub upgrade
更新第三方依赖
flutter pub outdated
查询展示依赖包可更新的版本信息
flutter --version
查看 Flutter 版本
dart --version
查看 Dart 版本
flutter channel
查看当前渠道
flutter upgrade
Flutter升级
flutter clean
清理缓存
flutter config
清理证书
flutter config clear-ios-signing-cert
flutter doctor
flutter doctor -v
flutter run
运行项目并显示连接的设备
flutter devices
列出所有连接的设备
flutter run -d 'iPhone Xʀ'
运行指定设备
flutter run -d all
运行在所有可用设备上
flutter emulators
查看可用模拟器
flutter emulators --launch apple_ios_simulator
启动iOS 模拟器-只有启动模拟器才可以运行
flutter emulators --launch Nexus_5X_API_27
启动Android 模拟器-只有启动模拟器才可以运行
flutter logs
查看日志
flutter screenshot
截图
$ r
热更新直接刷新
$ R
热更新重启刷新
$ c
Clear the screen
$ q
终止运行
断点调试
- 选中需要设置代码断点的那一行,在它的左侧点击一下会出现一个小红点;
- 点击
"调试"
图标或者调用Run -> Debug即可
清除Flutter 缓存文件
清除该目录下文件:
flutter/bin/cache/lockfile
二、打包
默认情况下,Flutter构建应用程序的debug版本。
当您准备好为Android准备release版时,例如要发布到应用商店,请按照此页面上的步骤操作。
1. Android 打包
flutter build apk
flutter build apk --no-sound-null-safety

步骤:
1. 检查
AndroidManifest.xml
文件(项目名字/android/app/src/main/
中的AndroidManifest.xml
文件),并验证这些值是否正确,特别是:
-
application
: 这是应用的名称。 -
uses-permission
: 如果您的应用程序代码不需要Internet访问,请删除android.permission.INTERNET
权限。标准模板包含此标记是为了启用Flutter工具和正在运行的应用程序之间的通信。
2. 查看
build.gradle
文件中的defaultConfig
部分(项目名字/android/app/
中的build.gradle
文件),并验证这些值是否正确,特别是:
-
defaultConfig
:
3. 添加启动图标。
首先在(项目名字/android/app/src/main/res/
的目录中,将图标文件进行替换),
![]()
然后在AndroidManifest.xml
文件中(项目名字/android/app/src/main/
中的AndroidManifest.xml
文件),将application
标记的android:icon
属性更新为引用上一步中的图标。运行验证图标是否已被替换。
android:icon="@mipmap/ic_launcher"
4. app签名。首先第一步是创建 keystore签名文件。
(注意:保持文件私密; 不要将它加入到公共源代码控制中。)如果您有现成的keystore,请跳至下一步。如果没有,请通过在终端运行以下命令来创建一个:
keytool -genkey -v -keystore /Users/flutter_key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias keyAlias
注:
/Users/flutter_key.jks
:为路径和文件名,执行命令后会在Users目录下生成名为flutter_key.jks
的签名文件,keyAlias
:为签名文件的别名,根据自己喜好设置。
然后,终端的执行过程是这样的:
![]()
5. 引用keystore到应用程序中。
(注意:保持文件私密; 不要将它加入到公共源代码控制中。)
在android目录下新建key.properties
文件,其中包含对密钥库的引用,目录结构如下图:
![]()
文件中的内容如下:
storePassword=123456(第一步中输入的密钥库口令,也就是签名文件的密码)
keyPassword=123456(第一步中输入的密钥库口令,也就是签名文件的密码)
keyAlias= keyAlias(为第一步中输入的签名文件的别名)
storeFile=/Users/flutter_demo1/android/app/key/zhou.jks(为签名文件的绝对路径,记得带上文件名)
6. 在gradle中配置签名(
项目名字/android/app/
中的build.gradle
文件)替换:
android {
为:
def keystorePropertiesFile = rootProject.file("key.properties")
def keystoreProperties = new Properties()
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
android {
/// 或者
def keystorePropertiesFile = rootProject.file('key.properties')
def keystoreProperties = new Properties()
if (keystorePropertiesFile.exists()) {
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}
android {
替换:
buildTypes {
release {
// TODO: Add your own signing config for the release build.
// Signing with the debug keys for now, so `flutter run --release` works.
signingConfig signingConfigs.debug
}
}
为:
signingConfigs {
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile file(keystoreProperties['storeFile'])
storePassword keystoreProperties['storePassword']
}
}
buildTypes {
release {
signingConfig signingConfigs.release
}
}
现在,您的应用的release版本将自动进行签名。
上面还有一种替换方法:
替换:
buildTypes {
release {
// TODO: Add your own signing config for the release build.
// Signing with the debug keys for now, so `flutter run --release` works.
signingConfig signingConfigs.debug
}
}
为:
signingConfigs {
debug {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile file(keystoreProperties['storeFile'])
storePassword keystoreProperties['storePassword']
}
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile file(keystoreProperties['storeFile'])
storePassword keystoreProperties['storePassword']
}
}
buildTypes {
debug {
signingConfig signingConfigs.debug
}
release {
signingConfig signingConfigs.release
}
}
7. 开启混淆
默认情况下 flutter 不会开启 Android 的混淆。
如果使用了第三方 Java 或 Android 库,也许你想减小 apk 文件的大小或者防止代码被逆向破解。
![]()
![]()
9. 除了上面几处更改之外,下面几处看情况更改
![]()
lintOptions {
checkReleaseBuilds false
abortOnError false
}
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'com.android.support:multidex:1.0.3'
}
2. iOS ipa 打包
方法一:
推荐:其实iOS的打包完全可以使用之前开发iOS的方式。
方法二:
flutter build ios --debug
flutter build ios --release
编译目录:
项目工程目录/build/ios/iphoneos/Runner.app
然后我们要创建一个名为Payload的文件夹,注意名字不能错,然后把Runner.app粘贴到Payload文件下,然后对Payload压缩成.zip:

然后将Payload.zip重命名为Payload.ipa:

方法三:
1. 注册一个 Bundle ID。
2. 在iTunes Connect上创建应用程序记录。
3. 查看Xcode项目设置。
在 Identity 部分:
-
Display Name:
app的名称 -
Bundle Identifier:
App的 Bundle ID.
在 Signing 部分:
-
Automatically manage signing:
Xcode是否应该自动管理应用程序签名和生成。默认设置为true
,对大多数应用程序来说应该足够了。对于更复杂的场景,请参阅Code Signing Guide。 -
Team:
选择与您注册的Apple Developer帐户关联的团队。如果需要,请选择Add Account…,然后更新此设置
在 Deployment Info 部分:
-
Deployment Target:
您的应用将支持的最低iOS版本。Flutter支持iOS 8.0及更高版本。如果您的应用程序包含使用iOS 8中不可用的API的Objective-C或Swift代码,请适当更新此设置。
4. 添加应用程序图标。
- 查看iOS App Icon 指南.
- 使用Xcode打开
Runner.xcworkspace
选择Assets.xcassets
。使用您自己的应用程序图标更换占位图标- 运行
flutter run
, 验证应用图标已被替换
5. 创建一个构建档案。
在开发过程中,您一直在构建、调试、测试 debug版本。当您准备将应用发布到App Store或TestFlight上时,您需要准备 release版本:在命令行上,在您的应用程序目录中执行以下步骤:
- 运行
flutter build ios
以创建 release版本(flutter build默认为--release)- 为确保 Xcode刷新 release模式配置,关闭并重新打开
Runner.xcworkspace
。对于Xcode 8.3和更高版本,这一步不是必需的
- 在Xcode工程中设置版本号和构建号
- 选择 Product > Archive 以生成构建档案,并
Upload to App Store…
网友评论