安卓如何为应用签名?

Android 系统要求所有 APK 必须先使用证书进行数字签名,然后才能安装到设备上或进行更新。使用 Android App Bundle 格式发布应用时,需要先使用上传密钥为 app bundle 签名,然后才能将其上传到 Play 管理中心,其余操作则由 Play 应用签名功能完成。对于在 Play 商店或其他商店中使用 APK 分发的应用,必须为 APK 手动签名才能上传。

本页将介绍与应用签名和安全相关的一些重要概念、如何使用 Android Studio 为应用签名以将其发布到 Google Play,以及如何配置 Play 应用签名功能。

下面将简要介绍在为新应用签名并将其发布到 Google Play 时可能需要采取的步骤:

  1. 生成上传密钥和密钥库
  2. 使用上传密钥为应用签名
  3. 配置 Play 应用签名功能
  4. 将应用上传到 Google Play
  5. 准备和发布应用版本

如果您的应用已使用现有的应用签名密钥发布到 Google Play 商店,或者您想要为新应用选择应用签名密钥而不是让 Google 生成,请按以下步骤操作:

  1. 使用应用的签名密钥为应用签名,然后选择加密并导出其签名密钥的选项
  2. 将应用的签名密钥上传到 Play 应用签名功能
  3. (推荐)生成并注册上传证书,以供未来发布应用更新时使用
  4. 将应用上传到 Google Play
  5. 准备和发布应用版本

本页还将介绍如何管理您自己的密钥,以备在将应用上传到其他应用商店时使用。如果您不使用 Android Studio 或希望从命令行对应用进行签名,请了解如何使用 apksigner。

注意:如果您构建的是 Wear OS 应用,为应用签名的流程可能不同于本页上介绍的流程。请参阅与打包和发布 Wear OS 应用相关的信息。

Play 应用签名

使用 Play 应用签名功能时,Google 会为您管理和保护应用的签名密钥,并使用此密钥为您的 APK 签名以进行分发。此外,由于 app bundle 会交由 Google Play 商店来构建 APK 并为其签名,因此您需要先配置 Play 应用签名功能,然后再上传 app bundle。这样做对您有以下方面的益处:

  • 采用 Android App Bundle 格式并支持 Google Play 的高级分发模式。Android App Bundle 可以大幅缩减应用的体量,简化应用版本,让您能够使用功能模块,以及实现免安装体验。
  • 提高签名密钥的安全性,让您能够使用单独的上传密钥为您上传到 Google Play 的 app bundle 签名。
  • 如果现有密钥被盗或您需要迁移到加密强度更高的密钥,您可以通过密钥升级来更改应用签名密钥。

    注意:为确保安全性,在使用自动生成的密钥或您提供的密钥配置 Play 应用签名功能后,您便无法检索应用签名密钥的副本,也无法在不删除应用的情况下从 Google 服务器上将其删除。

Play 应用签名功能使用两个密钥:应用签名密钥和上传密钥。有关密钥和密钥库的部分进一步详细介绍了这两个密钥。您需要保管上传密钥并使用它为您的应用签名,以便将应用上传到 Google Play 商店。然后,Google 会使用上传证书验证您的身份,并使用您的应用签名密钥为 APK 签名以进行分发,如图 1 所示。使用单独的上传密钥的好处在于,您可以在密钥丢失或被盗时申请重置上传密钥。

相比之下,对于没有选择加入 Play 应用签名计划的应用,如果应用的签名密钥丢失,您将无法更新该应用。

重要提示:如果您想在多个商店中使用同一个签名密钥,请务必在配置 Play 应用签名功能时提供您自己的签名密钥,而不要让 Google 为您生成密钥。

安卓如何为应用签名?_第1张图片

图 1. 通过 Play 应用签名功能为应用签名

