Android使用包名作為唯一標識,當在同一台手機安裝兩個包名相同的應用,后安裝的應用就會覆蓋前面的應用(簽名相同的情況下)。
簽名有兩個主要作用:
1.確定發布者身份。由於應用開發者可以通過使用相同的包名來替換已經安裝的程序,因此使用簽名可以避免發生這種情況。
2.確保應用的完整性。簽名會對應用包中的每個文件進行處理,從而確保程序包中的文件不會被替換。
**在開發、調試階段,AS會自動生成調試證書進行簽名。當應用發布時,必須使用合適的數字證書對應用進行簽名。
⒈使用AS對Android應用進行簽名
1.單擊AS主菜單中的Build => “Generate Signed Bundle / APK”
2.此時系統會提示你生成"Android App Bundel",還是生成“APK”,其中Android App Bundel時Google新推出的動態發布方案,這種發布方式的App更小、安裝更快,但目前最大的問題時僅支持Google Play(Google應用商店),國內由於“谷歌服務不給力”的原因經常404,因此我們選擇“APK”。
3.選擇已有的還是新建,我們選擇新建,“Create new ”
4.填寫完成后選擇“OK”后在新窗口中選擇剛剛創建的數字證書。
5.單擊“Next”按鈕,在新的對話框中選擇APK安裝包的存儲路徑及簽名版本,V1版本只對JAR包簽名,V2版本對整個APK簽名,建議選擇V2版本。
6.選擇“Finish”后簽名完成。
⒉使用Android命令對APK簽名
如果不想借助AS對Android應用進行簽名或有時候需要對一個“未簽名”的APK進行簽名,則可通過"命令"對Android應用進行手動簽名。
1.創建Key store庫,使用JDK bin目錄下的keytool.exe工具來生成數字證書。
keytool -genkeypair -alias Coreqi -keyalg RSA -validity 400 -keystore fanqi.jks
選項說明:
-genkeypair:指定生成數字證書
-alias:指定生成數字證書的別名
-keyalg:指定生成數字證書的算法。使用RSA算法
-validity:指定生成數字證書的有效期
-keystore:指定生成數字證書的存儲路徑
之后,輸入證書的詳細信息即可。
2.使用Android的apksigner.bat命令對未簽名的APK安裝包進行簽名,apksigner.bat位於Android SDK的build-tools目錄下。apksigner命令就是V2版本的簽名(API29為V3)。
****
可以通過AS的Build =》 Build Bundle(s) / APK(s) =》 Build APK(s)來生成未簽名的APK
在命令行窗口輸入以下命令:
apksigner sign --ks C:\Users\fanqi\fanqi.jks --ks-key-alias Coreqi --out C:\Users\fanqi\app_sign.apk C:\Users\fanqi\AndroidStudioProjects\MyApplication\app\build\outputs\apk\debug\app-debug.apk
選項說明:
sign:指定使用apksigner命令執行簽名
--ks:指定數字證書的存儲路徑
--ks-key-alias:指定數字證書的別名
--out 文件路徑:指定簽名后的APK文件路徑及文件名
最后一個參數則代表未簽名的APK文件
輸入命令后回車輸入數字證書的密碼,如果簽名成功,該命令不會有任何提示。
apksigner還提供了verify子命令來驗證簽名是否有效。
在命令行窗口輸入以下命令對APK安裝包的簽名狀態執行檢查
apksigner verify -v C:\Users\fanqi\app_sign.apk
上面的輸出提示用戶,簽名檢查已經得到確定,其中V1版本的簽名為false,V2版本的簽名為false,V3版本的簽名為true。