注意:本页中介绍的功能目前仅面向特定 Play 合作伙伴提供。
Google Play 的自动完整性保护功能有助于保护您的应用和游戏,防范通过未经授权的修改和再分发形式破坏完整性的行为。自动完整性保护功能在没有数据连接的情况下也可保护您的应用。此功能可在 Play 管理中心一键开启,无需开发者在测试前做任何工作,也无需进行后端服务器集成。
运作方式
自动完整性保护功能会通过为应用代码添加运行时检查来限制修改和再分发行为,同时利用先进的混淆技术和反逆向工程技术使这类检查不易被移除。如果未能通过安装程序检查,系统会提示用户从 Google Play 获取应用。如果未能通过修改检查,则应用不会运行。经过修改的应用版本中可能存在有害内容,此保护机制有助于避免用户受其侵害。
自动完整性保护功能旨在实现以下目的:
- 防范未经授权的修改:自动完整性保护功能有助于保护您的应用,防范修改行为,让应用行为遭到修改(例如移除结算功能、添加广告、更改广告所有者 ID 或添加恶意软件)的非官方副本更难以分发。
- 防范付费应用盗版:如果用户通过非官方渠道获取未经修改的 Play 版应用,自动完整性保护功能会提示用户通过 Google Play 购买,从而防范盗版。此提示为可选功能,在自动完整性保护功能的配置页面中取消选中“必须从 Google Play 安装”即可关闭。
- 增加接收官方更新的用户数量:如果用户旁加载未经修改的 Play 版应用,自动完整性保护功能会提示用户将该应用添加到其 Play 内容库,以确保能够持续收到应用更新。此提示为可选功能,在自动完整性保护功能的配置页面中取消选中“必须从 Google Play 安装”即可关闭。
设置自动完整性保护功能
下面的步骤介绍了您需要执行哪些操作才能开始使用自动完整性保护功能。点击某个部分即可将其展开。
如果您为特定应用开启自动完整性保护,那么 Google Play 在您创建每个可面向设备分发的版本时都会自动添加保护机制。该保护机制要求 Google Play 代表您创建经过修改的 APK 并为其签名,因此您必须:
- 选择加入 Play 应用签名计划
- 使用 Android App Bundle 发布应用
- 选择级别为 21 或更高的目标 API
请注意以下限制因素:
- 自动完整性保护功能(版本:dynamite 及更高版本)仅在 Android 6.0 Marshmallow(API 级别 23)及更高版本上受支持。Android M 发布于 2015 年;截至 2023 年,以 midSDKVersion 23 及更高版本为目标平台的设备在活跃 Android 设备中的占比将超过 97%。
- 自动完整性保护功能可在离线状态下使用。不过,如果设备上的 Play 商店应用长时间处于离线状态,则“必须从 Google Play 安装”设置会定期要求您建立数据连接。
- 如果您的应用已在使用 Play 许可服务,您应关闭“必须从 Google Play 安装”。
- 在您将应用上传到内部应用分享部分时,系统不会应用保护机制。请格外注意,务必仅与可信任的团队成员分享内部应用分享链接,而不要对外分享未受保护的版本。
- 自动完整性保护与 app bundle 的代码透明性不兼容,因为完整性保护涉及到修改代码。如果在启用自动完整性保护功能的情况下上传实现代码透明性的 app bundle,该 app bundle 将被拒绝。
- 此保护服务不涵盖免安装体验。若要获得保护,发布轨道中的 app bundle 就不能支持免安装体验。您可以向常规发布轨道中上传受保护的 app bundle,同时向免安装版专用轨道中上传不受保护的支持免安装体验的 app bundle。
通过各个测试轨道测试受保护的应用版本,以确保该功能不会对用户体验或性能产生意外影响。
我们建议您在测试评估项目中添加以下操作:
- 测试游戏的启动过程,看看是否会出现启动时发生崩溃以及启动速度减慢的问题。
- 测试您的原生代码 (C/C++) 回调至 Java(在您自己的代码库或第三方代码库中)的情况,例如广告、日志记录、社交集成、身份验证,或者权限处理等 Android 专用功能。
我们知道,您有时可能出于内部测试目的而需要暂时关闭自动完整性保护功能。我们建议您不要将未受保护的版本推进到开放式轨道或正式版轨道。
如需为单个版本关闭完整性保护功能,请按以下步骤操作:
- 在准备发布版本时,点击管理自动完整性保护。
- 在“针对此发布版本的 App Bundle 的保护”部分中,选择为此版本关闭保护。
- 保存您所做的更改。Google Play 将不再向未受保护的应用版本添加运行时保护。
准备就绪后,您可以在 Play 管理中心将版本发布到正式版轨道,从而面向所选国家/地区的所有 Google Play 用户发布受保护的应用。
推荐做法
不发布未受保护的应用版本
如果您将未受保护的版本发布到开放式轨道,或通过 Google Play 之外的其他渠道发布此类版本,应用保护机制将失去应有的作用。为了让应用的完整性保护功能正常发挥作用,只有受保护的应用版本才适合发布到开放式轨道和正式版轨道。
混用防篡改解决方案时需小心谨慎
自动完整性保护可能与其他运行时防篡改解决方案不兼容,因此如果您尝试同时使用这些解决方案,可能会导致用户遇到问题。如果您已在应用中实现了 Play 许可服务,则应停用“必须从 Google Play 安装”。如果您的应用会执行其他运行时检查,请务必先对受保护应用进行全面测试,然后再将应用发布到开放式轨道。
测试受保护的应用
Google Play 会自动在所有轨道分发受保护的 build:内部测试轨道、封闭式轨道、开放式轨道和正式版轨道。您应该照常对这些版本进行全面测试。
如果您将应用的 build 直接上传到内部应用分享部分,Google Play 不会添加保护。这是为了让您可以通过内部应用分享功能上传调试 build 及其他类似 build。
如果您在 App bundle 资源管理器中访问某个受保护应用版本的内部应用分享链接,系统会原样分享经过 Google Play 处理的相应 build。如果该应用版本已上传到测试轨道并受保护,则您访问 App bundle 资源管理器中的内部应用分享链接时,系统会提供受保护的版本。您可以在 App bundle 资源管理器的详细信息标签页中查看保护状态。
关闭向未知和不可信设备分发应用的选项
您可以降低受保护的应用遭到攻击的风险,只需前往设备目录页面关闭向未知和不可信设备分发应用的选项即可。依次前往版本 > 覆盖面和设备 > 设备目录,点击管理设备排除设置,然后更改“Play 完整性”选项。这意味着相应应用的商品详情将不会在未通过 Play 完整性检查的设备上显示。不过,这并不能阻止用户通过其他分发渠道获取和旁加载该应用。
监控崩溃问题
如果您发现应用的崩溃次数有所增多,这可能是由于应用保护机制发挥作用而导致的;这可能表明自动完整性保护功能在正常运行。如果攻击者试图修改您的应用,但未成功,运行时检查会让该应用停止运行,而这主要通过让应用崩溃来实现。
未归因于 Google Play 的崩溃不会影响您的 Android Vitals 稳定性指标。如果您使用其他工具分析崩溃情况(例如 Crashlytics),并且需要通过软件包名称来按安装来源过滤,Google Play 商店的软件包名称为“com.android.vending”。
如果您担心崩溃次数增多,产生了负面影响,请向我们报告崩溃情况,并提供尽可能详细的信息。我们的团队会进行调查。如果我们确定崩溃情况与保护机制有关,便会回复您。
举报遭破解的应用版本
破解版本是指在以下情况下仍可运行的版本:经过了修改或在您要求只能通过 Google Play 安装的情况下,有人通过 Google Play 之外的其他渠道安装了该版本。
如果您发现应用的破解版本,请向我们举报。