系统会将您的密钥存储在 Google 用来存储自身密钥的基础架构中,因此您的密钥可享受到 Google 密钥管理服务的严密保护。您可以阅读 Google Cloud 安全性白皮书,详细了解 Google 的技术基础架构。

当您使用 Play 应用签名功能时,如果上传密钥丢失或被盗,您可以在 Play 管理中心内请求重置上传密钥。由于您的应用签名密钥受 Google 保护,因此即使您更改了上传密钥,仍可以继续以原始应用更新的形式上传应用的新版本。如需了解详情,请阅读重置丢失或被盗的私有上传密钥。

下一部分将介绍与应用签名和安全性相关的一些重要术语和概念。如果您想跳过这一部分,直接去了解如何使您的应用做好上传到 Google Play 商店的准备,请转到为您的应用签名以将其发布到 Google Play。

密钥库、密钥和证书

Java 密钥库(.jks 或 .keystore)是用作证书和私钥存储库的二进制文件。

公钥证书.der.pem 文件,也称为数字证书或身份证书)包含公钥/私钥对中的公钥,以及可以标识持有对应私钥的所有者的一些其他元数据(例如名称和位置)。

以下是您应该了解的不同类型的密钥:

  • 应用签名密钥:用于为用户设备上安装的 APK 签名的密钥。作为 Android 安全更新模型的一部分,应用签名密钥在应用的整个生命周期内保持不变。应用签名密钥属于私钥,因此必须保密。不过,您可以与他人共享使用应用签名密钥生成的证书。
  • 上传密钥:在上传 App Bundle 或 APK 以通过 Google Play 为应用签名之前,您可以使用上传密钥为 App Bundle 或 APK 签名。您必须对上传密钥做好保密工作。不过,您可以与他人共享使用上传密钥生成的证书。您可以通过以下任一种方式生成上传密钥:

    • 如果要让 Google 在您选择加入计划时为您生成应用签名密钥,那么您用于为应用签名以进行发布的密钥将被指定为上传密钥。
    • 如果您在将新应用或现有应用加入计划时向 Google 提供应用签名密钥,那么您可以在选择加入计划的过程中或之后生成新的上传密钥,以提高安全性。
    • 如果您没有生成新的上传密钥,就会继续将您的应用签名密钥用作上传密钥来为每个版本签名。

    提示:为了让您的密钥保持安全,最好确保应用签名密钥和上传密钥不同。

与 API 提供商合作

您可以从 Play 管理中心的发布 > 设置 > 应用完整性页面下载应用签名密钥和上传密钥的证书。这用于向 API 提供商注册公钥;该证书是用于分享的,因为它不包含您的私钥。

证书指纹是证书独一无二的简短表示形式,通常 API 提供商会要求同时提供证书指纹和软件包名称,以注册使用其服务的应用。您可以在 Play 管理中心的“应用签名”页面上找到上传证书和应用签名证书的 MD5、SHA-1 和 SHA-256 指纹。您还可以从同一页面下载原始证书 (.der) 来计算其他指纹。

为您的调试 build 签名

从 IDE 中运行或调试您的项目时,Android Studio 会自动使用由 Android SDK 工具生成的调试证书为您的应用签名。当您首次在 Android Studio 中运行或调试项目时,IDE 会自动在 $HOME/.android/debug.keystore 中创建调试密钥库和证书,并设置密钥库和密钥密码。

由于调试证书由构建工具创建并且在设计上不安全,因此大多数应用商店(包括 Google Play 商店)都不接受使用调试证书为要发布的应用签名。

Android Studio 会自动将您的调试签名信息存储在签名配置中,因此您不必在每次调试时都输入此信息。签名配置是一种包含为应用签名所需全部信息的对象,这些信息包括密钥库位置、密钥库密码、密钥名称和密钥密码。

如需详细了解如何针对调试用途来构建和运行应用,请参阅构建和运行您的应用。

调试证书的有效期

