1.使用keytool 生成數(shù)字證書
keytool -genkey -v -keystore myApp.keystore -alias myApp.keystore -keyalg RSA -validity 36500
- keytool是工具名稱-genkey意味著執(zhí)行的是生成數(shù)字證書操作
- -v表示將生成證書的詳細(xì)信息打印出來少态,顯示在dos窗口中
- -keystore myApp.keystore表示生成的數(shù)字證書的文件名為“myApp.keystore”(myApp可以取自己的名字)
- -alias myApp.keystore表示證書的別名為“myApp.keystore”,可以不和上面的文件名一樣
- -keyalg RSA表示生成密鑰文件所采用的算法為RSA
- -validity 36500 表示該數(shù)字證書的有效期為36500天易遣,意味著36500天之后該證書將失效
執(zhí)行該命令過程會要求輸入密鑰口令以及其他信息彼妻,看著填就行。
2.使用jarsigner為app簽名
jarsigner -verbose -keystore myApp.keystore -signedjar /Users/*****/myApp.apk /Users/*******/android-release-unsigned.apk myApp.keystore
- -verbose 表示將簽名過程中的詳細(xì)信息打印出來,顯示在控制臺窗口中
- -keystore myApp.keystore 表示簽名所使用的數(shù)字證書所在位置
-signedjar (后面的路徑是你要簽名apk的路徑)表示給Apk工程目錄下的android-armv7-release-unsigned.apk文件簽名侨歉,簽名后的文件為該路徑下的myApp.apk - myApp.keystore 表示證書的別名屋摇,對應(yīng)于生成數(shù)字證書時-alias參數(shù)后面的名稱
3.由于ionic cordova build android命令打包出來的apk文件已經(jīng)被默認(rèn)的debug.keystore文件簽名過了,所以在用以上命令進行簽名的時候幽邓。會報這樣的錯誤
jarsigner: 無法對 jar 進行簽名: java.util.zip.ZipException: invalid entry compressed size (expected 21213 but got 20064 bytes)
這是由于對一個已經(jīng)簽名了的apk進行簽名的原因炮温,網(wǎng)上的一些方法,比如改后綴名等等牵舵,我自己測試柒啤,沒有生效
后來,我執(zhí)行ionic cordova build android --release,對這個命令生成的apk進行簽名畸颅,才可以正常簽担巩,大概是這個apk沒有默認(rèn)的簽名吧。
4.使用zipalign工具優(yōu)化已簽名的apk(非必須但建議這么做)
zipalign -v 4 notsigned.apk signed.apk
說明:
- zipalign是工具名稱没炒,-v表示在DOS窗口打印出詳細(xì)的優(yōu)化信息;
- notsigned.apk signed.apk 表示對已簽名文件notsigned.apk進行優(yōu)化涛癌,優(yōu)化后的文件名為signed.apk
如果命令不生效,需要cd到zipalign所在的文件夾地址窥浪,可執(zhí)行一下命令
find ~/Library/Android/sdk/build-tools -name "zipalign"
然后執(zhí)行./zipalign -v 4 notsigned.apk signed.apk,即可對文件進行簽名,但是我對debug.apk如此操作的時候笛丙,每次簽名都失敗奈籽,但是對ionic cordova build android --release 生成的apk進行簽名瑟曲,可以簽名成功,但是也不能正常安裝運行。
最后棕硫,我用的3中所說的方法,簽名成功了藤树。
參考博文:https://blog.csdn.net/xqq580231/article/details/78930497