創建一個密鑰庫
打開Flutter的開發文檔,進入配置 key store 的頁面,請注意以下紅線,是很容易忽略的地方
找到Java源文件
$ /Applications/Android\ Studio.app/Contents/jre/jdk/Contents/Home/bin/java
錯誤信息
$ /Applications/Android\ Studio.app/Contents/jre/jdk/Contents/Home/bin/java keytool -genkey -v -keystore ~/upload-keystore.jks -keyalg RSA -keysize 2048 -validity 10000 -alias upload
錯誤: 找不到或無法加載主類 keytool
修改後,
$ /Applications/Android\ Studio.app/Contents/jre/jdk/Contents/Home/bin/keytool -genkey -v -keystore /upload-keystore.jks -keyalg RSA -keysize 2048 -validity 10000 -alias upload
又報錯了:keytool 錯誤: java.io.FileNotFoundException: /upload-keystore.jks (Read-only file system)
將文件生成個到其他目錄,例如 Mac路徑:~/platform, windows 路徑:D:/platform
$ /Applications/Android\ Studio.app/Contents/jre/jdk/Contents/Home/bin/keytool -genkey -v -keystore /upload-keystore.jks -keyalg RSA -keysize 2048 -validity 10000 -keystore ~/platform/android/keytool/android.key
生成成功:
從應用程序引用密鑰庫
創建一個名爲的文件[project]/android/key.properties
,其中包含對密鑰庫的引用:
storePassword=<password from previous step> //密鑰庫密碼 keyPassword=<password from previous step> //密鑰密碼 keyAlias=upload // 密鑰標示名 storeFile=<location of the key store file, such as /Users/<user name>/upload-keystore.jks> //密鑰庫存放的路徑
請注意紅色部分,千萬不要忽略,因爲我已經被坑的很慘很慘了,
以下是我代碼的部分,你可以按照你的填寫
storePassword=1234567890 // 查看下圖 keyPassword=1234567890 //查看下圖 keyAlias=mykey // 查看下圖 storeFile=/Users/<yourname>/android.key
配置Gradle登錄
通過編輯[project]/android/app/build.gradle
文件,將gradle配置爲在發佈模式下構建應用程序時使用上載密鑰。
1. 在該android
塊之前,從屬性文件中添加密鑰庫信息:
def keystoreProperties = new Properties() def keystorePropertiesFile = rootProject.file('key.properties') if (keystorePropertiesFile.exists()) { keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) } android { ... }
將key.properties
文件加載到keystoreProperties
對象中。
2. 更換buildTypes
塊:
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 keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null storePassword keystoreProperties['storePassword'] } } buildTypes { release { signingConfig signingConfigs.release } }
您的應用的發佈版本現在將自動簽名。
注意: 您可能需要flutter clean
在更改gradle文件後運行。這樣可以防止緩存的版本影響簽名過程。
生成APK
直接在終端中輸入:
flutter build apk
這時候就打包成功了