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 来了解设备对这个开关功能的支持情况。
如需检查