针对调试用途为应用签名的自签名证书的有效期为 30 年,从其创建日期算起。当此证书到期后,您将遇到 build 错误。

如需解决此问题,只需删除存储在以下某个位置的 debug.keystore 文件即可:

  • ~/.android/(在 OS X 和 Linux 上)
  • C:\Documents and Settings\user\.android\(在 Windows XP 上)
  • C:\Users\user\.android\(在 Windows Vista 以及 Windows 7、8 和 10 上)

当您下次构建和运行应用的调试版本时,Android Studio 会重新生成新的密钥库和调试密钥。

为您的应用签名以将其发布到 Google Play

当准备发布应用时,您需要为您的应用签名并将其上传到应用商店(例如 Google Play)。首次将应用发布到 Google Play 时,您还必须配置 Play 应用签名功能。对于 2021 年 8 月之前创建的应用,可以选择是否启用 Play 应用签名功能。本部分将向您介绍如何正确地为您的应用签名以进行发布,以及如何配置 Play 应用签名功能。

生成上传密钥和密钥库

如果您还没有上传密钥(配置 Play 应用签名功能时需要使用),可以使用 Android Studio 生成一个,具体步骤如下所示:

  1. 在菜单栏中,依次点击 Build > Generate Signed Bundle/APK
  2. Generate Signed Bundle or APK 对话框中,选择 Android App BundleAPK,然后点击 Next
  3. Key store path 字段下,点击 Create new
  4. New Key Store 窗口中,为您的密钥库和密钥提供以下信息,如图 2 所示。

    安卓如何为应用签名?_第2张图片

    图 2. 在 Android Studio 中创建新的上传密钥和密钥库。

  5. 密钥库

    • Key store path:选择创建密钥库的位置。 此外,还应在位置路径末尾添加一个扩展名为 .jks 的文件名。
    • Password:为您的密钥库创建并确认一个安全的密码。
  6. 密钥

    • Alias:为您的密钥输入一个标识名。
    • Password:为您的密钥创建并确认一个安全的密码。它应该与密钥库密码相同。(如需了解详情,请参阅已知问题)
    • Validity (years):以年为单位设置密钥的有效时长。密钥的有效期应至少为 25 年,以便您可以在应用的整个生命期内使用同一密钥为应用更新签名。
    • Certificate:为证书输入一些关于您本人的信息。此信息不会显示在应用中,但会作为 APK 的一部分包含在您的证书中。
  7. 填写完表单后,请点击 OK

  8. 如果您想要使用上传密钥来构建应用并为其签名,请转到介绍如何使用上传密钥为应用签名的部分。如果只想生成密钥和密钥库,请点击 Cancel

使用密钥为应用签名

如果已有上传密钥,您可以使用它为应用签名。而如果应用已使用现有的应用签名密钥签名并发布到 Google Play 商店,您可以使用该密钥为应用签名并且确保将其加密并导出,以选择将应用加入 Play 应用签名计划。您以后可以生成单独的上传密钥,并向 Google Play 注册上传密钥的公钥证书,以便为您应用的后续更新进行签名和上传。

