內(nèi)容來自官方文檔
前言
Android 要求所有 APK 在安裝到設備上或更新之前都使用證書進行數(shù)字簽名。
android app bundles 是生成app所有需要的資源文件包,包含代碼,各種res 等等评肆。 android studio直接生成的apk包含各種系統(tǒng)和語言的文件:比如x86 和arm cpu的so 文件,各種操作系統(tǒng)的文件闷祥,各種語言的文件等笨觅。 如果將android app bundles 提交給google play store申窘,那么apk將在用戶下載安裝之前由google play store從android app bundle(aab) 中抽取適用于用戶設備的資源文件和代碼生成砸泛。 相比于android studio直接生成的apk文件十籍,aab 生成的apk只包含適用于用戶設備的so文件,比如只有arm so文件唇礁,只適用于用戶設備操作系統(tǒng)和尺碼的資源文件等勾栗。會比傳統(tǒng)的apk小不少。
如果將android app bundles 提交給google play store發(fā)布盏筐,那么围俘, 在生成apk的時候,需要google play store對apk進行簽名机断。
使用 Android App Bundles 發(fā)布時楷拳,您需要先使用上傳密鑰對應用程序包進行簽名,然后再將其上傳到 Play 管理中心吏奸,其余的工作由 Play App Signing 負責。 對于在 Play 商店(2021 年 8 月之前創(chuàng)建)或其他商店使用 APK 分發(fā)的應用陶耍,您必須手動簽署您的 APK 才能上傳奋蔚。
今天講一下android app bundles 在發(fā)布到google play store的過程中的簽名。
Play 應用簽名
借助 Play App Signing烈钞,Google 可以為您管理和保護您的應用的簽名密鑰泊碑,并使用它來簽署您的 APK 以進行分發(fā)。 而且毯欣,由于 app bundle 將構(gòu)建和簽名 APK 延遲到 Google Play 商店馒过,因此您需要在上傳 app bundle 之前配置 Play App Signing。 這樣做可以讓您從以下方面受益:
- 使用 Android App Bundle 并支持 Google Play 的高級交付模式酗钞。 Android App Bundle 使您的應用程序更小腹忽,您的發(fā)布更簡單来累,并且可以使用功能模塊并提供即時體驗。
- 提高您的簽名密鑰的安全性窘奏,并可以使用單獨的上傳密鑰對您上傳到 Google Play 的應用程序包進行簽名嘹锁。
- 新安裝的一次性密鑰升級可讓您更改應用簽名密鑰,以防現(xiàn)有的密鑰遭到破壞或需要遷移到加密更強的密鑰
Play App Signing 使用兩個密鑰:應用簽名密鑰和上傳密鑰着裹。 在上傳到 Google Play 商店之前领猾,需要保留上傳密鑰并使用它來簽署應用程序。 Google 使用上傳證書來驗證開發(fā)者身份骇扇,使用應用簽名密鑰對 APK 進行簽名以進行分發(fā)摔竿,如圖 1 所示。通過使用單獨的上傳密鑰少孝,如果密鑰丟失或丟失拯坟,可以請求重置上傳密鑰。
相比之下韭山,對于 2021 年 8 月之前創(chuàng)建的未選擇加入 Play 應用簽名的應用郁季,如果開發(fā)者丟失了應用的簽名密鑰,將無法更新應用钱磅。
開發(fā)者的密鑰存儲的框架與 Google 用來存儲它自身的密鑰的框架是同一個梦裂,并受 Google 密鑰管理服務的保護。 可以閱讀 Google Cloud 安全白皮書來了解有關 Google 技術基礎架構(gòu)的更多信息盖淡。
當使用 Play App Signing 時年柠,如果丟失了上傳密鑰,或者它被泄露褪迟,可以聯(lián)系 Google 撤銷舊的上傳密鑰冗恨,然后生成一個新的。 由于開發(fā)者應用簽名密鑰受 Google 保護味赃,因此即使更改了上傳密鑰掀抹,也可以繼續(xù)上傳新版本的應用,來作為對原始應用的更新心俗。
密鑰庫傲武、密鑰和證書
Java 密鑰庫(.jks 或 .keystore)是用作證書和私鑰存儲庫的二進制文件。
公鑰證書(.der 或 .pem 文件)城榛,也稱為數(shù)字證書或身份證書揪利,包含公鑰/私鑰對的公鑰,以及標識所有者的其他一些元數(shù)據(jù)(例如狠持,名稱和位置)誰持有相應的私鑰疟位。
以下是我們應該了解的不同類型的key:
- 應用簽名密鑰:用于對安裝在用戶設備上的 APK 進行簽名的密鑰。作為 Android 安全更新模型的一部分喘垂,簽名密鑰在您的應用程序的生命周期內(nèi)永遠不會更改甜刻。應用簽名密鑰是私有的绍撞,必須保密。但是罢吃,您可以共享使用您的應用簽名密鑰生成的證書楚午。
-
上傳密鑰:在您上傳應用程序包或 APK 以使用 Google Play 進行應用簽名之前,您使用該密鑰簽署該應用程序包或 APK尿招。您必須對上傳密鑰保密矾柜。但是,您可以共享使用上傳密鑰生成的證書就谜。您可以通過以下方式之一生成上傳密鑰:
-- 如果您選擇讓 Google 為您生成應用簽名密鑰怪蔑,那么您用于簽署應用以供發(fā)布的密鑰就是您的上傳密鑰。
-- 如果您在選擇加入新應用或現(xiàn)有應用時向 Google 提供應用簽名密鑰丧荐,那么您可以選擇在選擇加入期間或之后生成新的上傳密鑰以提高安全性缆瓣。
-- 如果您不生成新的上傳密鑰,您將繼續(xù)使用您的應用簽名密鑰作為上傳密鑰來簽署每個版本虹统。
提示:為確保您的密鑰安全弓坞,最好確保您的應用簽名密鑰和上傳密鑰不同。
可以在Android Studio -> Generate Signed Bundle or APK 來為app bundle或者apk 進行簽名车荔,根據(jù)提示可以用已有的key store來簽名渡冻,也可以在對話框中新生成一個簽名。 如果你的app以前以前沒有上架過忧便,那么這個簽名的密鑰叫做上傳密鑰族吻。
如果您已經(jīng)有上傳密鑰,請使用它來簽署應用程序珠增。 相反超歌,如果您的應用已使用現(xiàn)有應用簽名密鑰簽名并發(fā)布到 Google Play 商店,請使用它對您的應用(apk)進行簽名蒂教,并確保對其進行加密并導出巍举, 用作您的應用在Play 上的應用簽名。 您可以稍后生成單獨的上傳密鑰并在 Google Play 中注冊您的上傳密鑰的公共證書悴品,以對您的應用程序進行簽名和上傳后續(xù)更新禀综。
更多信息查看后續(xù)官方文檔https://developer.android.com/studio/publish/app-signing#sign-apk