為什么要簽名
簡單來說,Android系統(tǒng)要求這個做。
Android系統(tǒng)要求每一個Android應(yīng)用程序必須要經(jīng)過數(shù)字簽名才能夠安裝到系統(tǒng)中,也就是說如果一個Android應(yīng)用程序沒有經(jīng)過數(shù)字簽名,是沒有辦法安裝到 系統(tǒng)中的!Android通過數(shù)字簽名來標(biāo)識應(yīng)用程序的作者和在應(yīng)用程序之間建立信任關(guān)系,不是用來決定最終用戶可以安裝哪些應(yīng)用程序。這個數(shù)字簽名由應(yīng) 用程序的作者完成,并不需要權(quán)威的數(shù)字證書簽名機(jī)構(gòu)認(rèn)證,它只是用來讓應(yīng)用程序包自我認(rèn)證的。
Android應(yīng)用程序簽名步驟
工具
- 1 keytool:生成數(shù)字證書,即密鑰,也就是擴(kuò)展名為.keystore的文件(該工具位于jdk安裝路徑的bin目錄下);
- 2 jarsigner:使用數(shù)字證書給apk文件簽名(該工具位于jdk安裝路徑的bin目錄下);
- 3 zipalign:對簽名后的apk進(jìn)行優(yōu)化,提高與Android系統(tǒng)交互的效率(該工具位于Android sdk build-tools>版本號(如23.0.3)目錄下);
生成未經(jīng)簽名的apk
生成方式多種多樣,作者這邊使用Ionic制作的apk,其他小伙伴也應(yīng)該有其他途徑,目的相同——一個未經(jīng)簽名的apk。
三步走
每種工具都用cmd進(jìn)入該工具所在目錄
1.使用keytool工具生成數(shù)字證書
keytool -genkey -alias demo.keystore -keyalg RSA -validity 40000 -keystore demo.keystore
說明:
- keytool是工具名稱,-genkey意味著執(zhí)行的是生成數(shù)字證書操作,-v表示將生成證書的詳細(xì)信息打印出來,顯示在dos窗口中;
- -alias demo.keystore表示證書的別名為“ demo.keystore”,當(dāng)然可以不和上面的文件名一樣;
- -keyalg RSA 表示生成密鑰文件所采用的算法為RSA;
- -validity 40000 表示該數(shù)字證書的有效期為40000天,意味著20000天之后該證書將失效
- -keystore demo.keystore 表示生成的數(shù)字證書的文件名為“demo.keystore ”;
執(zhí)行之后會提示輸入信息,填完就能得到一個demo.keystore
2.使用jarsigner工具為Android應(yīng)用程序簽名
jarsigner -verbose -keystore demo.keystore -signedjar shouhuan_signed.apk shouhuan.apk demo.keystore
說明:
- jarsigner是工具名稱,-verbose表示將簽名過程中的詳細(xì)信息打印出來,顯示在dos窗口中;
- -keystore demo.keystore 表示簽名所使用的數(shù)字證書所在位置,這里沒有寫路徑,表示在當(dāng)前目錄下;
- -signedjar shouhuan_signed.apk shouhuan.apk 表示給shouhuan.apk文件簽名,簽名后的文件名稱為shouhuan_signed.apk;
- 最后面的demo.keystore 表示證書的別名,對應(yīng)于生成數(shù)字證書時-alias參數(shù)后面的名稱
3.使用zipalign工具優(yōu)化已簽名的apk
zipalign -v 4 shouhuan_signed.apk shouhuan_signed_aligned.apk
說明:
- zipalign是工具名稱,-v表示在DOS窗口打印出詳細(xì)的優(yōu)化信息;
- shouhaun_signed.apk shouhuan_signed_aligned.apk 表示對已簽名文件shouhuan_signed.apk進(jìn)行優(yōu)化,優(yōu)化后的文件名為shouhuan_signed_aligned.apk