日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

细说Android apk四代签名:APK v1、APK v2、APK v3、APK v4

發(fā)布時(shí)間:2024/4/15 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 细说Android apk四代签名:APK v1、APK v2、APK v3、APK v4 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

簡介

APK v1

APK?v2

APK v3

APK v4

總結(jié)


簡介

大部分開發(fā)者對(duì)apk簽名還停留在APK v2,對(duì)APK v3和APK v4了解很少,而且網(wǎng)上大部分文章講解的含糊不清,所以根據(jù)官網(wǎng)文檔重新整理一份。

apk簽名從APK v1到APK v2改動(dòng)很大,是顛覆性的,而APK v3只是對(duì)APK v2的一次升級(jí),APK v4則是一個(gè)補(bǔ)充。

本篇文章主要參考Android各版本改動(dòng):

https://developer.android.google.cn/about/versions/pie/

APK v1

就是jar簽名,apk最初的簽名方式,大家都很熟悉了,簽名完之后是META-INF 目錄下的三個(gè)文件:MANIFEST.MF、CERT.SF、CERT.RSA。

MANIFEST.MF中是apk種每個(gè)文件名稱和摘要SHA1(或者 SHA256),如果是目錄則只有名稱

CERT.SF則是對(duì)MANIFEST.MF的摘要,包括三個(gè)部分:

  • SHA1-Digest-Manifest-Main-Attributes:對(duì) MANIFEST.MF 頭部的塊做 SHA1(或者SHA256)后再用 Base64 編碼

  • SHA1-Digest-Manifest:對(duì)整個(gè) MANIFEST.MF 文件做 SHA1(或者 SHA256)后再用 Base64 編碼

  • SHA1-Digest:對(duì) MANIFEST.MF 的各個(gè)條目做 SHA1(或者 SHA256)后再用 Base64 編碼

CERT.RSA是將CERT.SF通過私鑰簽名,然后將簽名以及包含公鑰信息的數(shù)字證書一同寫入 CERT.RSA 中保存

通過這三層校驗(yàn)來確保apk中的每個(gè)文件都不被改動(dòng)。

APK?v2

官方說明:https://source.android.google.cn/security/apksigning/v2

APK 簽名方案 v2 是在 Android 7.0 (Nougat) 中引入的。為了使 APK 可在 Android 6.0 (Marshmallow) 及更低版本的設(shè)備上安裝,應(yīng)先使用 JAR 簽名功能對(duì) APK 進(jìn)行簽名,然后再使用 v2 方案對(duì)其進(jìn)行簽名。

APK v1的缺點(diǎn)就是META-INF目錄下的文件并不在校驗(yàn)范圍內(nèi),所以之前多渠道打包等都是通過在這個(gè)目錄下添加文件來實(shí)現(xiàn)的。

APK 簽名方案 v2 是一種全文件簽名方案,該方案能夠發(fā)現(xiàn)對(duì) APK 的受保護(hù)部分進(jìn)行的所有更改,從而有助于加快驗(yàn)證速度并增強(qiáng)完整性保證。

使用 APK 簽名方案 v2 進(jìn)行簽名時(shí),會(huì)在 APK 文件中插入一個(gè) APK 簽名分塊,該分塊位于“ZIP 中央目錄”部分之前并緊鄰該部分。在“APK 簽名分塊”內(nèi),v2 簽名和簽名者身份信息會(huì)存儲(chǔ)在 APK 簽名方案 v2 分塊中。

通俗點(diǎn)說就是簽名信息不再以文件的形式存儲(chǔ),而是將其轉(zhuǎn)成二進(jìn)制數(shù)據(jù)直接寫在apk文件中,這樣就避免了APK v1的META-INF目錄的問題。

在 Android 7.0 及更高版本中,可以根據(jù) APK 簽名方案 v2+ 或 JAR 簽名(v1 方案)驗(yàn)證 APK。更低版本的平臺(tái)會(huì)忽略 v2 簽名,僅驗(yàn)證 v1 簽名。

APK v3

官方說明:https://source.android.google.cn/security/apksigning/v3

APK 簽名方案 v3 是在 Android 9 中引入的。

Android 9 支持 APK 密鑰輪替,這使應(yīng)用能夠在 APK 更新過程中更改其簽名密鑰。為了實(shí)現(xiàn)輪替,APK 必須指示新舊簽名密鑰之間的信任級(jí)別。為了支持密鑰輪替,我們將 APK 簽名方案從 v2 更新為 v3,以允許使用新舊密鑰。v3 在 APK 簽名分塊中添加了有關(guān)受支持的 SDK 版本和 proof-of-rotation 結(jié)構(gòu)的信息。

簡單來說APK v3就是為了Andorid9的APK 密鑰輪替功能而出現(xiàn)的,就是在v2的基礎(chǔ)上增加兩個(gè)數(shù)據(jù)塊來存儲(chǔ)APK 密鑰輪替所需要的一些信息,所以可以看成是v2的升級(jí)。具體結(jié)構(gòu)見官網(wǎng)說明即可。

