一:爲什麼要對Apk進行數字簽名
開發者通過開發工具編譯生成的應用程序以.apk命名,藉助開發工具、第三方平臺或adb命令將其安裝到安卓手機上運行或更新。在安裝的時候系統會檢測apk是否被簽名,如果沒有簽名則無法安裝;爲防止其他人通過使用相同的包名混淆替換已安裝的程序,在發佈的時候需要進行唯一的數字簽名,保證每次版本的一致性。
debug版本的apk,使用系統默認的簽名文件debug.keystore,別名= androiddebugkey,密碼=android,安裝運行時已經過簽名
二:Apk簽名方式
- 使用AndroidStudio工具生成/引用簽名文件
Build -- Generate Signed APK -- Create new key store
Key store path:簽名文件存放的路徑
Password:密鑰庫密碼
Key - Alias :別名
key - Password :密鑰密碼(可以與密鑰庫密碼一致)
.............................
創建完成後可以直接下一步進行選擇版本進行簽名(如果簽名文件存在則忽略以上步驟直接進行下一步):
- 使用工具自動生成signingConfigs中的簽名信息
按步驟操作即可自動配置,無需手寫
- 命令行生成簽名文件並打包帶簽名的apk文件
在項目根目錄下生成簽名文件dd.jks
-genkeypair:指定生成數字簽名;
-alias:指定生成數字簽名的別名;
-keyalg:指定生成數字簽名的算法。使用RSA算法。
-validity:指定生成數字簽名的有效期;
-keystore:指定生成數字簽名的存儲路徑。
使用命令行對Apk包簽名,在根目錄下生成簽名的apk文件:
-verbose:指定生成詳細輸出;
-keystore:指定數字證書的存儲路徑;
-signedjar:該選項的3個參數分別爲簽名後的APK包、未簽名的APK包、數字證書的別名。
- build.gradle中進行配置簽名信息
除了可以用工具自己生成也可以在build.gradle中直接配置,配置信息如下:
可以看到,文件信息以明文的形式顯示,爲了避免將簽名信息提交,可以在配置文件local.properties或gradle.properties中進行配置,區別是在gradle.properties中配置簽名信息後,build.gradle中可以直接引用,而local或自定義的properties文件則需要讀取並獲取到簽名信息,properties中的配置如下:
1:local.properties:
2:gradle.properties:
- 讀取環境變量中的簽名信息,隱藏簽名
簽名文件信息配置到環境變量中,然後build.gradle中進行讀取,windows10配置如下:
build.gradle中的引用,配置完成後重啓下開發工具不然編譯的時候找不到系統變量,通過System.getenv(變量名)獲取: