Android應用程序打包簽名、加固、二次打包(圖形/命令行)

前言

Android應用程序在編程開發完成后,需要進行簽名打包成相應的APK文件,這就是我們平常網上下載安裝的Android應用程序安裝包。

APK的全稱是Android Package,即Android安裝包。APK是類似Symbian Sis或Sisx的文件格式。通過將APK文件直接傳到Android虛擬機或者Android設備中執行即可安裝。APK文件和Sis一樣,把Android SDK編譯的工程打包成一個安裝程序文件,格式為apk。APK文件其實是zip格式的壓縮包,但后綴被改成了apk,通過解壓縮軟件解壓后,可以看到Dex文件。

應用簽名的意義

1. 保障應用程序開發者的合法權益
在對應用程序簽名后,即表示此應用程序是簽名人所開發的,對此程序具有所有權。
2. 預防應用程序替換
應用程序簽名可以防止部分人通過使用相同的Package Name來混淆替換已經安裝的程序,從而出現一些惡意篡改。
3. 保證應用程序版本的一致性
一般應用程序都會有更新,即版本的升級。如果應用程序的簽名不一致,是無法進行更新替代的。所以,應用程序簽名是保證當前應用程序順利進行更新安裝的前提。


官網

簽名打包圖形化過程:

步驟一 進入簽名打包界面
打開Android Studio,依次選擇菜單欄上“Build”->“Generate Signed APK...”,這樣就進入了Android程序簽名打包界面。

image.png

新建Key文件

image.png

如果沒有key文件:

image.png

根據中文提示,填寫對應內容創建相應的Key文件,JACK的機器人相應的路徑下創了一個“MyKey.jks”Key文件。
步驟三 導入相應的Key文件簽名打包應用
創建完Key文件后,會直接返回之前的Key文件導入界面,默認導入當前創建的Key文件。

image.png

“Next”后,確認APK文件的導出路徑及“Build Type”。
找到剛剛創建的APK文件,這個就是可以直接安裝在Android系統中的應用程序安裝包了。

image.png

從命令行構建和簽署您的應用(不需要 Android Studio 也可以簽署您的應用)

步驟一首先使用 keytool生成一個私鑰

keytool -genkey -v -keystore my-release-key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias my-alias

本示例會提示您輸入密鑰庫和密鑰的密碼,并為您的密鑰提供“Distinguished Name”字段。隨后,它生成一個名為 my-release-key.jks 的密鑰庫文件,將它保存在當前目錄中(您可以根據需要移動它)。此密鑰庫包含一個有效期為 10,000 天的密鑰。
image.png

步驟二:選擇一種簽名方式

  • 1.使用jarsigner簽名

jarsigner -verbose -keystore my-release-key.jks -signedjar demo_signed.apk demo.apk alias_name

有的版本可能灰提示錯誤,此時參數加些東西:-digestalg SHA1 -sigalg MD5withRSA

jarsigner -verbose -digestalg SHA1 -sigalg MD5withRSA -keystore my-release-key.jks -signedjar demo_signed.apk demo.apk alias_name

主要的四個參數:keystore文件,簽名后apk文件的絕對路徑,沒簽名的apk的絕對路徑 ,keystore的別名。

image.png
  • 2.使用apksigner簽名

apksigner sign --ks my-release-key.jks my-app.apk

image.png
image.png
  • 3.配置 Gradle 以簽署您的 APK

image.png

如果要單獨打某個渠道的release包:./gradlew assemble某渠道release


關于加固

為什么我們的程序要進行加固,如果簽名打包之后不加固,很容易被別人用反編譯的軟件把我們的程序代碼提取出來,所以現在幾乎所有的程序都會加固。雖然加固的apk也會被反編譯出來(但過程比較繁瑣),想要代碼更加安全還需要進行代碼混淆等。

需要說明的是加固要求的apk是需要帶簽名的。

image.png

所以我們要先打包簽名,然后去加固,但加固時又會把我們的簽名擦去,即加固之后的apk又是沒有簽名的,所以我們要進行二次簽名(就用上文的命令行的前兩者之一即可)。

所以我們一般的流程是打包簽名--加固(網址:http://jiagu.360.cn/)--二次加固(用命令行)其他:

mac獲取簽名的SHA1和MD5值:https://blog.csdn.net/wei18359100306/article/details/51504886

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容