APK 密鑰輪替功能可以參考:https://developer.android.google.cn/about/versions/pie/android-9.0

具有密鑰輪轉(zhuǎn)的 APK 簽名方案

Android 9 新增了對(duì) APK Signature Scheme v3 的支持。該架構(gòu)提供的選擇可以在其簽名塊中為每個(gè)簽名證書加入一條輪轉(zhuǎn)證據(jù)記錄。利用此功能,應(yīng)用可以通過將 APK 文件過去的簽名證書鏈接到現(xiàn)在簽署應(yīng)用時(shí)使用的證書,從而使用新簽名證書來簽署應(yīng)用。

https://developer.android.google.cn/about/versions/pie/android-9.0

注:運(yùn)行 Android 8.1(API 級(jí)別 27)或更低版本的設(shè)備不支持更改簽名證書。如果應(yīng)用的 minSdkVersion 為 27 或更低,除了新簽名之外,可使用舊簽名證書來簽署應(yīng)用。

詳細(xì)了解如何使用 apksigner 輪轉(zhuǎn)密鑰參考:https://developer.android.google.cn/studio/command-line/apksigner#usage-rotate

在 Android 9 及更高版本中,可以根據(jù) APK 簽名方案 v3、v2 或 v1 驗(yàn)證 APK。較舊的平臺(tái)會(huì)忽略 v3 簽名而嘗試驗(yàn)證 v2 簽名,然后嘗試驗(yàn)證 v1 簽名。

APK v4

官方說明:https://source.android.google.cn/security/apksigning/v4

APK 簽名方案 v4 是在 Android 11 中引入的。

Android 11 通過 APK 簽名方案 v4 支持與流式傳輸兼容的簽名方案。v4 簽名基于根據(jù) APK 的所有字節(jié)計(jì)算得出的 Merkle 哈希樹。它完全遵循 fs-verity 哈希樹的結(jié)構(gòu)(例如,對(duì)salt進(jìn)行零填充,以及對(duì)最后一個(gè)分塊進(jìn)行零填充。)Android 11 將簽名存儲(chǔ)在單獨(dú)的 .apk.idsig 文件中。v4 簽名需要 v2 或 v3 簽名作為補(bǔ)充。

APK v4同樣是為了新功能而出現(xiàn)的,這個(gè)新功能就是ADB 增量 APK 安裝,可以參考Android11 功能和 API 概覽:

https://developer.android.google.cn/about/versions/11/features

ADB 增量 APK 安裝

在設(shè)備上安裝大型(2GB 以上)APK 可能需要很長的時(shí)間,即使應(yīng)用只是稍作更改也是如此。ADB(Android 調(diào)試橋)增量 APK 安裝可以安裝足夠的 APK 以啟動(dòng)應(yīng)用,同時(shí)在后臺(tái)流式傳輸剩余數(shù)據(jù),從而加速這一過程。如果設(shè)備支持該功能,并且您安裝了最新的 SDK 平臺(tái)工具,adb install 將自動(dòng)使用此功能。如果不支持,系統(tǒng)會(huì)自動(dòng)使用默認(rèn)安裝方法。

https://developer.android.google.cn/about/versions/11/features

運(yùn)行以下 adb 命令以使用該功能。如果設(shè)備不支持增量安裝,該命令將會(huì)失敗并輸出詳細(xì)的解釋。

adb install --incremental

在運(yùn)行 ADB 增量 APK 安裝之前,您必須先為 APK 簽名并創(chuàng)建一個(gè) APK 簽名方案 v4 文件。必須將 v4 簽名文件放在 APK 旁邊,才能使此功能正常運(yùn)行。

https://developer.android.google.cn/about/versions/11/features

因?yàn)樾枰魇絺鬏?#xff0c;所以需要將文件分塊,對(duì)每一塊進(jìn)行簽名以便校驗(yàn),使用的方式就是Merkle 哈希樹(https://www.kernel.org/doc/html/latest/filesystems/fsverity.html#merkle-tree),APK v4就是做這部分功能的。所以APK v4與APK v2或APK v3可以算是并行的,所以APK v4簽名后還需要 v2 或 v3 簽名作為補(bǔ)充。

運(yùn)行 adb install --incremental 命令時(shí),adb 會(huì)要求 .apk.idsig 文件存在于 .apk 旁邊(所以APK v4的簽名文件.apk.idsig并不會(huì)打包進(jìn)apk文件中)

默認(rèn)情況下,它還會(huì)使用 .idsig 文件嘗試進(jìn)行增量安裝;如果此文件缺失或無效,該命令會(huì)回退到常規(guī)安裝。

總結(jié)

總結(jié)

以上是生活随笔為你收集整理的细说Android apk四代签名:APK v1、APK v2、APK v3、APK v4的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。