Google play store App 签名
内容来自官方文档
前言
Android 要求所有 APK 在安装到设备上或更新之前都使用证书进行数字签名。
android app bundles 是生成app所有需要的资源文件包,包含代码,各种res 等等。 android studio直接生成的apk包含各种系统和语言的文件:比如x86 和arm cpu的so 文件,各种操作系统的文件,各种语言的文件等。 如果将android app bundles 提交给google play store,那么apk将在用户下载安装之前由google play store从android app bundle(aab) 中抽取适用于用户设备的资源文件和代码生成。 相比于android studio直接生成的apk文件,aab 生成的apk只包含适用于用户设备的so文件,比如只有arm so文件,只适用于用户设备操作系统和尺码的资源文件等。会比传统的apk小不少。
如果将android app bundles 提交给google play store发布,那么, 在生成apk的时候,需要google play store对apk进行签名。
使用 Android App Bundles 发布时,您需要先使用上传密钥对应用程序包进行签名,然后再将其上传到 Play 管理中心,其余的工作由 Play App Signing 负责。 对于在 Play 商店(2021 年 8 月之前创建)或其他商店使用 APK 分发的应用,您必须手动签署您的 APK 才能上传。
今天讲一下android app bundles 在发布到google play store的过程中的签名。
Play 应用签名
借助 Play App Signing,Google 可以为您管理和保护您的应用的签名密钥,并使用它来签署您的 APK 以进行分发。 而且,由于 app bundle 将构建和签名 APK 延迟到 Google Play 商店,因此您需要在上传 app bundle 之前配置 Play App Signing。 这样做可以让您从以下方面受益:
- 使用 Android App Bundle 并支持 Google Play 的高级交付模式。 Android App Bundle 使您的应用程序更小,您的发布更简单,并且可以使用功能模块并提供即时体验。
- 提高您的签名密钥的安全性,并可以使用单独的上传密钥对您上传到 Google Play 的应用程序包进行签名。
- 新安装的一次性密钥升级可让您更改应用签名密钥,以防现有的密钥遭到破坏或需要迁移到加密更强的密钥
Play App Signing 使用两个密钥:应用签名密钥和上传密钥。 在上传到 Google Play 商店之前,需要保留上传密钥并使用它来签署应用程序。 Google 使用上传证书来验证开发者身份,使用应用签名密钥对 APK 进行签名以进行分发,如图 1 所示。通过使用单独的上传密钥,如果密钥丢失或丢失,可以请求重置上传密钥。
相比之下,对于 2021 年 8 月之前创建的未选择加入 Play 应用签名的应用,如果开发者丢失了应用的签名密钥,将无法更新应用。
image.png
开发者的密钥存储的框架与 Google 用来存储它自身的密钥的框架是同一个,并受 Google 密钥管理服务的保护。 可以阅读 Google Cloud 安全白皮书来了解有关 Google 技术基础架构的更多信息。
当使用 Play App Signing 时,如果丢失了上传密钥,或者它被泄露,可以联系 Google 撤销旧的上传密钥,然后生成一个新的。 由于开发者应用签名密钥受 Google 保护,因此即使更改了上传密钥,也可以继续上传新版本的应用,来作为对原始应用的更新。
密钥库、密钥和证书
Java 密钥库(.jks 或 .keystore)是用作证书和私钥存储库的二进制文件。
公钥证书(.der 或 .pem 文件),也称为数字证书或身份证书,包含公钥/私钥对的公钥,以及标识所有者的其他一些元数据(例如,名称和位置)谁持有相应的私钥。
以下是我们应该了解的不同类型的key:
- 应用签名密钥:用于对安装在用户设备上的 APK 进行签名的密钥。作为 Android 安全更新模型的一部分,签名密钥在您的应用程序的生命周期内永远不会更改。应用签名密钥是私有的,必须保密。但是,您可以共享使用您的应用签名密钥生成的证书。
-
上传密钥:在您上传应用程序包或 APK 以使用 Google Play 进行应用签名之前,您使用该密钥签署该应用程序包或 APK。您必须对上传密钥保密。但是,您可以共享使用上传密钥生成的证书。您可以通过以下方式之一生成上传密钥:
-- 如果您选择让 Google 为您生成应用签名密钥,那么您用于签署应用以供发布的密钥就是您的上传密钥。
-- 如果您在选择加入新应用或现有应用时向 Google 提供应用签名密钥,那么您可以选择在选择加入期间或之后生成新的上传密钥以提高安全性。
-- 如果您不生成新的上传密钥,您将继续使用您的应用签名密钥作为上传密钥来签署每个版本。
提示:为确保您的密钥安全,最好确保您的应用签名密钥和上传密钥不同。
可以在Android Studio -> Generate Signed Bundle or APK 来为app bundle或者apk 进行签名,根据提示可以用已有的key store来签名,也可以在对话框中新生成一个签名。 如果你的app以前以前没有上架过,那么这个签名的密钥叫做上传密钥。
如果您已经有上传密钥,请使用它来签署应用程序。 相反,如果您的应用已使用现有应用签名密钥签名并发布到 Google Play 商店,请使用它对您的应用(apk)进行签名,并确保对其进行加密并导出, 用作您的应用在Play 上的应用签名。 您可以稍后生成单独的上传密钥并在 Google Play 中注册您的上传密钥的公共证书,以对您的应用程序进行签名和上传后续更新。
更多信息查看后续官方文档https://developer.android.com/studio/publish/app-signing#sign-apk