首先是關於apk簽名,Android程序的安裝是以包名(package name)進行區分的,就是同樣的包名會被認作是同一個程序。這樣就可以進行升級、替換。但是包名是一個可以被查看的字符串,這樣就可能被偽造,然后其他人就可以自己創建一個應用去替代你的應用,結果可想而知。而簽名就是為了防止這樣的情況發生,當你的程序被簽名后安裝,只有同樣包名與簽名的程序才能被替換安裝。而簽名是不可能簡單被偽造的,從而保證了程序的安全性。
打包簽名apk可以通過命令行、eclipse和android studio,這里先介紹命令行和eclipse方式,其他的之后補上。
一、使用命令行打包簽名apk
- 打包apk
cordova bulid android //用於測試的打包方式,生成已簽名apk
cordova build --release android //生成沒有簽名的apk
第一個命令生成的是一個Cordova-debug.apk,很明顯是用來進行本地開發測試使用的,注意這個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 剛剛生成的簽名文件;
-signedjar /yourpath/demo_signed.apk 簽名后的apk名稱
/yourpath/demo.apk 需要簽名的apk
/yourpath/demo.keystore 證書的別名
- 查看apk的簽名
查看簽名是否成功,可將簽名后的文件,后綴名apk的改為zip,解壓。
在該目錄下,輸入如下命令:
keytool -printcert -file META-INF/CERT.RSA
META-INF/TEST.RSA 根據自己的情況配置
輸入命令行后,會出現類似下圖信息
二、使用eclipse打包簽名apk
首先,選擇Export...如下圖:
創建密鑰庫keystore,輸入密鑰庫導出位置和密碼,記住密碼,下次Use existing keystore會用到。
填寫密鑰庫信息,填寫一些apk文件的密碼,使用期限和組織單位的信息。
生成帶簽名的apk文件,到此就結束了。
若有不對之處,請批評指正,謝謝!