Android apk簽名(二)

發佈應用之前,需要加固、打渠道包。而使用梆梆加固 和 360加固後,發現已簽名的apk的簽名掉了,這時就需要我們對apk進行二次簽名。當然,項目中使用了一個打包工具,可以對加固後的apk同時進行簽名 和 多渠道打包。(ProtectedApkResignerForWalle-master)

這裏不講工具,只講如何對已有的apk進行簽名驗證。

之前介紹過一種方法如何對apk進行簽名認證。

jarsigner -keystore **庫名 xxx.apk **別名

上面這個命令支持簽名,但是隻支持v1簽名,而且要想兼容低版本還需要修改算法,比較麻煩。所以,這裏再介紹一種方法。

首先,在android studio中Build--->Generate Signed APK...

 

接着,選擇對應的keystore進行簽名,即可打出我們需要的帶簽名的apk。

然後,對該apk進行加固,但是加固後的apk文件簽名掉了,也就是說需要對加固後的apk進行二次簽名,否則不能正常安裝。

Android sdk中提供了命令apksigner可以對apk進行簽名(默認同時使用V1和V2簽名)

這個命令存在於sdk的build-tools文件夾

 

這麼多版本,從中選擇一個點進去即可

如上圖所示,可以看到apksigner.bat命令。

下面,我選擇一個本地的一個apk文件:app_v1.0.apk

先對其進行簽名驗證,看其是否已簽名。如果未簽名,對其簽名,最後再次驗證簽名。

(其實最簡單的驗證簽名的方法就是安裝這個apk,因爲未簽名的apk是無法安裝的,這裏我們使用命令來操作)

1.簽名驗證

備註:(keytool -printcert -jarfile xxx.apk 這種方式可以驗證簽名,但是隻支持v1簽名校驗

命令:apksigner verify -v --print-certs apk完整路徑

首先,要使用這個命令,我們需要在dos控制檯進入這個目錄

然後,使用: apksigner verify -v --print-certs C:\seven\app_v1.0.apk

可以看到,這時的apk未簽名。

2.簽名

命令:apksigner sign --ks **庫名 --ks-key-alias **別名 apk完整路徑

在控制檯使用命令:

apksigner sign --ks C:\seven\keystore\daihoubang.keystore --ks-key-alias daihoubang C:\seven\app_v1.0.apk

回車,會提示輸入keystore密碼

輸入密碼回車後

這時的apk已經被簽名了。(從修改日期也可以看出來,時間變了,說明apk被修改過)

3.再次驗證簽名

可以發現此時的apk已經簽名了。然後就可以成功安裝這個apk了。