Cordova打包apk與簽名
1.為何要APK要簽名
首先是關於apk簽名,Android程式的安裝是以包名(package name)進行區分的,就是同樣的包名會被認作是同一個程式。這樣就可以進行升級、替換。但是包名是一個可以被檢視的字串,這樣就可能被偽造,然後其他人就可以自己建立一個應用去替代你的應用,結果可想而知。而簽名就是為了防止這樣的情況發生,當你的程式被簽名後安裝,只有同樣包名與簽名的程式才能被替換安裝。而簽名是不可能簡單被偽造的,從而保證了程式的安全性。
一、使用命令列打包簽名apk
- 打包Apk
cordova bulid android //用於測試的打包方式,生成已簽名apk cordova build --release android //生成沒有簽名的apk
第一個命令可以隨意傳送安裝,但是他不能上架。因為只有在絕對同樣的環境下進行打包,才能保證這個apk的簽名相同,意味著你這臺機器必須始終保持正常並且系統和打包工具等不作修改。這明顯是不合理的。所以,我們必須採用生產的方式打包,就是第二個命令,這個命令生成的是一個無簽名的apk,他無法安裝在手機上,必須進行簽名。
- 生成簽名檔案
keytool -genkey -v -keystore demo.keystore -alias demo.keystore -keyalg RSA -validity 20000
keytool是工具名稱; -genkey意味著執行的是生成數字證書操作; -v
-keystore demo.keystore 表示證書的檔名(自己命名); -alias demo.keystore 表示證書的別名(自己命名);
-keyalg RSA 生成金鑰檔案所採用的演算法; -validity 20000 該數字證書的有效期,單位是天;
輸入後會讓你輸入密碼,並回答一些關於你公司和地區的問題,回答完後截圖記錄,防止忘記。
- 為apk簽名
jarsigner -verbose -keystore /yourpath/demo.keystore -signedjar /yourpath/demo_signed.apk /yourpath/demo.apk /yourpath/demo.keystore
jarsigner是工具名稱,
-verbose表示將簽名過程中的詳細資訊打印出來;
/yourpath/ (根據自己的情況配置)相對於當前命令列所在資料夾的位置,可將下列檔案放在同一目錄下;
-keystore /yourpath/demo.keystore 剛剛生成的簽名檔案(上一步驟中的-keystrore的檔名);
-signedjar /yourpath/demo_signed.apk 簽名後的apk名稱
/yourpath/demo.apk 需要簽名的apk
/yourpath/demo.keystore 證書的別名(上一步驟中的-alias別名)。
總結一下就是:這個命令中需要傳入證書名 ,要簽名的 APK ,和證書別名 。簽名過程中需要先後輸入 keystore 和 key 的密碼。命令執行完後,這個 APK 就已經改變了。注意這個過程沒有生成新檔案。
- 壓縮(可不做)
最後我們要用 zipalign
壓縮和優化 APK :
zipalign -v 4 android-apk/android-release-unsigned.apk android-apk/cordova-demo.apk
這一步會生成最終的 APK,我們把它命名為 cordova-demo.apk
。它就是可以直接上傳到應用商店的版本。
這一步不操作也可以。