[Cordova] 建立 sign 過的 Android APK 版本
改用 Cordova 來開發 app 之後,在將 Android apk 上架前,要先解決 sign 的問題~
當然我們可以用下列的指令建立出 release build:
cordova build --release android
但是這樣子建立出來的 release build 其實是沒有 sign 過的,
從檔案名稱 android-release-unsigned.apk 其實也相當明顯的指出沒有 sign…
如果想要直接安裝這種未 sign 過的 APK,是會失敗的:
之前都是用 Android Studio > Build > Generate Signed APK,
就會跳出一個設定 keystore 和 key 的視窗,
設定好之後就可以做出 sign 過、可以上架到 Google Play 的 APK 了:
用 Cordova 開發 app 的話,這些編譯的動作都是由 Cordova 幫忙做掉了~
要怎麼幫 APK 加上 sign 呢?
參考資料:
Sign Releases with Cordova Android
1. 建立 release-signing.properties 檔案
在 platforms/android 目錄下,建立一個 release-signing.properties 的文字檔,
內容像是下面這樣:
storeFile=/Users/testuser/AndroidKeyStore storeType=jks keyAlias=androidkeystore
如果想把密碼寫在裡面的話,可以加上下面兩行 (但比較不安全):
keyPassword=password storePassword=password
這樣的 storeFile 要放的是 keystore 檔案的路徑,
可以是相對於 platforms/android 目錄的相對路徑,或是一個絕對路徑,
不過不能是包含 ~ 字元的路徑,
舉例來說,給 ~/keystore 的話,
它會以為要去找 platforms/android/~/keystore,自然是找不到~
至於 storeType 這邊的 jks 是什麼東西呢?
我也不知道,從 Difference between .keystore file and .jks file 來看,
似乎 JKS 是 Java keystore 預設的格式,
在 Sign Releases with Cordova Android 這邊的範例是寫 storeType=pkcs12,
不過在我的 keystore 上是不適用的,得用 jks 才行~
2. 編譯 release build
一樣用下列的指令建立出 release build:
cordova build --release android
建立的過程中,如果密碼沒有寫在 release-signing.properties 的話,
會跳出兩次對話框,分別詢問 key store 和 key 的密碼:
接著就可以看到 Cordova 建立了 android-release.apk 和 android-release-unsigned.apk:
Built the following apk(s): /Users/testuser/Cordova/MultiLibraryLogin/platforms/android/build/outputs/apk/android-release.apk /Users/testuser/Cordova/MultiLibraryLogin/platforms/android/build/outputs/apk/android-release-unsigned.apk
這個 android-release.apk 就是 sign 過的版本,可以正常的在 Android 上安裝囉~