當我們需要修改已經打包好的apk中的某個文件時,比如改下圖標,我們勢必要采用反編譯apk,改文件,重編譯apk,重簽名才行,參考:https://www.cnblogs.com/zndxall/p/9628475.html
但是如果我們不需要改apk里的東西呢,只是想重新簽名一下,比如我們會有這樣的場景需要驗證,apk只能是我們自己的簽名才能安裝,如果其他人換用其他簽名就會安裝失敗並報錯簽名不可用。這個時候我們只需要重新簽名apk就可以了,如果還是采用反編譯,刪META-INF,重編譯,再簽名,一個apk,我們可以忍受,多個apk呢,就有點吃力了。這個時候,我們可以采用另一種方式簽名:就是把key轉化成pk8和pem文件,然后一條命令就可以完成重簽名了
過程如下:
1.keystore文件轉化為pk8+pem
keytool -importkeystore -srckeystore my.keystore -destkeystore tmp.p12 -srcstoretype JKS -deststoretype PKCS12
2. 將PKCS12 dump成pem
openssl pkcs12 -in tmp.p12 -nodes -out tmp.rsa.pem
tmp.rsa.pem 是文本格式可以直接查看。
打開文本可以看到私鑰(PRIVATE KEY )和證書(CERTIFICATE);
復制“BEGIN CERTIFICATE” “END CERTIFICATE” 到(新建個文件) cert.x509.pem
復制 “BEGIN RSA PRIVATE KEY” “END RSA PRIVATE KEY” 到(同上) private.rsa.pem
cert.x509.pem 文件即是我們最后需要的證書文件
3.生成pk8格式的私鑰
openssl pkcs8 -topk8 -outform DER -in private.rsa.pem -inform PEM -out private.pk8 -nocrypt
最后的cert.x509.pem private.pk8即是我們最后需要的文件。
*備注:
-nocrypt 這個參數設定key加密 如果設置了這個參數 下面簽名 只要證書+key 不需要密碼了 如果加密 應該
openssl pkcs8 -topk8 -outform
DER -in private.rsa.pem -inform PEM -out private.pk8 接下來輸入密碼*
4.用法
java -jar signapk.jar cert.x509.pem private.pk8 unsigned.apk signed.apk