日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android IO流_Flutter实战经验(十):打包和发布到 Android 平台

發(fā)布時間:2023/12/2 Android 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android IO流_Flutter实战经验(十):打包和发布到 Android 平台 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文適合ios開發(fā)者不清楚Android上架機制學習。

在一般的開發(fā)過程中,我們可以使用 flutter run 命令,或者 IntelliJ 工具欄中的 RunDebug 來測試 app。這時候,Flutter 默認會為我們構建 app 的調試版本。

當想要發(fā)布 app 時,比如 發(fā)布到 Google Play Store,可以按照以下步驟來準備 Android 平臺的 發(fā)布 版本。本頁面的內容包含如下主題:

  • 添加啟動圖標
  • 創(chuàng)建一個密鑰庫
  • 啟用混淆器
  • 檢查 app manifest 文件
  • 檢查構建配置
  • 為發(fā)布構建應用程序
  • 發(fā)布到 Google Play Store
  • 更新應用版本號
  • 安卓發(fā)布常見問題
  • 1. 添加啟動圖標

    當我們創(chuàng)建一個新的 Flutter app 的時候,它會有一個默認的啟動圖標。

    或者,如果我們想手動操作,可以參考以下方法:

    (1)查看 Material Design Product Icons 指南中圖標設計部分。

    (2)在 /android/app/src/main/res/ 目錄下,把我們的圖標文件放在以 配置限定符 命名的文件夾中。類似默認的 mipmap- 文件夾這樣的命名方式。

    (3)在 AndroidManifest.xml 中,更新 application 標簽中的 android:icon 屬性來引用上一步驟中我們自己的圖標文件 (例如,

    (4)用 flutter run 運行 app,檢查啟動程序中的 app 圖標是否已經替換成我們自己的圖標文件。

    2. 為 app 簽

    要想把 app 發(fā)布到應用市場,還需要給 app 一個數字簽名。我們可以采用以下步驟來為 app 簽名:

    2.1 創(chuàng)建一個密鑰庫

    如果我們已經有一個密鑰庫,可以跳到下一步。如果沒有,在命令行中運行以下的命令來創(chuàng)建一個:

    在 macOS 或者 Linux 系統(tǒng)上,執(zhí)行下面的代碼

    keytool -genkey -v -keystore ~/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key

    在 Windows 系統(tǒng)上,執(zhí)行下面的代碼

    keytool -genkey -v -keystore c:/Users/USER_NAME/key.jks -storetype JKS -keyalg RSA -keysize 2048 -validity 10000 -alias key
    • 保證這個文件的私有性,不要將它提交到公共的代碼管理空間。
    • keytool 可能不在我們的系統(tǒng)路徑中。它是 Java 的一部分,在安裝 Android Studio 的時候會被一起安裝。運行 flutter doctor -v,’Java binary at:’ 之后打印出來的就是它的路徑,然后用 java 來替換以上命令中的 keytool,并加上 keytool 的完整路徑即可。
      如果文件路徑包含空格,類似 Program Files 這樣的,你需要在路徑上加入轉義符: /"Program Files"/。
    • 只有 Java 9 或更高版本才需要 -storetype JKS 標簽。從 Java 9 版本開始,keystore 類型默認為 PKS12。

    2.2 從 app 中引用密鑰庫

    創(chuàng)建一個名為 /android/key.properties 的文件,它包含了密鑰庫位置的定義:

    storePassword=keyPassword=keyAlias=keystoreFile=/key.jks>

    備忘:請保證這個文件的私有性,不要將它提交到公共的代碼管理空間。

    2.3 在 gradle 中配置簽名

    通過編輯 /android/app/build.gradle 文件來為我們的 app 配置簽名:

    (1)將如下內容:

    android {

    替換為我們的 properties 文件的密鑰庫信息:

    def keystoreProperties = new Properties() def keystorePropertiesFile = rootProject.file('key.properties') if (keystorePropertiesFile.exists()) { keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) } android {

    (2)將如下內容:

    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 } }

    現在我們 app 的發(fā)布版本就會被自動簽名了。

    3. 啟用混淆器

    默認情況下,Flutter 不會做混淆或者壓縮 Android host 的工作。如果 app 使用了第三方的 Java 或者 Android 庫,我們會希望減小 APK 的大小,或者保護代碼不被反編譯出來。

    要了解混淆 Dart 代碼的相關信息,可以參考 Flutter wiki 上的 Obfuscating Dart Code。

    步驟1:配置 Proguard

    創(chuàng)建 /android/app/proguard-rules.pro 文件并添加下面的規(guī)則:

    ## 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.**

    以上這樣的配置只是對 Flutter 引擎庫做保護。如果想要保護其他的庫(例如,Firebase),需要為它們添加自己的規(guī)則。

    步驟2:啟用混淆以及/或壓縮

    在 /android/app/build.gradle 文件找到 buildTypes 的定義。在 release 配置中設置 minifiyEnabled 和 useProguard 為 true。另外我們必須再設置 Proguard 指向步驟 1 中我們創(chuàng)建的文件。

    android { ... buildTypes { release { signingConfig signingConfigs.release minifyEnabled true useProguard true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }}

    備忘:混淆和壓縮會大大地延長安卓應用程序的編譯時間。

    4. 檢查 app manifest 文件

    檢查位于 /android/app/src/main 的默認 App Manifest 文件 AndroidManifest.xml,并確認各個值都設置正確,特別是:

    • application:編輯 application 標簽中的 android:label 來設置 app 的最終名字。
    • uses-permission:如果你的代碼需要互聯網交互,請加入 android.permission.INTERNET 權限標簽。標準開發(fā)模版里并未加入這個權限(但是 Flutter debug 模版加入了這個權限),加入這個權限是為了允許 Flutter 工具和正在運行的 app 之間的通信。

    5. 檢查構建配置

    檢查位于 /android/app 的默認 Gradle build file,并確認各個值都設置正確,特別是下面 defaultConfig 塊中的值:

    • applicationId :指定最終的,唯一的(Application Id)appid。
    • versionCode & versionName :指定 app 的內部版本號,以及用于顯示的版本號,這可以通過設置 pubspec.yaml 文件中 version 屬性來做。
    • minSdkVersion & targetSdkVersion :指定支持的最低 API 版本,以及我們 app 的目標 API 版本。

    6. 為發(fā)布構建應用程序

    當要發(fā)布到 Play Store 時,你有兩種可能的發(fā)布方式

    • App bundle (推薦)
    • APK

    備忘

    Google Play Store 更推薦 app bundle 方式。更多信息可以參考 Android App Bundle and About Android App Bundles。

    6.1 構建一個 app bundle

    這個部分描述了如何構建一個發(fā)布的 app bundle。如果在前面的部分已經完成了簽名步驟,發(fā)布的 bundle 會被簽名。

    注意

    最近 Flutter team 收到的幾份開發(fā)者反饋顯示,他們在嘗試構建 app bundle 的時候,會在某些 Android 6.0 某些設備上崩潰。

    在 Android team 努力尋找可行的解決方案時,你可以先嘗試將 APK 拆分作為臨時解決方案。

    使用如下命令:

    (1)運行 cd 。(將 替換為我們 app 的目錄)。

    (2)運行 flutter build appbundle。(運行 flutter build 默認構建一個發(fā)布版本。)

    你的應用的 release bundle 會被創(chuàng)建到 /build/app/outputs/bundle/release/app.aab.

    此 app bundle 會默認地包含為 armeabi-v7a (32-bit) 和 arm64-v8a (64-bit) 編譯的 Dart 和 Fluter 運行時代碼。

    6.2 測試 app bundle

    一個 app bundle 可以用多種方法測試,這里介紹兩種。

    6.2.1離線使用 bundle tool

    (1)如果你還沒準備好,可以從 GitHub repository 下載 bundletool

    (2)從你的 app bundle Generate a set of APKs

    (3)Deploy the APKs to connected devices.

    Deploy the APKs 連接到你的設備

    6.2.2 在線使用 Google Play

    (1)上傳你的 bundle 到 Google Play 去測試它。或者在正式發(fā)布之前用 alpha 或 beta 頻道去測試。

    (2)按照 these steps to upload your bundle 上傳到 Play Store。

    6.3 構建一個 APK

    雖然 app bundle 比 APKs 更被推薦使用,但是有一些 Store 目前還不支持 app bundle方式。這種情況下,要為各種目標 ABI (Application Binary Interface) 分別構建發(fā)布的 APK 文件。

    如果你完成簽名步驟, APK 就被簽名了。

    使用如下命令:

    (1)cd (將 替換為我們 app 的目錄)。

    (2)行 flutter build apk (flutter build 默認帶有 --release 參數)。

    這個命令會生成兩個 APK 文件:

    • /build/app/outputs/apk/release/app-armeabi-v7a-release.apk
    • /build/app/outputs/apk/release/app-arm64-v8a-release.apk

    如果移除 --split-per-abi 將會生成一個包含_所有_目標 ABI 的 fat APK 文件。這種 APK 文件將會在比單獨構建的 APK 文件尺寸要大,會導致用戶下載一些不適用于其設備架構的二進制文件。

    6.4 在設備上安裝 APK 文件

    按照如下這些步驟,將前一步中構建出來的 APK 安裝到 Android 設備上。

    使用如下命令:

    (1)用 USB 線將 Android 設備連接到電腦上。

    (2)cd , 是我們 app 的目錄。

    (3)運行 flutter install。

    7. 發(fā)布到 Google Play Store

    要了解如何發(fā)布一個 app 到 Google Play Store,可以參考 Google Play publishing documentation。

    當你創(chuàng)建了應用之后,你可以通過 Google Ads 吸引更多用戶, Google Ads 平臺可以通過機器學習幫助你以非常高的性價比吸引到更多用戶。

    通過以下幾步創(chuàng)建一個廣告宣傳:

    (1)創(chuàng)建廣告—我們會根據您的應用信息幫您制作廣告。另外,您還可以添加圖片和視頻。

    (2)決定推廣預算—對于以提高應用安裝量為主要目標的廣告系列,您需要為其設置應用安裝出價,也就是“目標每次安裝費用”,同時設置每日推廣支出預算。

    (3)選擇目標地區(qū)—讓我們知道你希望觸達哪些區(qū)域的用戶。

    (4)設定用戶行動—決定你希望用戶要做什么,比如安裝,應用內操作或者目標廣告支出回報率 (ROAS)。

    8. 更新應用版本號

    每個應用默認的初始版本號是 1.0.0。若要更新它,請轉到 pubspec.yaml 文件并更新以下內容:

    version: 1.0.0+1

    版本號由三個點分隔的數字組成,例如上面樣例中的 1.0.0。然后是可選的構建號,例如上面樣例中的 1,以 + 分隔。

    版本號與構建號都可以在 Flutter 打包時分別使用 --build-name 和 --build-number 重新指定。

    在 Android 中,當 build-number 被用作 versionCode 時 build-name 作為 versionName 使用。更多信息請參考 Android 文檔中的 為你的應用添加版本。

    9. Android發(fā)布常見問題

    這里是一些關于安卓應用程序發(fā)布的常見問題。

    9.1 我應該什么時候構建 app bundles 而不是 APKs?

    Google Play Store 相對于 APKs 更建議你發(fā)布 app bundles,因為那樣應用程序會更有效率地交付給你的用戶。但是,如果你想將應用程序發(fā)布到其他的應用商店, APK可能是唯一選項。

    9.2 什么是 fat APK?

    一個 fat APK 是一個包含了支持多個 ABI 架構的 APK 文件。這樣做的好處是單個 APK 可以運行在多個架構上,因此具有更廣泛的兼容性。但同時缺點就是文件體積會比較大,導致用戶在安裝你的應用程序時會下載和儲存更多的字節(jié)。當構建 APKs 而不是 app bundles 時強烈建議分開構建 APKs,如 build an APK 所描述的那樣,使用 --split-per-abi 指令。

    9.3 哪些目標架構是被支持的?

    當使用 release 模式構建你的應用程序時, Flutter app 可以基于 armeabi-v7a (32-bit) 和 arm64-v8a (64-bit)被編譯。Flutter 目前不支持 x86 Android (參考 Issue 9253).

    9.4 如何使用 Android Studio 構建一個發(fā)布?

    在Android Studio中, 打開你的 app 文件夾下的 android/ 文件夾. 然后在項目面板中選擇 build.gradle (Module: app) :

    接下來,選擇構建變體。在主菜單中點擊 Build > Select Build Variant。從 Build Variants 面板中選擇任意一個變體(默認是 debug)。

    生成的 app bundle 或 APK 文件會在你的 app 所在文件夾下的 build/app/outputs 文件夾下。

    總結

    以上是生活随笔為你收集整理的android IO流_Flutter实战经验(十):打包和发布到 Android 平台的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。