android 手动签名apk,记录手动签名APK的过程
記錄手動簽名APK的過程
前兩天更新了華為平臺上的APK,被駁回,原因是新APK簽名和老的APK不一致,老用戶安裝會失敗,用命令行安裝會報如下的錯誤:
harlanc@harlancdeMacBook-Pro ~/g/p/bin> adb install -r test.apk
adb: failed to install test.apk: Failure [INSTALL_FAILED_UPDATE_INCOMPATIBLE: Package com.companyname.appname signatures do not match previously installed version; ignoring!]
因此需要更新簽名。
先介紹兩個相關的開源工具:
APK解壓打包工具
為什么需要這個工具下面會說明。
簽名顯示工具
顯示新Apk的簽名
查看Unity配置之后使用的是默認keystore:
出包之后用簽名顯示工具打印簽名如下:
harlanc@harlancdeMacBook-Pro ~/g/G/keystore> /Users/harlanc/github/print-apk-signature/bin/print-apk-signature raw.apk
Verifies
Verified using v1 scheme (JAR signing): true
Verified using v2 scheme (APK Signature Scheme v2): true
Number of signers: 1
Signer #1 certificate DN: C=US, O=Android, CN=Android Debug
Signer #1 certificate SHA-256 digest: 31245f06c6efef970c1023a6ae1f445282d8beef634ed0ae312a83c933b18f47
Signer #1 certificate SHA-1 digest: 10f9c83b94b647da723d4ba19bf7fb621d284166
Signer #1 certificate MD5 digest: 855d771051e9078e47dacc1404eb4b30
Signer #1 key algorithm: RSA
Signer #1 key size (bits): 1024
Signer #1 public key SHA-256 digest: f8b9f8c7c121292f9e339ba6e68a8ba40ab363fd0a2c5b810dec2c4e02c5fdb0
Signer #1 public key SHA-1 digest: 11a91b3d390de784445746367d9e238667f03254
Signer #1 public key MD5 digest: 2f06d158c84e63277357d8e6d0270d0d
確實和上線的APK簽名是不一致的。
使用免費的簽名工具
找到了之前的keystore文件,記起原來的簽名替換是使用的騰訊的一個工具叫做樂固:
不知道是這個工具的原因,還是Android SDK更新的原因,簽名雖然成功,但是簽名打印時會報錯:
harlanc@harlancdeMacBook-Pro ~/g/G/keystore> /Users/harlanc/github/print-apk-signature/bin/print-apk-signature raw_signed_zipalign.apk
DOES NOT VERIFY
ERROR: JAR signer CERT.RSA: JAR signature META-INF/CERT.SF indicates the APK is signed using APK Signature Scheme v2 but no such signature was found. Signature stripped?
手動簽名
下面打算使用手動簽名工具jarsigner,這個工具在JDK下面,具體安裝使用參考下面的帖子:
執行簽名之后會報下面的錯誤:
bash-3.2$ jarsigner -verbose -keystore gvr.keystore -signedjar raw_sign.apk raw.apk android
輸入密鑰庫的密碼短語:
jarsigner: 無法對 jar 進行簽名: java.util.zip.ZipException: invalid entry compressed size (expected 21990 but got 22189 bytes)
經查詢是因為raw.apk里面已經有簽名所致,因此我們要把apk里面的簽名刪掉,我們用apktool先把apk,解壓,刪掉簽名文件夾: META-INF,再打包成新的APK。(比較麻煩,不知道有沒有更好的方法)
解壓APK
apktool d -f raw.apk
刪除簽名
find . -name META-INF
cd 到這個文件夾,然后刪除:
rm -rf META-INF/
打包
apktool b raw new_raw.apk
注意最后生成的APK在解壓APK后的文件夾下面。
最后執行簽名命令
harlanc@harlancdeMacBook-Pro ~/g/G/keystore> jarsigner -verbose -keystore gvr.keystore -signedjar new_raw_sign.apk new_raw.apk android
大功告成。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的android 手动签名apk,记录手动签名APK的过程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 常用android的smali注入代码,
- 下一篇: 斗罗大陆html5游戏在线玩,斗罗大陆H