Android 签名打包
什么是簽名?
Android 要求所有已安裝的應用程序都使用數字證書做數字簽名,數字證書的私鑰由開發者持有。
Android 使用證書作為標識應用程序作者的一種方式,證書不需要由證書認證中心簽名,使用自制簽名證書。
Android 系統不會安裝或運行沒有正確簽名的應用,此規則適用于任何地方運行的Android系統。因此在真機或模擬器上運行或者調試應用前,必須為其設置好簽名。
兩種簽名:
1、調試模式下簽名 ? (sdk 為應用主動生成一個簽名證書,調試模式下簽名的應用不能對外發布,因為由構建工具創建的證書是不安全的,應用商店不接受調試證書簽名的apk)
2、公布模式下簽名 (需要生成自己的證書)
注:給自己開發的app簽名,就代表著我們自己的版權,之后要進行升級,也必須要使用相同的簽名才可以,簽名代表著自己的身份(即 keystore,是一個包括私人秘鑰集合的二進制文件),創建的keystore 多個app可以使用同一簽名。
為什么要有簽名?
開發Android的人眾多,完全有可能把雷鳴、包名命名成相同的名字,需要簽名來區分,由于開發商可能通過使用相同包名來混淆替換已經安裝的程序,簽名可以保證相同名字,但是簽名不同的包不被替換。
簽名機制在Android應用和框架中有著十分重要的作用,例如:Android系統禁止跟新安裝簽名不一致的apk,若應用需要使用system權限,必須保證apk簽名與framwork簽名一致。
為什么要這么做?
- ?應用程序升級 - ?當發布應用的更新時,如果想染給用戶無縫的升級到新版本,需要繼續使用相同的某個或某套證書來簽名更新包,當系統安裝應用的更新時,它會比較現在的版本和新版本的證書,如果證書吻合,包括證書數據和順序都吻合,那么系統允許更新,如果新版本所做的簽名不是匹配的,那么將需要給用起一個不同的包名 - 在這種情況下,用戶相當于安裝了一個完全新的程序。
- 用用程序模塊化 - Android允許相同證書簽名的應用程序運行在相同的進程中,此時系統會將它們作為耽擱應用程序對待,在這種方式中,可以按模塊化的凡事部署應用,用戶可以根據需要獨立的跟新每一個模塊。
- 代碼、數據的授權共享 - Android提供模式匹配的權限控制機制,因此一個應用可以暴露功能給另一個用指定證書簽名的簽名的應用,通過用相同證書簽名多個應用,以及使用模式匹配的權限檢查,應用程序可以以安全的方式共享代碼和數據。
公鑰和私鑰的概念
在現代密碼體制中加密和解密是采用不同的秘鑰(公開秘鑰),也就是公開秘鑰算法(也叫非對稱算法、雙鑰算法),每個通信方均需要兩個秘鑰,即公鑰和私鑰,這兩個秘鑰可以互為加解密,公鑰是公開的,不要保密,而私鑰是由個人自己持有,并且必須妥善保管和注意保密的。
證書的概念
數字證書是由證書認證機構(CA)對證書申請者真實身份驗證之后,用CA的根證書對申請人的一些基本信息以及申請人的公鑰進行簽名(相當于加蓋發證書機構的公章)后形成的數字文件。CA完成簽發證書后,會將證書發布在CA的證書庫(目錄服務器)中,任何人都可以查詢和下載,因此數字證書和公鑰一樣是公開的,實際上數字證書就是經過CA認證的公鑰。
原則:
- 一個公鑰對應一個私鑰
- 秘鑰對中,讓大家都知道的是公鑰,不告訴大家只有自己知道的是私鑰
- 如果用其中一個秘鑰可以解密,那么該數據必須是對應的秘鑰進行的加密
- 非對稱秘鑰密碼的主要應用就是公鑰加密和公鑰認證,而公鑰加密的過程和公鑰認證的過程是不一樣的
例:兩個用戶 A 和 B ,A要把一段明文通過雙鑰加密的技術發送給 B , B有一對公鑰和私鑰,那么加密解密過程如下
? ? 1. B 將他的公鑰傳送給A
? ? 2. A 用 B 的公鑰加密的他的消息,然后傳送給 B
? ? 3. B 用他的私鑰解密 A 的消息
調試版相關問題
證書到期問題:用來簽署apk調試的自簽名證書有效期365天,到期后只需刪除該debug.keystore文件。
文件存儲位置 --- OS 和 Linux 系統:~/.android /
????????????????? ? ?--- windows 7, 8, 10 : C:\Users\<user>\.android\
發布版的簽名
1. 手動生成簽名的 apk (使用 Android Studio 手動生成簽名的 apk,每次發布不同版本的時候都需要手動生成一次,比較麻煩)
步驟如下:
????1> 在Android Studio菜單欄中,Build --> Generate Signed APK
? ? ? ??
? ? 2>如果你已經有一個秘鑰庫,請轉到步驟4,如果你想創建一個新的秘鑰庫,單擊新建
? ? ? ??
? ? 注:Key store path: 秘鑰庫存儲位置
????????? ?Key store password:秘鑰庫安全密碼
????????? ?Key alias:秘鑰標識名稱
????????? ?Key password: 秘鑰安全密碼
? ?????????秘鑰安全密碼應當與秘鑰庫安全密碼不同
? ? 3>創建新的秘鑰庫如下圖
? ? ? ???
????
? ? 注:秘鑰的有效時間設置以年為單位,應至少為25年,以便您可以在應用的整個生命周期內使用相同的秘鑰簽署應用更新
? ? Certificate 部分是為證書輸入關于您自己的信息,此信息不會顯示在應用中,但會作為apk的一部分包含在您的證書中
????Firstand Last Name 秘鑰頒發者姓名
????OrganizationalUnit 秘鑰頒發者組織單位
? ? Organization 組織
????Cityor Locality 城市
? ? State or Province 市或洲
????CountryCode(XX) 國家代碼
? ? 4>在生成簽名apk窗口中,選擇秘鑰庫、秘鑰,并輸入兩個密碼(如果是新創秘鑰,這些字段會自動填充)然后單擊xiayi
????
? ? 5>選擇簽署的apk目的地,構建類型,產品風味,單擊完成
????
????
????APK Destination Folder 為簽署的APK選擇一個目的地
????Build Type 選擇構建的類型(兩種類型調試和正式)
????Flavors 選擇產品風味(即我們平時所說的發布平臺,Android將為選擇的每個產品風味生成單獨的apk)
????Signature?Versions 簽名版本勾選 Android7.0中引入了APKSignature Scheme v2
????
? ? 說明:v1:應用是通過zip條目進行驗證,這樣apk簽署后可進行許多修改 - 可以移動甚至重新壓縮文件
? ? v2:驗證壓縮文件的所有字節,而不是單個zip條目,簽名后無法再更改
2. 配置 build.gradle 文件自動簽名apk
步驟如下:
? ? 1>Android Studio 菜單欄 File --> Project Structure ( 快捷鍵 ctrl+alt +shift +s)
? ? 2>選中app這個module,然后切換到singning標簽欄,然后點擊添加,生成release簽名信息,點擊ok
????
? ? 3>切換到Build Types 標簽,將Signing config 選為“release”,即將剛剛生成的release簽名信息配置進去
????
????
? ? 4>隨后我們可以看到app這個module的build.gradle文件多出了如下部分代碼
??????
? ? 5>然后執行菜單欄的“build --> clean Project”
6>生成release版本的apk,在命令行terminal輸入gradlew assembleRelease (AS已經將命令行Terminal 繼承到了軟件當中)運行成功的話,效果如下:
7> 生成簽名好的文件在如下位置:
總結
以上是生活随笔為你收集整理的Android 签名打包的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android程序劫持持程序,大谈and
- 下一篇: 浏览器主页劫持查杀,查杀主页劫持木马方法