做(zuò)自(zì)由與創造的先行(xíng)者

Flutter Android構建發布

Flutter開(kāi)發手冊

檢查 App Manifest

查看(kàn)默認應用程序清單文件(位于/android/app/src/main/中的AndroidManifest.xml文件),并驗證這(zhè)些值是否正确,特别是:

application: 編輯 application 标簽, 這(zhè)是應用的名稱。

uses-permission: 如(rú)果您的應用程序代碼不需要(yào)Internet訪問(wèn),請(qǐng)删除android.permission.INTERNET權限。标準模闆包含此标記是為(wèi)了(le)啓用Flutter工(gōng)具和(hé)正在運行(xíng)的應用程序之間(jiān)的通(tōng)信。

查看(kàn)構建配置

查看(kàn)默認[Gradle 構建文件][gradlebuild]”build.gradle”,它位于/android/app/,驗證這(zhè)些值是否正确,尤其是:

defaultConfig:applicationId: 指定始終唯一(yī)的 (Application Id) appid versionCode & versionName: 指定應用程序版本号和(hé)版本号字符串。有關詳細信息,請(qǐng)參考版本文檔minSdkVersion & targetSdkVersion: 指定最低(dī)的API級别以及應用程序設計運行(xíng)的API級别。有關詳細信息,請(qǐng)參閱版本文檔中的API級别部分。

添加啓動圖标

當一(yī)個新的Flutter應用程序被創建時(shí),它有一(yī)個默認的啓動器圖标。要(yào)自(zì)定義此圖标:

查看(kàn)Android啓動圖标 設計指南,然後創建圖标。

/android/app/src/main/res/目錄中,将圖标文件放入使用配置限定符命名的文件夾中。默認mipmap-文件夾演示正确的命名約定。

在AndroidManifest.xml中,将application标記的android:icon屬性更新為(wèi)引用上(shàng)一(yī)步中的圖标(例如(rú)

要(yào)驗證圖标是否已被替換,請(qǐng)運行(xíng)您的應用程序并檢查應用圖标

app簽名

創建 keystore

如(rú)果您有現有keystore,請(qǐng)跳(tiào)至下(xià)一(yī)步。如(rú)果沒有,請(qǐng)通(tōng)過在運行(xíng)以下(xià)命令來創建一(yī)個: keytool -genkey -v -keystore ~/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key

注意:保持文件私密; 不要(yào)将它加入到公共源代碼控制中。

注意: keytool可(kě)能(néng)不在你的系統路徑中。它是Java JDK的一(yī)部分,它是作(zuò)為(wèi)Android Studio的一(yī)部分安裝的。有關具體路徑,請(qǐng)百度。

引用應用程序中的keystore

創建一(yī)個名為(wèi)/android/key.properties的文件,其中包含對密鑰庫的引用:

storePassword=

keyPassword=

keyAlias=key

storeFile=/key.jks>

注意: 保持文件私密; 不要(yào)将它加入公共源代碼控制中

在gradle中配置簽名

通(tōng)過編輯/android/app/build.gradle文件為(wèi)您的應用配置簽名

替換:

android {

為(wèi):

def keystorePropertiesFile = rootProject.file("key.properties")

def keystoreProperties = new Properties()

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

}

}

為(wèi):

signingConfigs {

release {

keyAlias keystoreProperties['keyAlias']

keyPassword keystoreProperties['keyPassword']

storeFile file(keystoreProperties['storeFile'])

storePassword keystoreProperties['storePassword']

}

}

buildTypes {

release {

signingConfig signingConfigs.release

}

}

現在,您的應用的release版本将自(zì)動進行(xíng)簽名。

開(kāi)啓混淆

默認情況下(xià) flutter 不會開(kāi)啓 Android 的混淆。

如(rú)果使用了(le)第三方 Java 或 Android 庫,也許你想減小 apk 文件的大小或者防止代碼被逆向破解。

配置混淆

創建 /android/app/proguard-rules.pro 文件,并添加以下(xià)規則:

#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.** { *; }

上(shàng)述配置隻混淆了(le) Flutter 引擎庫,任何其他(tā)庫(比如(rú) Firebase)需要(yào)添加與之對應的規則。

開(kāi)啓混淆/壓縮

打開(kāi) /android/app/build.gradle 文件,定位到 buildTypes 塊。

在 release 配置中将 minifyEnabled 和(hé) useProguard 設為(wèi) true,再将混淆文件指向上(shàng)一(yī)步創建的文件。

android {

...

buildTypes {

release {

signingConfig signingConfigs.release

minifyEnabled true

useProguard true

proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

}

}

}

構建一(yī)個發布版(release)APK

本節介紹如(rú)何構建發布版(release)APK。如(rú)果您完成了(le)前一(yī)節中的簽名步驟,則會對APK進行(xíng)簽名。

使用命令行(xíng):

cd ( 為(wèi)您的工(gōng)程目錄).

運行(xíng)flutter build apk (flutter build 默認會包含 --release選項).

打包好的發布APK位于/build/app/outputs/apk/app-release.apk。

在設備上(shàng)安裝發行(xíng)版APK

按照以下(xià)步驟在已連接的Android設備上(shàng)安裝上(shàng)一(yī)步中構建的APK

使用命令行(xíng):

用USB您的Android設備連接到您的電腦

cd .

運行(xíng) flutter install .

将APK發布到Google Play商店

将應用的release版發布到Google Play商店的詳細說明(míng),請(qǐng)參閱 Google Play publishing documentation. (國(guó)內(nèi)不存在的,但(dàn)你可(kě)以發布到國(guó)內(nèi)的各種應用商店)

網站建設開(kāi)發|APP設計開(kāi)發|小程序建設開(kāi)發
下(xià)一(yī)篇:Flutter iOS構建發布
上(shàng)一(yī)篇:Flutter 檢查用戶界面