如需使用 Android Studio 为您的应用签名,并导出现有的应用签名密钥,请按以下步骤操作:

  1. 如果您目前没有打开 Generate Signed Bundle or APK 对话框,请依次点击 Build > Generate Signed Bundle/APK
  2. Generate Signed Bundle or APK 对话框中,选择 Android App BundleAPK,然后点击 Next
  3. 从下拉菜单中选择一个模块。
  4. 指定密钥库的路径、密钥的别名,然后输入二者的密码。如果您尚未准备好上传密钥库和密钥,请先生成上传密钥和密钥库,然后返回完成此步骤。

    安卓如何为应用签名?_第3张图片

    图 3. 使用上传密钥为应用签名

  5. 如果您要使用现有的应用签名密钥为 app bundle 签名,并且想要以后再选择将应用加入 Play 应用签名计划,请选中 Export encrypted key 旁边的复选框,并指定一个路径以将签名密钥保存为加密的 *.pepk 文件。然后,您可以使用加密的应用签名密钥选择将现有应用加入 Play 应用签名计划。

  6. 点击 Next

  7. 在下一个窗口(如图 4 所示)中,为所签名的应用选择一个目标文件夹,选择 build 类型,然后选择产品变种(如果适用)。

  8. 如果要构建 APK 并为其签名,您需要选择希望应用支持的签名版本。如需了解详情,请阅读应用签名方案。

    注意:对于尚未使用现有签名证书谱系发布的 APK,Google Play 支持 APK 签名方案 v3。

  9. 点击 Finish

    安卓如何为应用签名?_第4张图片

    图 4. 针对所选产品变种生成应用的签名版本。

    注意:如果您的项目使用了产品变种,那么在 Windows/Linux 上按住 Ctrl 键或者在 Mac OS X 上按住 Command 键就可以选择多个产品变种。Android Studio 会为您选择的每个产品变种分别生成单独的 APK 或 App Bundle。

安卓如何为应用签名?_第5张图片

图 5. 点击弹出式窗口中的链接即可分析或找到您的 App Bundle,或找到您导出的签名密钥。

在 Android Studio 构建完您的签名应用后,您可以通过点击弹出式通知中的相应选项来找到分析您的应用。如果选择了导出签名密钥的选项,您可以通过点击弹出式窗口右下角的下拉箭头将其展开,然后点击 Show Exported Key File(如图 5 所示)来快速转到该密钥。

现在,您可以随时选择让应用加入 Play 应用签名计划并上传应用以进行发布。如果不熟悉应用发布流程,您可能需要参阅发布概览。否则,请转到介绍如何将您的应用上传到 Play 管理中心的页面。

使用 Play 应用签名功能

如本页前面所述,为应用签名以通过 Google Play 进行分发需要配置 Play 应用签名功能(2021 年 8 月之前创建的应用除外,这些应用可继续分发自签名 APK)。所需采取的步骤取决于您的应用是尚未发布到 Google Play 还是已在 2021 年 8 月之前使用现有的应用签名密钥签名并发布。

配置新应用

如需为尚未发布到 Google Play 的应用配置签名,请按以下步骤操作:

  1. 生成上传密钥,然后使用该上传密钥为应用签名(如果您尚未执行此步骤)。
  2. 登录您的 Play 管理中心。
  3. 按准备和发布版本的步骤创建新版本。
  4. 选择发布轨道后,请在应用完整性部分下配置应用签名,具体步骤如下所示:
    • 如需让 Google Play 为您生成应用签名密钥并使用此密钥为您的应用签名,无需执行任何操作。您用于为第一个版本签名的密钥将成为上传密钥,并且日后的应用版本也应使用此密钥进行签名。
    • 如需使用与开发者帐号中的另一个应用相同的密钥,请依次选择更改应用签名密钥 > 使用我自己的密钥 > 使用此开发者帐号中的另一个应用所用的同一密钥,选择相应的应用,然后点击继续
    • 如需提供您自己的签名密钥供 Google 为应用签名,请依次选择更改应用签名密钥 > 使用我自己的密钥,然后选择一个可让您安全上传私钥及其公开证书的选项。

注意:如果您尚未接受服务条款,您需要查看条款并选择接受,然后才能继续操作。

在名为 App Bundle 的部分中点击浏览文件,找到并上传您使用上传密钥签名的应用。如需详细了解如何发布应用,请参阅准备和发布版本。当您在配置 Play 应用签名功能后发布应用时,Google Play 会为您生成(除非您上传了现有密钥)和管理应用的签名密钥。您只需使用应用的上传密钥为其后续更新签名,然后再将相应更新上传到 Google Play 即可。

如果您需要为应用创建新的上传密钥,请转到介绍如何重置丢失或被盗的私有上传密钥的部分。

