1. 程式人生 > >Android 對apk進行重簽名和檢視簽名(window 和mac)及生成簽名

Android 對apk進行重簽名和檢視簽名(window 和mac)及生成簽名

生成簽名檔案:其實是有很多工具可以做到,這裡不過是想用命令來生成
其命令如下:生成的簽名預設在c盤根目錄下
keytool -genkey -alias aaaa.keystore -keyalg RSA -validity 2000 -keystore newandroid.keystore
備註說明:-alias後面跟著的是別名(android.keystore) -keystore後面跟著的是具體的簽名檔案(及簽名檔案的命名–newandroid.keystore)
當使用這個命令生成後,會有個警告,不符合pkcs12標準,需要消除掉(也可以不消除),使用如下命名:
keytool -importkeystore -srckeystore android.keystore -destkeystore newandroid.keystore -deststoretype pkcs12


將上面的android.keystore簽名遷移到newandroid.keystore中,其各種引數不變。
截圖如下
這裡寫圖片描述

標題實際上說了二個問題:檢視簽名和重簽名
首先說:如果對方給了你.keystore之類的檔案格式的簽名檔案後,實際上時可以檢視相關的簽名的資訊的,只需要在cmd控制檯執行如下命令即可:
直接執行keytool命令時不可行的 需要配置環境,將keytool.exe所在的目錄配置到環境變數中
可以直接下jdk安裝配置,也可以用as自帶的目錄:\jre\bin
命令:keytool -list -v -keystore xxxx.keystore 即可得到如下示意圖資訊:
這裡寫圖片描述

先說一個簡單的檢視apk的簽名信息:
第一步:將apk解壓
第二步:找到META-INF 下的.RSA檔案
第三步:在mac終端或者window控制器上輸入命令:
keytool -printcert -file xxx.RSA回車,即可檢視簽名檔案.將.RSA檔案拖入到-file後面,即可檢視:如下圖
這裡寫圖片描述
其中:MD5的值就是簽名的資訊(已被隱藏)

去掉apk的簽名就比較簡單了:
反編譯apk後 去掉original裡面的META-INF資料夾即可 然後回編譯出來即正常apk

重新簽名就有點複製了:
首先我們必須拿到未簽名的apk 和需要簽名的keystore檔案 以及別名和key password 和 key store password資訊.
最簡單的辦法:使用360簽名工具,但是隻適用於window系統,其簽名工具下載地址如下:

http://www.pc6.com/softview/SoftView_230893.html

但是mac只能使用命令進行簽名
簽名命令如圖下:
使用jarsigner進行簽名
jarsigner -verbose -keystore [您的私鑰存放路徑] -signedjar [簽名後文件存放路徑] [未簽名的檔案路徑] [您的證書名稱]
或者直接把密碼給帶進簽名裡面去,就不用手動輸入密碼庫密碼了:命令如下
jarsigner -verbose -keystore [您的私鑰存放路徑] -storepass 密碼庫密碼 -signedjar [簽名後文件存放路徑] [未簽名的檔案路徑] [您的證書名稱]
或者
jarsigner -verbose -keystore [您的私鑰存放路徑] -signedjar [簽名後文件存放路徑] [未簽名的檔案路徑] [您的證書名稱] -storepass 密碼庫密碼

jarsigner的引數說明,以上的路徑都是我自己電腦裡面的路徑

您的私鑰的存放路徑,指的是 keystore檔案 即路徑為/Users/liangzijishu/Desktop/keys/okGame.jks
簽名後文件存放路徑,指點是簽名後 產生的新的apk檔案 即存放路徑為/Users/liangzijshu/Desktop/abc.apk(並重新命名了)
[未簽名的檔案路徑] 指定要簽名apk檔案的絕對路徑,也就是別人給你的未簽名的apk檔案 /Users/liangzijishu/Desktop/天涯明月刀.apk
[您的證書名稱] 是指您建立金鑰時您設定的證書名稱 即倉庫的別名 即sihaoGame
密碼庫密碼是指 倉庫密碼
命令如下圖:
這裡寫圖片描述

同時輸入的金鑰庫密碼短語:就是key store password(此時不會顯示密碼 直接輸入 回車即可)

可能會報的錯如下:
第一:jarsigner 錯誤: java.lang.RuntimeException: 金鑰庫載入: /Users/liangzijishu/okGame.jks(No such file or directory)

keystroe的拓展名 可以為.jks(或者是.store  未驗證)  但是不能為.txt 否則會報錯誤 

第二種報錯:
jarsigner: 找不到kaoyan_keystore的證書鏈
即:由於證書名稱寫錯了,證書名稱即Alias(你設定的別名)

第三種報錯:
jarsigner 只能使用一種別名
即在簽名的時候 即某個路徑下面出現了空格 例如:C:\Users\Administrator\qyysnew new\dist
則qyysnew new中間出現了空格 實際上是一個目錄

第四種報錯: Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES: Failed to collect certificates from /data/app/vmdl1272757617.tmp/base.apk: META-INF/CERT.SF indicates /data/app/vmdl1272757617.tmp/base.apk is signed using APK Signature Scheme v2, but no such signature was found. Signature stripped?]
簽名後安裝時出現此問題:是因為原來的apk帶有v2簽名,即首先需要去掉v2簽名,然後再簽名即可
以上資訊:還要感謝我的好盆友及一位博主:
博主部落格如下:
https://www.jianshu.com/p/dbcfff997ccb

手動對齊操作:
手動對齊apk:zipalign 4 unaligned.apk aligned.apk (或者zipalign -v 4 unaligned.apk aligned.apk)
驗證是否對齊:zipalign -c -v 4 application.apk。

以上:非常感謝