Skip to content

APK Release

Reference

https://ithelp.ithome.com.tw/articles/10224285

添加App Icon

雖然Flutter預設的Icon並不算醜,但用預設的總是有種陽春感,所以在輸出前先來建立專屬於你自己的Icon吧。

在Dart Pub上有一個能迅速幫你生成Android和iOS Icon的套件flutter_launcher_icons,只需要三個簡單的步驟,它就會分別在Android和iOS的資料夾產生適合各種大小使用的Icon圖示。

pubspec.yamldev_dependencies區塊引入flutter_launcher_icons package

dev_dependencies:
  flutter_launcher_icons: ^0.7.3

將你的Icon圖放到assets資料夾後,在pubspec.yaml添加以下程式碼指向圖片路徑、設置檔案名稱等等

flutter_icons:
  image_path: "assets/icons/ic_launcher.png"
  android: true # can specify file name here e.g. "ic_launcher"
  ios: true # can specify file name here e.g. "My-Launcher-Icon"

在命令行輸入下方程式碼,剩下的就交由套件幫我們完成

flutter pub get
flutter pub run flutter_launcher_icons:main

執行完後可以在Android資料夾看見產生出了許多不同大小的Icon,在android/app/src/main/AndroidManifest.xml中的android:icon="@mipmap/ic_launcher">也會自動更改成你設定的檔案名稱。

建立keyStore

有兩種方式可以產生keyStore

  1. 使用Android Studio GUI介面產生
    這種方式簡單但麻煩,因為你需要先建立一個空的Android專案,然後依照下方的示意圖建立keyStore。
    - 從上方工具列選擇Build -> Generate Signed Bundle/APK
    - 選擇APK
    - 點選Create new…,建造KeyStore
    - 設置你的keyStore檔案存放位置並設置alias的密碼

  2. 透過command line指令建造KeyStore

C:\Program Files\Java\jdk1.8.0_181\bin(路徑可能依你當初安裝的設定有異),開啟cmd或Power Shell輸入下方指令,keyStore的存放路徑可以自己設定。

keytool -genkey -v -keystore c:/Users/USER_NAME/key.jks -storetype JKS -keyalg RSA -keysize 2048 -validity 10000 -alias key

新增key.properties

回到專案,在android資料夾下新增key.properties,用來存放你剛剛新增的keyStore檔案位置和密碼。

設置Proguard Rule

使用Proguard是為了保護你的程式碼不易被竊取,它能對程式碼做混淆和優化,即使惡意人士反組譯你的apk,也很難看懂程式碼的運作流程。

在android/app資料夾新增proguard-rules.pro用來設置Proguard的規則。

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

設置app層級的build.gradle

開啟android/app/build.gradle

找到

android {
    compileSdkVersion 28

在它上面加三行程式碼,載入剛剛的key.properties

def keystorePropertiesFile = rootProject.file("key.properties")
def keystoreProperties = new Properties()
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))

android {
    compileSdkVersion 28

找到

buildTypes {
    release {
        ...
    }
}

修改成以下程式碼,開啟Proguard功能以及設置簽章用的keyStore資訊。

signingConfigs {
    release {
        keyAlias keystoreProperties['keyAlias']
        keyPassword keystoreProperties['keyPassword']
        storeFile file(keystoreProperties['storeFile'])
        storePassword keystoreProperties['storePassword']
    }
}

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

輸出Release APK

在terminal輸入 flutter build apk 就完成啰。輸出的apk可以在「專案資料夾\build\app\outputs\apk\release」找到。


設置Firebase驗證指紋

你會發現當安裝APK後,卻無法使用Google賬號登入,這是因為之前只有在Firebase填上debug keyStore的驗證指紋,而剛剛產生的release keyStore指紋還沒有輸入。

取得證書SHA-1步驟:

  1. 使用cmd或PowerShell到C:\Program Files\Java\jdk1.8.0_181\bin路徑
  2. 輸入 keytool -exportcert -list -v -alias <alias名稱> -keystore <keyStore檔案路徑>
  3. 輸入金鑰密碼

最後只要在Firebase App設置的地方新增你的SHA1就可以啦。


Last update : 13 novembre 2024
Created : 13 novembre 2024

Comments

Comments