弄懂 APK 簽名

1. apksigner

google 官方提供的 apk 文件簽名工具。支持 V1 和 V2 簽名規則。shell

  1. V1是對 apk 中每一個文件進行簽名校驗。使用 V1 規則的 apk 在解壓以後二次打包壓縮後能夠安裝。
  2. V2是在 V1 的基礎上,對 apk 文件進行校驗。所以,使用 V2 規則的 apk 在解壓以後二次打包壓縮後沒法安裝。

所以,在簽名時,只能選擇 V1 或 V1+V2,不能只選擇 V2 。bash

1.1. 簽名

使用命令 apksigner sign 對 apk 文件進行簽名。app

經常使用參數有:ide

--in 指定待簽名 apk 文件的路徑。
--out 指定簽名後的 apk 文件路徑。能夠同 --in 同樣,能夠不用。工具

能夠在所有命令的最後指定待簽名的 apk 路徑。--in --out 即都指向該路徑。測試

--v1-signing-enabled 使用 true false 指定是否使用 v1 規則簽名。
--v2-signing-enabled 使用 true false 指定是否使用 v2 規則簽名。google

--debuggable-apk-permitted 使用 true false 指定是否容許對測試 apk 文件進行簽名,默認是容許。可是官方不建議使用生產簽名文件對測試 apk 文件進行簽名。spa

--ks 指定 keystore 的路徑。
--ks-pass 指定 keystore 的密碼。如: pass:password。 password 是簽名文件密碼。
--ks-key-alias 指定使用的簽名文件別名,一般一個簽名文件能夠包含多個別名。簽名文件中只包含一個別名時,能夠不使用。
--key-pass 指定別名 key 的密碼。如: pass:password。 password 是簽名文件密碼。debug

以上是使用 keystore 對 apk 簽名。apksigner 還支持更多種方式,如:私鑰文件、JCA Providers 對 apk 簽名。日誌

apksigner sign --ks debug.keystore 
複製代碼

1.2. 校驗

使用 apksigner verify 校驗已簽名的 apk 文件。包括查看簽名方式和使用的證書信息。

經常使用參數有:

-v 顯示簽名詳情,是否使用 v1 、v2 簽名。

--in 指定待校驗的 apk 文件路徑。當 apk 路徑放在命令末尾時,此參數能夠省略。

--print-certs 顯示 apk 文件中包含的簽名文件證書信息。

# 示例 1
apksigner verify --in app-release.apk -v -print-certs
# 示例 2
apksigner verify -v -print-certs app-release.apk
複製代碼

2. jarsigner

是 jdk 提供的對 jar 文件的簽名工具。

2.1. 簽名

使用命令 jarsigner [options] jar-file alias 對 apk 文件 簽名 。其中 jar-file 對應 apk 文件路徑,alias 對應 簽名文件中的別名。 options 經常使用參數以下:

-keystore 指定使用的簽名文件的路徑。

-storepass 指定使用簽名文件的密碼。

-keypass 指定使用 alias 對應的密碼。能夠不使用,執行時手動輸入。

-signedjar 指定簽名後的 apk 的路徑。

-verbose 輸出詳細的簽名過程日誌。

因爲沒有指定被簽名 apk 文件的路徑和使用的簽名文件別名的參數,所以須要將這兩個參數放在命令的最後。

# 示例,如需添加 -verbose,請放在test.apk以前
jarsigner -keystore keystore -storepass password -signedjar signed.apk test.apk keyalias.
複製代碼

2.2. 校驗

使用命令 jarsigner -verify [options] jar-file [alias...]

-verbose 輸出詳細的簽名信息。 -certs 輸出每一個文件使用的簽名證書。

# 示例
jarsigner -verify -verbose -certs signed.apk
複製代碼

用上述命令只能檢查 apk 中每一個文件的簽名狀況,並不能獲知使用的簽名文件具體信息。建議使用 apksigner 命令或 keytool 命令。

keytool -printcert -jarfile test.apk 
複製代碼

3. zipalign

是 zip 壓縮包的一個對齊工具。對齊以後能夠減小 app 運行時的內存消耗。

# 對齊 apk 文件,並輸出信息
zipalign -v 4 in.apk out.apk
# 檢查 apk 文件的對齊信息
zipalign -c -v 4 out.apk
複製代碼

因爲 zipalign 命令是對 apk 文件進行修改,所以不適用於使用 V2 簽名機制簽名過的 apk 文件。所以建議先對齊,再簽名。

相關文章
相關標籤/搜索