為什么要簽名
簡單來說袒餐,Android系統(tǒng)要求這個做渺鹦。
Android系統(tǒng)要求每一個Android應(yīng)用程序必須要經(jīng)過數(shù)字簽名才能夠安裝到系統(tǒng)中,也就是說如果一個Android應(yīng)用程序沒有經(jīng)過數(shù)字簽名舌稀,是沒有辦法安裝到 系統(tǒng)中的硬萍!Android通過數(shù)字簽名來標識應(yīng)用程序的作者和在應(yīng)用程序之間建立信任關(guān)系,不是用來決定最終用戶可以安裝哪些應(yīng)用程序虎锚。這個數(shù)字簽名由應(yīng) 用程序的作者完成硫痰,并不需要權(quán)威的數(shù)字證書簽名機構(gòu)認證,它只是用來讓應(yīng)用程序包自我認證的窜护。
Android應(yīng)用程序簽名步驟
工具
- 1 keytool:生成數(shù)字證書效斑,即密鑰,也就是擴展名為.keystore的文件(該工具位于jdk安裝路徑的bin目錄下)柱徙;
- 2 jarsigner:使用數(shù)字證書給apk文件簽名(該工具位于jdk安裝路徑的bin目錄下)缓屠;
- 3 zipalign:對簽名后的apk進行優(yōu)化,提高與Android系統(tǒng)交互的效率(該工具位于Android sdk build-tools>版本號(如23.0.3)目錄下)护侮;
生成未經(jīng)簽名的apk
生成方式多種多樣敌完,作者這邊使用Ionic制作的apk,其他小伙伴也應(yīng)該有其他途徑羊初,目的相同——一個未經(jīng)簽名的apk滨溉。
三步走
每種工具都用cmd進入該工具所在目錄
1.使用keytool工具生成數(shù)字證書
keytool -genkey -alias demo.keystore -keyalg RSA -validity 40000 -keystore demo.keystore
說明:
- keytool是工具名稱,-genkey意味著執(zhí)行的是生成數(shù)字證書操作,-v表示將生成證書的詳細信息打印出來晦攒,顯示在dos窗口中禽炬;
- -alias demo.keystore表示證書的別名為“ demo.keystore”,當然可以不和上面的文件名一樣勤家;
- -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表示將簽名過程中的詳細信息打印出來讼庇,顯示在dos窗口中绎巨;
- -keystore demo.keystore 表示簽名所使用的數(shù)字證書所在位置,這里沒有寫路徑蠕啄,表示在當前目錄下场勤;
- -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窗口打印出詳細的優(yōu)化信息哈街;
- shouhaun_signed.apk shouhuan_signed_aligned.apk 表示對已簽名文件shouhuan_signed.apk進行優(yōu)化留瞳,優(yōu)化后的文件名為shouhuan_signed_aligned.apk