[Cordova] 建立簽章過的 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 才行~
2021/04/04 更新:
現在使用 release-signing.properties 檔案的方式已經失效,
必須改成在 Cordova 專案的根目錄下,建立如下的 build.json 檔案:
{ "android": { "release": { "keystore": "/Users/testuser/AndroidKeyStore", "storePassword": "this_is_your_password", "alias": "androidkeystore", "password" : "this_is_your_password", "keystoreType": "jks" } } }
請依照自己的情況,修改上面的參數值喔~
2. 編譯 release build
一樣用下列的指令建立出 release build:
cordova build --release android
接著就可以看到 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 就是簽章過的版本,可以正常的在 Android 上安裝囉~
參考資料:
- android – How to create a signed APK file using Cordova command line interface? – Stack Overflow
- Android Platform Guide – Apache Cordova