选择将现有应用加入计划

如果您要使用现有的应用签名密钥更新已发布到 Google Play 的应用,可以按以下步骤选择加入 Play 应用签名计划:

  1. 使用 Android Studio 通过现有应用签名密钥为应用签名,并确保勾选 Export encrypted key 旁边的复选框以将签名密钥另存为加密的 *.pepk 文件(如果您以前尚未执行此步骤)。您在后续步骤中会用到此文件。您也可以使用 PEPK 工具(可以从 Play 管理中心下载)完成此操作。
  2. 登录您的 Play 管理中心,然后导航到您的应用。
  3. 在左侧菜单中,依次点击发布 > 设置 > 应用完整性
  4. 如果适用,请查看《服务条款》并选择接受
  5. 选择与您要上传到 Google Play 的签名密钥最相符的一个选项,然后按照显示的说明操作。例如,如果您使用 Android Studio 导出了应用的签名密钥(如本页所述),请选择上传从 Android Studio 导出的密钥,然后上传密钥的 *.pepk 文件。
  6. 点击注册

您现在应该会看到一个页面,其中包含您应用的签名和上传证书的详细信息。现在,Google Play 在向用户部署您的应用时,会使用您的现有密钥为您的应用签名。不过,加入 Play 应用签名计划最重要的好处之一,就是能够将您在为上传到 Google Play 的工件签名时使用的密钥与 Google 在为您的应用签名以将其分发给用户时使用的密钥分开。因此,请考虑按照下一部分中的步骤生成并注册单独的上传密钥。

生成并注册上传证书

在您发布未使用上传密钥签名的应用时,Google Play 管理中心会提供注册上传密钥的选项,以供未来发布应用更新时使用。虽然这是一个可选步骤,但还是建议您在发布应用时使用单独的密钥,此密钥最好不要与 Google Play 向用户分发应用时所用的密钥相同。这样一来,Google 便可以确保签名密钥的安全,而您也可以选择重置丢失或被盗的私有上传密钥。本部分将介绍如何创建上传密钥、如何根据上传密钥生成上传证书,以及如何向 Google Play 注册该证书以供未来发布应用更新时使用。

下面将介绍您在哪些情况下会在 Play 管理中心看到用于注册上传证书的选项:

  • 当您发布使用签名密钥签名的新应用,并选择将其加入 Play 应用签名计划时。
  • 当您即将发布已选择加入 Play 应用签名计划的现有应用,但该应用使用其签名密钥进行了签名时。

如果您不是要发布已选择加入 Play 应用签名计划的现有应用的更新,并且您想要注册上传证书,请完成以下步骤,然后转到介绍如何重置丢失或被盗的私有上传密钥的部分。

生成上传密钥和密钥库(如果您以前尚未执行此步骤)。

创建上传密钥和密钥库后,您需要使用 keytool 根据上传密钥生成公钥证书;为此,您需要使用以下命令:

$ keytool -export -rfc
  -keystore your-upload-keystore.jks
  -alias upload-alias
  -file output_upload_certificate.pem

现在您已获得上传证书,接下来可以在 Play 管理中心有提示时向 Google 注册该证书,或阅读以下部分以通过 Google Play 支持团队进行注册。

升级应用签名密钥

在某些情况下,您可能需要更改应用签名密钥,例如,由于您需要加密强度更高的密钥或您的签名密钥已被盗。不过,由于仅当使用相同的签名密钥为您的应用更新签名时,用户才能更新您的应用,因此很难更改已发布应用的签名密钥。

如果您将应用发布到 Google Play,则可以通过 Play 管理中心升级已发布应用的签名密钥。您的新密钥用于为在 Android 13 及更高版本上安装及更新的应用进行签名,而旧版应用签名密钥则用于为用户在较低版 Android 上更新的应用签名。

如需了解详情,请参阅升级应用签名密钥。

