① Android中APK簽名工具之jarsigner和apksigner詳解
轉自 https://www.cnblogs.com/slysky/p/9780015.html
一.工具介紹
jarsigner是JDK提供的針對jar包簽名的通用工具,
位於JDK/bin/jarsigner.exe
apksigner是Google官方提供的針對Android apk簽名及驗證的專用工具,
位於Android SDK/build-tools/SDK版本/apksigner.bat
不管是apk包,還是jar包,本質都是zip格式的壓縮包,所以它們的簽名過程都差不多(僅限V1簽名),
以上兩個工具都可以對Android apk包進行簽名.
1.V1和V2簽名的區別
在Android Studio中點擊菜單 Build->Generate signed apk... 打包簽名有兩種簽名選項 V1(Jar Signature) V2(Full APK Signature),
從Android 7.0開始, 谷歌增加新簽名方案 V2 Scheme (APK Signature);
但Android 7.0以下版本, 只能用舊簽名方案 V1 scheme (JAR signing)
V1簽名此碰:
V2簽名:
V2簽名優點很明顯:
注意: apksigner工具默認同時使用V1和V2簽名,以兼容Android 7.0以下版本
2.zipalign和V2簽名
位於Android SDK/build-tools/SDK版本/zipalign.exe
zipalign 是對zip包對齊的工具,使APK包內未壓縮的數據有序排列對齊,從而減少APP運行時內存消耗
zipalign -v 4 in.apk out.apk //4位元組對齊優化
zipalign -c -v 4 in.apk //檢查APK是否對齊
zipalign可以在V1簽名後執行
但zipalign不能在V2簽名後執行,只能在V2簽名之前執行!!!
二.簽名步驟
1.生成密鑰對(已有密森如談鑰庫,可忽略)
Android Studio在Debug時橡緩,對App簽名都會使用一個默認的密鑰庫:
1.生成密鑰對
進入JDK/bin, 輸入命令
參數:
提示: 可重復使用此條命令,在同一密鑰庫中創建多條密鑰對
例如: 在debug.keystore中新增一對密鑰,別名是release
keytool -genkeypair -keystore debug.keystore -alias release -validity 30000
2.查看密鑰庫
進入JDK/bin, 輸入命令
keytool -list -v -keystore 密鑰庫名
參數:
例如:
keytool -list -v -keystore debug.keystore
現在debug.keystore密鑰庫中有兩對密鑰, 別名分別是androiddebugkey release
2.簽名
1.方法一(jarsigner,只支持V1簽名)
進入JDK/bin, 輸入命令
從JDK7開始, jarsigner默認演算法是SHA256, 但Android 4.2以下不支持該演算法,
所以需要修改演算法, 添加參數 -digestalg SHA1 -sigalg SHA1withRSA
參數:
例如:
用JDK7及以上jarsigner簽名,不支持Android 4.2 以下
jarsigner -keystore debug.keystore MyApp.apk androiddebugkey
用JDK7及以上jarsigner簽名,兼容Android 4.2 以下
jarsigner -keystore debug.keystore -digestalg SHA1 -sigalg SHA1withRSA MyApp.apk androiddebugkey
2.方法二(apksigner,默認同時使用V1和V2簽名)
進入Android SDK/build-tools/SDK版本, 輸入命令
若密鑰庫中有多個密鑰對,則必須指定密鑰別名
禁用V2簽名
apksigner sign --v2-signing-enabled false --ks 密鑰庫名 xxx.apk
參數:
例如:
在debug.keystore密鑰庫只有一個密鑰對
apksigner sign --ks debug.keystore MyApp.apk
在debug.keystore密鑰庫中有多個密鑰對,所以必須指定密鑰別名
apksigner sign --ks debug.keystore --ks-key-alias androiddebugkey MyApp.apk
3.簽名驗證
1.方法一(keytool,只支持V1簽名校驗)
進入JDK/bin, 輸入命令
keytool -printcert -jarfile MyApp.apk (顯示簽名證書信息)
參數:
2.方法二(apksigner,支持V1和V2簽名校驗)
進入Android SDK/build-tools/SDK版本, 輸入命令
apksigner verify -v --print-certs xxx.apk
參數:
例如:
apksigner verify -v MyApp.apk
② apk簽名是什麼意思
apk是安卓應用軟體包,apk簽名是軟體包在安裝的時候進行的安全性驗證機制。
這種簽名機制目的是為了確保Apk來源的真實性,以及Apk沒有被第三方篡改。開發者通過對Apk進行簽名:在Apk中寫入一個「指紋」。指紋寫入以後,Apk中有任何修改,都會導致這個指紋無效,Android系統在安裝Apk進行簽名校驗時就會不通過,從而保證了安全性。
(2)apk簽名工具簽名擴展閱讀:
1、APK的格式定義
在Android平台中,dalvikvm的執行文件被打包為apk格式,最終運行時載入器會解壓,然後獲取編譯後的androidmanifest.xml文件中的permission分支相關的安全訪問,但仍然存在很多安全限制,如果你將apk文件傳到/system/app文件夾下,會發現執行是不受限制的。安裝的文件可能不是這個文件夾,而在androidrom中,系統的apk文件默認會放入這個文件夾,它們擁有著root許可權。
2、APK的開發環境
Android是一個基於Java的開發環境,Google也在API文檔的書寫和樣例的提供上做了很出色的工作。
3、獲取SDK
下載並安裝android的SDK[軟體開發套件],這套SDK主要包括有核心庫文件,一個模擬器,開發工具和一些示範的樣例文件。推薦使用Eclipse 和androideclipse 擴展。如果只是使用android,Eclipse IDE就已經足夠了,但如果是第一次開衡含發Java應用,建物搏議下載完整的Java SE 開發工具 (JDK) 因為它包括簽發應用程序所需要的工具。
4、APK應用架構
android應用架構很關鍵,如果不學習它,設計出來的游戲將是一種很難修復bug的產品。 需要了解應用程序、活動、Intents以及它們是如何互相聯系交互的,Google在這兒提供了良好的信息架構。真正重要的是,要理解為什麼在設計的游戲中,需要不止一個的活動進程,以及如何設計一個用戶體驗良好的游戲。這些都應當配合到應用的生命周期中。
5、APK應用的生命周期
應用的生命周期是由Android OS操作系統進行管理的,活動進程都將作為系統命令進行創建,正確處理這些事件對一個應用程序來說是極為重要的,因為終端用戶不會知道什麼是正確的。最好在開始設計游戲之前搞明白這些,因為這有助於節省調試時間以及避免代價高昂的重新設計。
對大多數應用而言,默認設置即可開始工作,但對游戲而言,可能需要調整單態實例的信號為打開。在默認情況下,Android會新建一個活動實例進程,因為它認為這是比較合適的,而游戲,可能只希望有一個活動的實例進程,這有一點兒影響,它需要了解一些系統狀態的管理。
參罩攔祥考資料來源:網路-apk
③ apk簽名工具
對apk進行反編譯並修宏做改後,需要對重新打包的apk進行簽名。
秘鑰生成工具——keytool
路徑:jdk/bin/keytool.exe
生成秘鑰: keytool -genkeypair -keystore test.keystore -alias test -validity 10 -keyalg RSA
其中-validity指定有效期天數,-keyalg指定演算法
查看秘埋絕稿鑰信息: keytool -list -v -keystore test.keystore
JDK簽名工具——jarsigner
僅支持V1簽名
路徑彎孝:jdk/bin/jarsigner.exe
命令: jarsigner -keystore test.keystore test.apk testkey
apk簽名工具——apksigner
默認開啟V1和V2簽名
路徑:AndroidSDK/build-tools/28.0.0/apksigner.bat
命令: apksigner sign --ks xx.keystore --ks-key-alias testkey test.apk
④ 如何為apk/zip文件簽名
我們在接觸文件中會遇到要為apk/zip文件簽名的情況,而很多人不知道如何簽名,在這里我給大家分享個簡易版的為apk/zip文件簽名旁賣的方法。
電腦
rom製作工具
apk/zip文件
我們要把需要簽名的zip/apk文件下載好放在電腦里相對應位置。
然後,打開工具,把我們需要簽名的文件添加進去,點擊開始簽扒啟畝名。
然後等待幾秒簽名成功的話就可以了,簽名成春森功後會自動打開文件所在目錄。
⑤ 如何對apk進行簽名
給apk文件簽名主要分三步:
1、創建證書
2、簽名
3、優化(可選)
1)使用jdk的keytool工具生成簽名用的證書> keytool -genkey -v -alias CERT -keyalg RSA -keysize 2048 -validity 10000 -keystoreCERT.keystore 創建過程需要輸入一些標識信息和密碼,一些重要的參數值說明如下(根據自己的需要要進行相應的修改): CERT.keystore ---- 證書保存的文件名 CERT ---- 證書的別名 10000 ---- 10000天的有效期 2048 ---- 默認為1024 bits,Android 建議使用2048 bits或更高其他的詳細信息可以使用keytool -help查看幫助 證書生成後使用如下命令可以查看證書的信息:> keytool -list -alias CERT -keystore CERT.keystore
2)使用jdk的jarsigner工具對apk文件簽名> jarsigner -verbose -keystore CERT.keystore to_sign.apk CERT 簽名過程需要輸入證書的密碼,一些重要的參數值說明如下(根據自己的需要要進行相應的修改): CERT.keystore ---- 證書保存的文件名 CERT ---- 證書的別名 待簽名的apk文件根根目錄下如果有文件夾「META-INFO」,請先刪除(重新簽名就需要這樣做)。如果不想創建過程輸出太多信息,可以刪除「-verbose」 。上述簽名會直接覆蓋原來的文件,如果不想被覆蓋而簽名為另外的新文件 signed.akp,只需將 to_sign.apk 改為 -signedjar to_sign.apk signed.akp 即可。簽名後可以使用如下命令驗證是否簽名成功: > jarsigner -verify to_sign.apk 如果需要查看更詳細的驗證信息,可修改為:> jarsigner -certs -verbose -verify to_sign.apk
3)使用android sdk的zipalign工具優化已簽名的apk文件> zipalign -v 4 unaligned.apk aligned.apk 注意要在簽名後再zipalign。這個工具不是jdk自帶的,而是在%ANDROID_HOME%\tools\zipalign.exe。
⑥ Android開發之通過apksigner對apk進行v2簽名
在 Android 7.0 Nougat 中引入了全新的 APK Signature Scheme v2簽名方式,美團也推出相應的 Android渠道包生成工具Walle 。
360加固後需要重新簽名,藉助360官方提供的 簽名工具qihoo apk signer ,是採用的7.0以前的v1簽名,這時再通過walle打渠道包,是無念閉知法成功往apk寫入渠道號的。這時我們就必須藉助 Android SDK提供的apksigner 工具對已經打包好的apk進行v2簽名。
Android官方文檔已經對 apksigner的使用 有比較詳細的解釋。下面說說實際的操作步驟:
zip對齊,因為APK包的本質是一個zip壓縮文檔,經過邊界對齊方式優化能使包內未壓縮的數據有序的排列,從而減少應用程序運行時的內存消耗 ,通過空間換時間的方式提高執行效率(zipalign後的apk包體積增大了100KB左右)。
打開cmd,把目錄切換到SDK的build-tools目錄下(例如 E:SDKuild-tools25.0.2 ),執行:
zipalign命令選項不多:
-f : 輸出文件覆蓋源文件
-v : 詳細的輸出log
-p : outfile.zip should use the same page alignment for all shared object files within infile.zip
-c : 檢查當前APK是否已經執行過Align優化。
另外上面的數字4是代表按照4位元組(32位)邊界對齊。
這個工具位於SDK目錄的build-tools目錄下。必須說明的是,v2簽名方式時在Android7.0後才推出的,所以只有 版本>25 的SDKuild-tools中才能找到apksigner.jar。
打開cmd,把目錄切到SDKuild-tools版本號lib下(例如 E:SDKuild-tools25.0.2lib ),執行:
示例:
apksigner還支持另外的一些選項, 詳態首情點擊這里 。包括指定min-sdk版本、max-sdk版本仔消、輸出詳細信息、檢查apk是否已經簽名等等。
例如檢查apk是否已經簽名:
zipalign + apksigner,兩步走完成對apk包的v2簽名。且以上工具位於AndroidSDK目錄的build-tools中。
⑦ apktool簽名獲取更新版本號失敗有影響嗎
有。在使用簽名工具對一個軟體進行簽名的時候,因為版本號受限制,會導致數據的丟失,因此是有影響。簽名是對要發布的apk文件作標記,確保你遲粗擾的apk文件有唯凳枝一的身份歸屬認證,只有相同簽名和相同包名的文件才可以覆蓋安裝並碼旦保留用戶信息。
⑧ Android Apk簽名工具
目前發布APK之前大家都會採用第三方加固方案來實現應用安全,鋒冊態
在Windows下 360有簽名工具可以直接簽名,騰訊樂固目前取消了簽名工具採用雲端加固,但是之後需要自己重簽名(因為加固之前會先去掉簽名)。
在Mac下沒有簽名工具,這就比較難受了。
一般來說,我們可以通過命令行來簽名Apk,打開命令行或者終端 輸入如下命令
但是這樣容易比較麻煩,還容易出錯,其實我們還可以使用腳本來完成自動簽名。
這里來簡單說明一下吧,我是採用python來實現的, Mac與Windows均可使用
本文python環境:python 3.8.2
sign.json 與signTool.py文件需要在同一文件夾下
其中sign.json 是簽名文件配置項(在工具中可以快捷選擇,銀源也可以不配置)
如下:
這樣就配置好了
signTool.py 是簽名工具,通過命姿侍令行或者終端運行該文件就行了
signTool.py文件如下:
運行如下:
配置好相關文件之後,點擊簽名就行了
好了,完成了一個簡單而又實用的工具
⑨ apk簽名是什麼意思
apk是安卓應用軟體包,apk簽名是軟體包在安裝的時候進行的安全性驗證機制。
這種簽名機制目的是為了確保Apk來源的真實性,以及Apk沒有被第三方篡改。開發者通過對Apk進行簽名:在Apk中寫入一個「指紋」。指紋寫入以後,Apk中有任何修改,都會導致這個指紋無效,Android系統在安裝Apk進行簽名校驗時就會不通過,從而保證了安全性。
(9)apk簽名工具簽名擴展閱讀:
1、APK的格式定義
在Android平台中,dalvikvm的執行文件被打包為apk格式,最終運行時載入器會解壓,然後獲取編譯後的androidmanifest.xml文件中的permission分支相關的安全訪問,但仍然存在很多安全限制,如果你將apk文件傳到/system/app文件夾下,會發現執行是不受限制的。安裝的文件可能不是這個文件夾,而在androidrom中,系統的apk文件默認會放入這個文件夾,它們擁有著root許可權。
2、APK的開發環境
Android是一個基於Java的開發環境,Google也在API文檔的書寫和樣例的提供上做了很出色的工作。
3、獲取SDK
下載並安裝android的SDK[軟體開發套件],這套SDK主要包括有核心庫文件,一個模擬器,開發工具和一些示範的樣例文件。推薦使用Eclipse 和androideclipse 擴展。如果只是使用android,Eclipse IDE就已經足夠了,但如果是第一次開發Java應用,建議下載完整的Java SE 開發工具 (JDK) 因為它包括簽發應用程序所需要的工具。
4、APK應用架構
android應用架構很關鍵,如果不學習它,設計出來的游戲將是一種很難修復bug的產品。 需要了解應用程序、活動、Intents以及它們是如何互相聯系交互的,Google在這兒提供了良好的信息架構。真正重要的是,要理解為什麼在設計的游戲中,需要不止一個的活動進程,以及如何設計一個用戶體驗良好的游戲。這些都應當配合到應用的生命周期中。
5、APK應用的生命周期
應用的生命周期是由Android OS操作系統進行管理的,活動進程都將作為系統命令進行創建,正確處理這些事件對一個應用程序來說是極為重要的,因為終端用戶不會知道什麼是正確的。最好在開始設計游戲之前搞明白這些,因為這有助於節省調試時間以及避免代價高昂的重新設計。
對大多數應用而言,默認設置即可開始工作,但對游戲而言,可能需要調整單態實例的信號為打開。在默認情況下,Android會新建一個活動實例進程,因為它認為這是比較合適的,而游戲,可能只希望有一個活動的實例進程,這有一點兒影響,它需要了解一些系統狀態的管理。
⑩ 怎麼改apk的簽名
1、首先新建一個文件夾,命名為APK_Folder,在該文件夾下建立一文本文件,命名為:resigner.txt,輸入以下代碼。