注:
- 本次所記錄的打包流程全部都是在 VSCode上完成,Android Studio 也一樣。
- 本次使用 Gradle 配置打包
一、檢查 & 安裝 JDK
- 檢查當(dāng)前 JDK 的版本號(hào)
java -version

如果已經(jīng)顯示當(dāng)前 java version 版本號(hào),說明 JDK 安裝成功,或者之前就安裝過,如果已經(jīng)安裝,可以忽略下面的安裝步驟
- 安裝 JDK
可以選擇終端安裝 brew cask install oracle-jdk,顯示 brew cask install oracle-jdk 即是安裝成功。 因?yàn)槲倚枰?Homebrew,所以使用官網(wǎng)下載安裝的方式
- JDK 官網(wǎng)下載地址,下載對(duì)應(yīng)的版本,我的是 MBP,所以選擇了
macOS Installer
2.安裝成功后,用終端打開環(huán)境配置文件:
vim .bash_profile,增加export JAVA_HOME=$(/usr/libexec/java_home)

3.保存并退出
esc -> wq
4.執(zhí)行
source .bash_profile更新配置文件并生效
5.檢查 JDK 的版本號(hào) ,看是否成功
二、生成簽名證書 .jks
使用簽名的主要作用是:
1.應(yīng)用程序升級(jí):只有以同一個(gè)證書簽名,系統(tǒng)才會(huì)允許安裝升級(jí)的應(yīng)用程序。如果你采用了不同的證書,那么系統(tǒng)會(huì)要求你的應(yīng)用程序采用不同的包名稱,在這種情況下相當(dāng)于安裝了一個(gè)全新的應(yīng)用程序。如果想升級(jí)應(yīng)用程序,簽名證書要相同,包名稱要相同!
2.應(yīng)用程序模塊化:Android 系統(tǒng)可以允許同一個(gè)證書簽名的多個(gè)應(yīng)用程序在一個(gè)進(jìn)程里運(yùn)行,系統(tǒng)實(shí)際把他們作為一個(gè)單個(gè)的應(yīng)用程序,此時(shí)就可以把我們的應(yīng)用程序以模塊的方式進(jìn)行部署,而用戶可以獨(dú)立的升級(jí)其中的一個(gè)模塊。
3.代碼或者數(shù)據(jù)共享:Android 提供了基于簽名的權(quán)限機(jī)制,那么一個(gè)應(yīng)用程序就可以為另一個(gè)以相同證書簽名的應(yīng)用程序公開自己的功能。以同一個(gè)證書對(duì)多個(gè)應(yīng)用程序進(jìn)行簽名,利用基于簽名的權(quán)限檢查,你就可以在應(yīng)用程序間以安全的方式共享代碼和數(shù)據(jù)了。
注意:一旦給Apk簽名并上線后,簽名文件和密碼別名等一定不能丟失,否則就等著跑路吧。
把生成證書的路徑,替換成自己的,在終端執(zhí)行下面的命令
keytool -genkey -v -keystore <存放的路徑>/sign.jks -keyalg RSA -keysize 2048 -validity 10000 -alias sign
1.genkey : 產(chǎn)生密鑰
2.keystore :
3.<存放的路徑>/sign.jks :證書的存放路徑和名字
4.keyalg RSA -keysize 2048 :使用 2048 位 RSA 算法對(duì)簽名加密
5.validity 10000 :有效期時(shí)間,這里是 10000天
6.alias sign : 別名 sign

三、配置打包文件
- 導(dǎo)入上面創(chuàng)建好的證書, key 文件夾如果沒有,則創(chuàng)建
< flutter 項(xiàng)目>/android/app/key/sign.jks
- 創(chuàng)建 key.properties 文件
< flutter 項(xiàng)目>/android/key.properties
添加配置,可以復(fù)制已有的 properties 文件,修改名字和對(duì)應(yīng)的內(nèi)容
storePassword=android
keyPassword=123456
keyAlias=sign
storeFile=key/sign.jks
1.storePassword :
2.keyPassword :生成簽名證書輸入的密庫口令
3.keyAlias :證書的別名
4.storeFile :證書相對(duì)于 key.properties 的路徑
- 配置 build.gradle 文件
def keystorePropertiesFile = rootProject.file("key.properties")
def keystoreProperties = new Properties()
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
signingConfigs {
release {
keyAlias 'sign'
keyPassword 'android'
storeFile file('key/sign.jks')
storePassword 'android'
}
}

四、VSCode 最終的目錄配置

Flutter 打包 生成apk
- 在 VSCode 中的 終端中輸入
flutter build apk,如果最終顯示? Built ***,說明打包成功 -
build/app/outputs/flutter-apk/app-release.apk是在項(xiàng)目中的子路徑,到這里,APK 打包就已經(jīng)順利成功。
源作者:Gavin_Kang
鏈接:https://juejin.cn/post/6894114964965949453