重置丢失或被盗的私有上传密钥

如果您丢失了自己的私有上传密钥或私钥被盗,可以在 Play 管理中心内创建新密钥并请求重置上传密钥。

注意:重置上传密钥不会影响 Google Play 在您向用户提供 APK 之前用于对 APK 重新签名的应用签名密钥。

配置构建流程以自动为应用签名

在 Android Studio 中,您可以通过创建一个签名配置并将其分配到您的发布 build 类型,将您的项目配置为在构建流程中为应用的发布版本自动签名。签名配置包含密钥库位置、密钥库密码、密钥别名和密钥密码。如要使用 Android Studio 创建签名配置并将其分配到您的发布 build 类型,请完成以下步骤:

  1. Project 窗口中,右键点击您的应用并点击 Open Module Settings
  2. Project Structure 窗口左面板中的 Modules 下,点击您想要签名的模块。
  3. 点击 Signing 标签页,然后点击 Add 图标

  4. 选择您的密钥库文件,为此签名配置输入一个名称(因为您可能会创建多个配置),然后输入所需的信息。

    安卓如何为应用签名?_第6张图片

    图 7. 用于创建新签名配置的窗口。

  5. 点击 Build Types 标签页。
  6. 点击 release build。
  7. Signing Config 下,选择您刚刚创建的签名配置。

    安卓如何为应用签名?_第7张图片

    图 8. 在 Android Studio 中选择签名配置。

  8. 点击 OK

现在,每当您通过在 Android Studio 中的 Build > Build Bundle(s) / APK(s) 下选择一个选项来构建发布 build 类型时,IDE 都会使用您指定的签名配置自动为您的应用签名。您可以在所构建模块的项目目录内的 build/outputs/ 目录中找到已签名的 APK 或 App Bundle。

在您创建签名配置时,您的签名信息将以纯文本形式包含到 Gradle 构建文件中。如果您是通过团队协作开发项目或者要公开共享自己的代码,那么您应当从构建文件中移除签名信息并将其单独存储,从而确保此信息的安全。您可以参阅从 build 文件中移除签名信息,详细了解如何从 build 文件中移除签名信息。如需详细了解如何保证签名信息的安全,请阅读保障密钥的安全。

以不同的方式为每个产品变体签名

如果您的应用有多个产品变种并且您想要以不同方式为每个变种签名,您可以创建更多签名配置并将其按变种分配:

  1. Project 窗口中,右键点击您的应用并点击 Open Module Settings
  2. Project Structure 窗口左面板中的 Modules 下,点击您想要签名的模块。
  3. 点击 Signing 标签页,然后点击 Add 图标

  4. 选择您的密钥库文件,为此签名配置输入一个名称(因为您可能会创建多个配置),然后输入所需的信息。

    安卓如何为应用签名?_第8张图片

    图 10. 用于创建新签名配置的窗口。

  5. 根据需要重复第 3 步和第 4 步,直到您完成所有签名配置的创建。
  6. 点击 Flavors 标签页。
  7. 点击您想要配置的变种,然后从 Signing Config 下拉菜单中选择合适的签名配置。

    安卓如何为应用签名?_第9张图片

    图 11. 按产品变体配置签名设置。

    重复操作以配置任何其他产品变体。

  8. 点击 OK

您还可以在 Gradle 配置文件中指定签名设置。如需了解详情,请参阅配置签名设置。

生成签名报告

如需获取应用的每个变体的签名信息,请在 Android Studio 中运行 Gradle signingReport 任务:

  1. 依次选择 View > Tool Windows > Gradle 以打开 Gradle 工具窗口
  2. 依次选择 YourApp > Tasks > android > signingReport 以生成报告

注意:如果您在 Gradle 任务列表中没看到 signingReport,请通过依次选择 File > Settings(在 macOS 上则需依次选择 Android Studio > Settings)打开 Android Studio 设置对话框,选择 Experimental,然后在 Gradle 标题下取消选中所有用于限制 Gradle 任务列表所含任务类型的复选框。

