Android 12兼容性适配指南

本文详细介绍了Android 12系统带来的兼容性变化,包括影响所有应用的变更,如前台服务通知延迟、Netlink MAC地址限制、触摸事件处理等,以及针对以Android 12为目标平台的应用的适配,如WebView的SameSite Cookie行为、组件导出安全性和PendingIntent的可变性。开发者需要进行严格的测试和调整,以确保应用在Android 12上的正常运行和用户体验。
摘要由CSDN通过智能技术生成

在这里插入图片描述
在这里插入图片描述

Android 12 来了,从今年年初开始到如今正式发布前夜,Google已经释放了Beta 5版本,可以在官网下载预览版本进行测试。
测试应用的兼容性十分重要。在每个系统版本中,我们都会对平台进行整体的改进,强化隐私和安全性,并优化整个操作系统的用户体验。这些都可能会影响您的应用,所以请务必查看 行为变更 清单并进行针对性的测试,然后向用户发布兼容性更新。兼容性测试是确保应用品质的基础但十分核心的环节,可以确保您的用户拥有良好的应用体验。

当用户将自己的设备更新到 Android 12 后,他们会希望探索最新版本的 Android 系统,并在这个新平台上体验自己最喜欢的应用。应用不能正常工作会是非常严重的问题,甚至会导致用户卸载您的应用。

因此,虽然 Android 12 有大量的 新 API 和功能 值得探索,但 请首先测试您目前的应用,并发布兼容性更新。
在这里插入图片描述
首先,Android 12的兼容性适配分了所有应用和以Android 12 为目标平台的适配两种,其中前者为必须要做的,后者的适配也很重要,虽然应用可以暂时不设为Android 12 ,但是随着Android开发的不断更新,各种工具更新,总会在某一个时刻我们升级了AS或者使用了其他工具需要我们适配新特性,不如一次到位都适配掉。
这里给大家做个梳理,内容如有疑问可到Android 官网查看英文原版。
请添加图片描述

1.影响所有应用的变更

对 Android 12 上运行的所有应用都有影响的行为变更,此节涉及内容为必须适配的内容,无论应用的targetApi是否是Android 12. 必须测试现有应用在 Android 12 上的运行情况,以确保更新到最新版 Android 的用户获得良好的体验。有些平台变更可能会影响应用的行为方式,因此,必须尽早进行全面测试并对应用进行任何必要的调整。

1.1 前台服务通知延迟

背景说明:为了在 Android 12 上提供针对短时间运行的前台服务的流畅体验,系统可以为某些前台服务延迟 10 秒显示前台服务通知。此更改使某些短期任务在显示通知之前完成。

如果某项前台服务有以下特征,则系统服务启动后立即显示相关通知:

该服务与包含操作按钮的通知关联。
该服务的 foregroundServiceType 为 connectedDevice、mediaPlayback、mediaProjection 或 phoneCall
该服务根据通知的类别属性中的定义,提供与通话、导航或媒体播放相关的用例。
该服务通过在设置通知时调用 setShowForegroundImmediately(),以停用行为变更。

适配建议:了解

1.2 对 Netlink MAC 地址的限制

背景说明:Android 12 进一步限制了所有非系统应用对设备的 MAC 地址(不可重置的标识符)的访问,无论目标 API 级别如何都是如此。

如果应用以 Android 12 为目标平台,则该 API 会返回 null
如果应用以 Android 11 或更低版本为目标平台,则该 API 将返回硬编码占位值:02:00:00:00:00:00
适配建议:了解

1.3 不受信任的触摸事件被屏蔽

背景说明:

为了维持系统安全并保持良好的用户体验,Android 12 会阻止应用使用触摸事件,使用触摸事件时叠加层会以不安全的方式遮掩应用。 换言之,系统会屏蔽穿透某些窗口的触摸操作.

此变更会影响选择让触摸操作穿透其窗口的应用,例如使用 FLAG_NOT_TOUCHABLE 标志。包括但不限于以下示例:

需要 SYSTEM_ALERT_WINDOW 权限并使用 FLAG_NOT_TOUCHABLE 标志的叠加层,例如使用 TYPE_APPLICATION_OVERLAY 的窗口。
使用 FLAG_NOT_TOUCHABLE 标志的 activity 窗口。
消息框消息。
但是有例外情况,允许执行“穿透”触摸操作:

应用中的互动;可信窗口;不可见窗口;全透明窗口;足够半透明的系统警报窗口。

兼容性影响:影响选择让触摸通过其窗口(例如使用 FLAG_NOT_TOUCHABLE 标志)

包括但不限于以下示例:
需要SYSTEM_ALERT_WINDOW权限的叠加层,例如使用 TYPE_APPLICATION_OVERLAY并使用 FLAG_NOT_TOUCHABLE标志的窗口。
使用FLAG_NOT_TOUCHABLE标志的Activity窗口,Toast消息。
适配建议:各组件检查允许触摸事件通过窗口的场景及功能正常,如果系统屏蔽触摸操作,Logcat会记录以下消息:Untrusted touch due to occlusion by PACKAGE_NAME

1.4 应用无法关闭系统对话框

背景说明:

为了加强用户与应用和系统互动时的控制,从 Android 12 开始,弃用了ACTION_CLOSE_SYSTEM_DIALOGS intent 操作。

兼容性影响:当应用尝试调用包含此操作的 intent 时,系统会基于应用的目标 SDK 版本执行以下操作之一:

如果应用以 Android 12(API 级别 31)为目标平台,则会发生 SecurityException。
如果应用以 Android 11(API 级别 30)或更低版本为目标平台,则系统不会执行 intent,并且 Logcat 中会显示以下消息:

E ActivityTaskManager Permission Denial:
\android.intent.action.CLOSE_SYSTEM_DIALOGS broadcast from
com.package.name requires
android.permission.BROADCAST_CLOSE_SYSTEM_DIALOGS, \dropping
broadcast.

适配建议:了解

1.5 限制非 SDK 接口

背景说明:
如果您的应用依赖于非 SDK 接口,您应该开始计划迁移到 SDK 替代方案。只要应用引用非 SDK 接口或尝试使用反射或 JNI 来获取其句柄,这些限制就适用。

非 SDK 接口的处理是 API 抽象出来的实现细节,因此这些接口可能会在不另行通知的情况下随时发生更改。

为了避免发生崩溃和意外行为,应用应仅使用 SDK 中经过正式记录的类。这也意味着当您的应用通过反射等机制与类互动时,不应访问 SDK 中未列出的方法或字段。

涉及的主要变更有:

目前在 Android 12 中被屏蔽的非 SDK 接口
在 Android 12 中被添加到 SDK 的非 SDK 接口
适配建议:如相关组件依赖于Android 12的受限接口,应迁移到SDK替代方案。

1.6 Bouncy Castle实现的移除

背景说明:Android 12移除了许多之前平台中已标记为deprecated的BouncyCastle加密算法实现,包括所有AES算法。系统改为使用Conscrypt进行替换。

兼容性影响:

如果满足以下任一条件,则此变更会影响您的应用程序:

您的应用使用512位密钥大小。Conscrypt不支持此大小的密钥。 如有必要,请更新您应用的加密逻辑以使用不同大小的密钥。
您使用12字节以外的大小初始化Galois /计数器模式(GCM)密码。 Conscrypt的GcmParameterSpec的实现需要12字节的初始化,这是NIST推荐的。
适配建议:使用Conscrypt进行替换

1.7 麦克风和摄像头开关

背景说明:在Android 12 系统上,快速设置里增加了全局开关,允许用户快速打开或关闭应用访问摄像头和麦克风的权限(仅限支持的设备)。当开关被关闭时,访问相应传感器的应用会收到空白的视频和音频流,系统也会提示用户打开传感器以使用应用的功能。麦克风和摄像头开关控制对所有的应用均生效,无论其目标平台版本如何。
请添加图片描述

适配说明:开发者可以使用新的 SensorPrivacyManager API 来了解设备对这个开关功能的支持情况。
如需检查

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值