參考官方文檔
生成密鑰(證書)文件
keytool -genkey -v -keystore release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000
keytool | 是一個工具命令 |
-v | 指的是將生成證書的詳細信息打印到終端 |
-genkey | 表示生成key |
-keystore release-key.keystore | 指定生成的密鑰文件名,release-key.keystore就是指定的文件名,.keystore是證書的擴展名 |
-alias alias_name | 別名,這里指定別名為alias_name |
-keyalg RSA | 生成密鑰文件所用的算法,這里為RSA |
-validity 10000 | 該密鑰的有效天數 |
-keysize 2048 | 指定2048位的密鑰 |
執行上述命令后,會在當前目錄下生成一個release-key.keystore文件,如果當前目錄下已有同名文件,則執行命令時會報密碼錯誤(密碼與之前創建這個密鑰文件的密碼不同時)
過程中會要求設置keystore密碼和key密碼。(這個文件只需生成一次)
生成的這個證書文件及密碼一定要保存好,丟了的話,后面修改App后,再發布,已安裝了舊版APP的用戶就不能直接升級了,只能重新安裝。
查看證書信息
keytool -list -v -keystore release-key.keystore
然后輸入口令,會顯示此密鑰文件中的相關信息,包括SHA1等
打生產包
ionic cordova build android --release
成功的話會在以下位置生成apk文件
ionic3(項目目錄/platforms/android/build/outputs/apk/android-release-unsigned.apk)
ionic4(項目目錄platforms/android/app/build/outputs/apk/release/app-release-unsigned.apk)
綁定密鑰(證書)文件
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore release-key.keystore apk/android-release-unsigned.apk alias_name
說明:
jarsigner |
工具名稱 |
-verbose | 指的是將生成證書的詳細信息打印出來,顯示在dos窗口 |
-keystore release-key.keystore | 意思是簽名所使用的數字證書的位置,沒有寫路徑則表示在當前目錄下 |
apk/android-release-unsigned.apk | 意思是apk所在的文件位置,注意apk的/符號指的是在名字為apk這個文件的里面,如果不指定目錄默認為當前目錄 |
cordova-demo | 指的是在生成簽名的時候使用的別名 |
-sigalg與-digestalg | 密鑰格式 |
命令完成后這個APK就已經改變
如果出現以下報錯
java.util.zip.ZipException: invalid entry compressed size (expected 13283 but got 12029 bytes)
可以嘗試在命令中加 -signedjar myname-singed.apk
意思就是綁定簽名后生成一個新的APK文件,后面myname-singed.apk是自己起的文件名。
打包簽名注意事項:
打debug包時計算機會默認生成一個簽名自動綁定debug包,所以debug包不可以再加手動簽名,會導致沖突,但是不同的機器上面打出來的debug包生成的簽名都會不同,無法覆蓋安裝,
打release包時需要手動創建簽名文件,隨后將release包與簽名綁定。沒有簽名文件的release包安裝時會提示沒有安全證書,無法安裝apk包。在不同機器上打出來的release包只要是綁定的簽名文件一致,就可以實現覆蓋安裝
Align壓縮優化
zipalign -v 4 原apk文件 壓縮后apk文件,例:
zipalign -v 4 android-release-unsigned.apk MyExrApp.apk