管理您自己的签名密钥

如果您选择不启用 Play 应用签名功能(仅适用于 2021 年 8 月之前创建的应用),可以自行管理您自己的应用签名密钥和密钥库。请注意,您需要自行负责保障密钥和密钥库的安全。此外,您的应用也将无法支持 Android App Bundle、Play Feature Delivery 和 Play Asset Delivery。

如果您准备创建自己的密钥和密钥库,请确保先为密钥库选择一个安全系数高的密码,然后为密钥库中存储的每个私钥分别选择一个单独的安全系数高的密码。您必须将密钥库保存在安全可靠的地方。如果您无法访问您的应用签名密钥,或者您的密钥被盗,Google 将无法为您找回应用签名密钥,并且您将无法以原始应用更新的形式向用户发布您应用的新版本。如需了解详情,请参阅下面的保障密钥的安全。

如果您自行管理您自己的应用签名密钥和密钥库,那么当您为 APK 签名时,将使用自己的应用签名密钥在本地对其进行签名,并直接将已签名的 APK 上传到 Google Play 商店以进行分发,如图 10 所示。

安卓如何为应用签名?_第10张图片

图 12. 在自行管理您自己的应用签名密钥时为应用签名

当您使用 Play 应用签名时,Google 会保障您签名密钥的安全,还会确保您的应用具有正确的签名,并能够在其整个生命周期内收到更新。不过,如果您决定自行管理您的应用签名密钥,应当注意以下几点事项。

签名注意事项

在应用的预期生命周期内,您应当使用同一证书为应用签名。这么做的原因有多个:

  • 应用升级:当安装应用的更新时,系统会比较新版本和现有版本中的证书。如果证书匹配,系统就会允许更新。如果使用不同的证书为新版本签名,您必须为应用分配另一个软件包名称。在此情况下,用户会将新版本作为全新应用进行安装。
  • 应用模块化:Android 允许通过同一证书签名的多个 APK 在同一个进程中运行(如果应用请求这样做),以便系统将其视为单个应用。这样一来,您便可以按模块部署您的应用,并且用户可以独立更新每个模块。
  • 通过权限共享代码/数据:Android 提供了基于签名的权限执行机制,以便一个应用可以将功能提供给使用指定证书签名的另一个应用。通过使用同一个证书为多个 APK 签名并使用基于签名的权限检查功能,您的应用可以采用安全的方式共享代码和数据。

如果您计划支持某个应用的升级,请确保您的应用签名密钥的有效期超出该应用的预期生命周期。建议有效期为 25 年或以上。当密钥的有效期过后,用户将不能再无缝升级到应用的新版本。

如果您计划在 Google Play 上发布您的应用,您用于为这些应用签名的密钥的有效期必须在 2033 年 10 月 22 日以后结束。Google Play 强制执行此要求,以确保在新版本可用时,用户可以无缝升级应用。

保障密钥的安全

如果您选择自行管理和保护自己的应用签名密钥和密钥库(而不是选择加入 Play 应用签名计划),那么保障应用签名密钥的安全对于您和用户而言都非常重要。如果您允许某人使用您的密钥,或者将您的密钥库和密码放在了不安全的地方,以致于第三方可以找到和使用相应信息,就会损害您的作者身份和用户对您的信任。

注意:如果您使用 Play 应用签名,Google 的基础架构会保障您的应用签名密钥的安全。您还应按下述方式保障上传密钥的安全。如果您的上传密钥被盗,您可以与 Google 联系以将其撤消,然后您将收到新的上传密钥。

如果某个第三方在您不知情或未经授权的情况下设法取得您的应用签名密钥,此人可能会为应用签名并进行分发,从而恶意替换您的原版应用或损坏它们。另外,此人还可能利用您的身份为应用签名并进行分发,从而攻击其他应用或系统本身,或者损坏或窃取用户数据。

