在典型的开发周期中,您将使用flutter run命令行或者IntelliJ中通过工具栏运行和调试按钮进行测试。默认情况下,Flutter构建应用程序的debug版本。
当您准备好为Android准备的release版时,例如要发布到应用商店,请按照此页面上的步骤操作。

检查 App Manifest

查看默认应用程序清单文件(位于<app dir>/android/app/src/main/中的AndroidManifest.xml文件),并验证这些值是否正确,特别是:

  • application: 编辑 application 标签, 这是应用的名称。
  • uses-permission: 如果您的应用程序代码不需要Internet访问,请删除android.permission.INTERNET权限。标准模板包含此标记是为了启用Flutter工具和正在运行的应用程序之间的通信。

    查看构建配置

    查看默认[Gradle 构建文件][gradlebuild]”build.gradle”,它位于<app dir>/android/app/,验证这些值是否正确,尤其是:

  • defaultConfig:

    • applicationId: 指定始终唯一的 (Application Id)appid
    • versionCode & versionName: 指定应用程序版本号和版本号字符串。有关详细信息,请参考版本文档
    • minSdkVersion & targetSdkVersion: 指定最低的API级别以及应用程序设计运行的API级别。有关详细信息,请参阅版本文档中的API级别部分。

      添加启动图标

      当一个新的Flutter应用程序被创建时,它有一个默认的启动器图标。要自定义此图标:
  1. 查看Android启动图标 设计指南,然后创建图标。
  2. <app dir>/android/app/src/main/res/目录中,将图标文件放入使用配置限定符命名的文件夹中。默认mipmap-文件夹演示正确的命名约定。
  3. AndroidManifest.xml中,将application标记的android:icon属性更新为引用上一步中的图标(例如 <application android:icon="@mipmap/ic_launcher" ...)。
  4. 要验证图标是否已被替换,请运行您的应用程序并检查应用图标

    app签名

    创建 keystore

    如果您有现有keystore,请跳至下一步。如果没有,请通过在运行以下命令来创建一个
    1. keytool -genkey -v -keystore ~/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key
    2. //key.jks是证书文件名。-alias后面的key为证书别名
    注意:保持文件私密; 不要将它加入到公共源代码控制中。
    注意: keytool可能不在你的系统路径中。它是Java JDK的一部分,它是作为Android Studio的一部分安装的。有关具体路径,请百度。 ```shell 输入密钥库口令: 再次输入新口令: 您的名字与姓氏是什么? [Unknown]: 您的组织单位名称是什么? [Unknown]: 您的组织名称是什么? [Unknown]: 您所在的城市或区域名称是什么? [Unknown]: 您所在的省/市/自治区名称是什么? [Unknown]: 该单位的双字母国家/地区代码是什么? [Unknown]: CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown是否正确?

正在为以下对象生成 2,048 位RSA密钥对和自签名证书 (SHA256withRSA) (有效期为 10,000 天): CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown 输入 的密钥口令 (如果和密钥库口令相同, 按回车): 再次输入新口令: [正在存储D:/key.jks]

  1. 这样证书就生成好了。
  2. <a name="ppt0j"></a>
  3. ### 通过key.jks查询md5、SHA1、SHA256
  4. 如果要查看SHA1SHA256,则在当前目录继续输入:
  5. ```shell
  6. keytool -list -v -keystore D:/key.jks

image.png

引用应用程序中的keystore

创建一个名为<app dir>/android/key.properties的文件,其中包含对密钥库的引用:

  1. storePassword=<password from previous step>
  2. keyPassword=<password from previous step>
  3. keyAlias=key
  4. storeFile=<location of the key store file, e.g. /Users/<user name>/key.jks>

注意: 保持文件私密; 不要将它加入公共源代码控制中

在gradle中配置签名

通过编辑<app dir>/android/app/build.gradle文件为您的应用配置签名

  1. 替换:

    1. android {
  2. 为:

    1. def keystorePropertiesFile = rootProject.file("key.properties")
    2. def keystoreProperties = new Properties()
    3. keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
    4. android {
  3. 替换:

    1. buildTypes {
    2. release {
    3. // TODO: Add your own signing config for the release build.
    4. // Signing with the debug keys for now, so `flutter run --release` works.
    5. signingConfig signingConfigs.debug
    6. }
    7. }
  4. 为:

    1. signingConfigs {
    2. release {
    3. keyAlias keystoreProperties['keyAlias']
    4. keyPassword keystoreProperties['keyPassword']
    5. storeFile file(keystoreProperties['storeFile'])
    6. storePassword keystoreProperties['storePassword']
    7. }
    8. }
    9. buildTypes {
    10. release {
    11. signingConfig signingConfigs.release
    12. }
    13. }
  5. 现在,您的应用的release版本将自动进行签名。

    开启混淆

    默认情况下 flutter 不会开启 Android 的混淆。
    如果使用了第三方 Java 或 Android 库,也许你想减小 apk 文件的大小或者防止代码被逆向破解。

    配置混淆

    创建 /android/app/proguard-rules.pro 文件,并添加以下规则:

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

    上述配置只混淆了 Flutter 引擎库,任何其他库(比如 Firebase)需要添加与之对应的规则。

    开启混淆/压缩

    打开 /android/app/build.gradle 文件,定位到 buildTypes 块。
    release 配置中将 minifyEnableduseProguard 设为 true,再将混淆文件指向上一步创建的文件。

    1. android {
    2. ...
    3. buildTypes {
    4. release {
    5. signingConfig signingConfigs.release
    6. minifyEnabled true
    7. useProguard true
    8. proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    9. }
    10. }
    11. }

    构建一个发布版(release)APK

    本节介绍如何构建发布版(release)APK。如果您完成了前一节中的签名步骤,则会对APK进行签名。
    使用命令行:

  6. cd <app dir> (<app dir> 为您的工程目录).

  7. 运行flutter build apk (flutter build 默认会包含 --release选项).

打包好的发布APK位于<app dir>/build/app/outputs/apk/app-release.apk

在设备上安装发行版APK

按照以下步骤在已连接的Android设备上安装上一步中构建的APK
使用命令行:

  1. 用USB您的Android设备连接到您的电脑
  2. cd <app dir> .
  3. 运行 flutter install .

    将APK发布到Google Play商店

    将应用的release版发布到Google Play商店的详细说明,请参阅 Google Play publishing documentation. (国内不存在的,但你可以发布到国内的各种应用商店)

发布Android版APP-flutter中文网