说明:本文档步骤按官方文档步骤操作https://flutter.cn/docs/deployment/android

以下仅限于 Windows 中打包方式。

添加启动图标

  1. 查看 Material Design Product Icons 指南中图标设计部分。
  2. <app dir>/android/app/src/main/res/ 目录下,把我们的图标文件放在以 配置限定符 命名的文件夹中。类似默认的 mipmap- 文件夹这样的命名方式。
  3. AndroidManifest.xml 中,更新 application 标签中的 android:icon 属性来引用上一步骤中我们自己的图标文件 (例如,<application android:icon="@mipmap/ic_launcher" ...)。
  4. flutter run 运行 app,检查启动程序中的 app 图标是否已经替换成我们自己的图标文件。

启用 Material 组件

项目/android/app/build.gradle文件中添加 Android Material 组件依赖:

1
2
3
4
5
dependencies {
// ...
implementation 'com.google.android.material:material:1.3.0'
// ...
}

为 app 签名

创建一个密钥库

打开 JDK 路径 Java\jdk1.8.0_251\bin

Shifi + 右键,打开 Powershell,输入命令:

1
./keytool -genkey -v -keystore 路径\key.jks -storetype JKS -keyalg RSA -keysize 2048 -validity 10000 -alias 别名

注意:如果是命令行窗口命令前面不加./

请保证这个文件的私有性,不要将它提交到公共的代码管理空间

按照提示输入密码,名字,公司名称……(密码要记住)

从 app 中引用密钥库

项目创建/android/key.properties文件

1
2
3
4
storePassword=上一步骤中的密码
keyPassword=上一步骤中的密码
keyAlias=秘钥库的别名
storeFile=生成的密钥库的文件路径

在 gradle 中配置签名

在 项目 /android/app/build.gradle 里配置签名

1
2
3
4
5
6
7
8
9
def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('key.properties')
if (keystorePropertiesFile.exists()) {
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}
// 在下面代码块之前 添加上面内容
android {
...
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
signingConfigs {
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
storePassword keystoreProperties['storePassword']
}
}
// 在下面代码块之前 添加上面内容
buildTypes {
release {
signingConfig signingConfigs.release
}
}

启用混淆器

项目创建/android/app/proguard-rules.pro文件并添加下面的规则:

1
2
3
4
5
6
7
8
## Flutter wrapper
-keep class io.flutter.app.** { *; }
-keep class io.flutter.plugin.** { *; }
-keep class io.flutter.util.** { *; }
-keep class io.flutter.view.** { *; }
-keep class io.flutter.** { *; }
-keep class io.flutter.plugins.** { *; }
-dontwarn io.flutter.embedding.**

在项目/android/app/build.gradle文件找到buildTypes的定义

1
2
3
4
5
6
7
8
9
10
11
12
13
14
android {
...
buildTypes {
release {
signingConfig signingConfigs.release

// 添加这里的代码 {
minifyEnabled true
useProguard true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
// } 添加这里的代码
}
}
}

当你更改 gradle 文件后也许需要运行一下flutter clean。这将防止缓存的版本影响签名过程。

构建 APK

运行flutter build apk

运行flutter install