您应用的所有将来版本都需要使用您的私钥签名。如果密钥丢失或存放不当,您将无法发布现有应用的更新。您无法重新生成以前生成的密钥。

您作为开发者实体的声誉取决于您能否每时每刻正确保障您应用签名密钥的安全,直至密钥过期。以下是有关如何保障密钥安全的一些提示:

  • 为密钥库和密钥选择安全系数高的密码。
  • 请勿将您的私钥赠与或借给任何人,也不要让未经授权的人员知道您的密钥库和密钥密码。
  • 将包含私钥的密钥库文件存放在安全可靠的地方。

通常情况下,只要您在生成、使用和存储密钥时遵循通用的注意事项,就可以保障密钥的安全。

从构建文件中移除签名信息

在您创建签名配置时,Android Studio 会以纯文本形式将您的签名信息添加到模块的 build.gradle 文件中。如果您通过团队协作开发项目或者要将您的代码开源,那么您应当将此敏感信息从构建文件中移出,以免被他人轻易获取。为此,您应创建一个单独的属性文件来存储安全信息并在您的编译文件中引用该文件,具体如下所示:

  1. 创建一项签名配置,并将其分配给一种或多种 build 类型。 这些说明假设您已经按照上面配置构建流程以自动为应用签名部分所述,为发布 build 类型配置了一个签名配置。
  2. 在项目的根目录下创建一个名为 keystore.properties 的文件。此文件应当包含您的签名信息,如下所示:
  • storePassword=myStorePassword
    keyPassword=mykeyPassword
    keyAlias=myKeyAlias
    storeFile=myStoreFileLocation
    
  • 在模块的 build.gradle 文件中,在 android {} 块的前面添加用于加载 keystore.properties 文件的代码。

    GroovyKotlin

  • ...
    
    // Create a variable called keystorePropertiesFile, and initialize it to your
    // keystore.properties file, in the rootProject folder.
    def keystorePropertiesFile = rootProject.file("keystore.properties")
    
    // Initialize a new Properties() object called keystoreProperties.
    def keystoreProperties = new Properties()
    
    // Load your keystore.properties file into the keystoreProperties object.
    keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
    
    android {
        ...
    }
    

    注意:您可以选择将 keystore.properties 文件存储在其他位置(例如,存储在模块文件夹中而不是项目的根文件夹中,或者如果您使用持续集成工具,也可以存储在构建服务器上)。在这种情况下,您应当修改上面的代码,以使用实际的 keystore.properties 文件的位置正确初始化 keystorePropertiesFile

  • 您可以使用语法 keystoreProperties['propertyName'] 引用存储在 keystoreProperties 中的属性。修改模块的 build.gradle 文件的 signingConfigs 块,以便使用此语法引用存储在 keystoreProperties 中的签名信息。

    GroovyKotlin

  1. android {
        signingConfigs {
            config {
                keyAlias keystoreProperties['keyAlias']
                keyPassword keystoreProperties['keyPassword']
                storeFile file(keystoreProperties['storeFile'])
                storePassword keystoreProperties['storePassword']
            }
        }
        ...
      }
  2. 打开 Build Variants 工具窗口,并确保已选择发布 build 类型。
  3. Build > Build Bundle(s) / APK(s) 下选择一个选项,以构建您的发布 build 的 APK 或 app bundle。 您应该会在模块的 build/outputs/ 目录中看到相应构建输出。

由于您的 build 文件不再包含敏感信息,您现在可以将其包含在源代码控制系统中或者上传到共享的代码库。请务必保证 keystore.properties 文件的安全。您可能需要将其从您的源代码控制系统中移除。

——————————————————————————

原文地址:https://developer.android.google.cn/studio/publish/app-signing

你可能感兴趣的:(android,为应用签名)