解读Android 12首个开发者预览版

引言

近日,Google发布了新系统 Android 12 的首个开发者预览版。根据谷歌官方消息,最终版本的Android 12预计于今年下半年正式上线。此次发布预览版的目的主要是帮助开发者提前了解Android 12的新变化,为后续进行应用适配提前做准备。

 

作为陪伴开发者多年的重要伙伴,个推一直密切关注和跟进行业发展趋势。在Android12首个开发者预览版发布后,个推快速对新系统的有关更新展开了调研。本文对Android 12预览版的部分新功能、新特性进行了解读,希望能帮助广大开发者对新系统有个快速了解。

Android 12行为变更:面向所有应用

用户体验升级

沉浸式手势导航改进

从Android 10 开始,Android 系统就已支持手势导航,致力于给用户带来沉浸式的全新体验。在之前版本的系统下,用户启动安卓的沉浸模式,默认需要的手势操作是:从屏幕侧方滑入,退出沉浸模式,然后再返回上一个界面。最新发布的Android 12首个开发者预览版则对手势导航模式进行了简化:用户不再需要滑动两次,只需一次滑动手势,即可退出全屏沉浸模式并返回上个界面,更加高效和便利。

隐私/安全保护增强

MAC 地址权限限制

为进一步保护用户隐私和数据安全,Android 11引入了“单次授权”“权限自动重置”“分区存储”等功能。Android 12则更进一步限制了所有非系统应用程序对设备MAC地址的访问,无论目标API级别如何

 

相关API返回空值或占位符值,具体取决于应用程序的目标SDK版本:

➀ target = 12 ,返回 null

➁ target <12 ,返回 02:00:00:00:00:00

 

未被信任的触摸事件将被阻止

为了保护系统安全和更好的用户体验,Android 12将会阻止某些窗口的触摸。

例如:

➀ 申请了 SYSTEM_ALERT_WINDOW 权限的 windows

➁ Toast messages

 

应用不能关闭系统对话框

ACTION_CLOSE_SYSTEM_DIALOGS intent 在 Android 12 被废弃。

➀ target = 12, 将抛出 SecurityException 异常

➁ target < 12 ,该 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.

 

Android 12行为变更:针对Target = 12的应用

 

自定义通知栏

 

Android 12 开发者预览版对通知栏进行了更改。图左:Android 12 开发者预览版,图右:Android 11

 

之前,开发者能自定义整个通知栏区域的布局和样式,这就导致了不同设备的兼容适配问题以及用户的浏览不适应问题。

 

Android 12更改了完全自定义通知的外观。对于 target = 12 的应用,在通知栏的消息展示均使用统一的模板。上面应用名字显示和折叠按钮都是相同的、固定的,下面折叠和展开状态呈现的区域是可自定义的:

 

折叠和展开的样式:

折叠状态

 

展开状态

 

若APP中存在自定义Notification.Style,亦或是使用了Notification.Builder中 setCustomContentView(RemoteViews), setCustomBigContentView(RemoteViews)和setCustomHeadsUpContentView(RemoteViews)方法,可能会受此影响。

 

隐私/安全

 

WebView 中的SameSite cookie行为

Android的WebView组件基于Chromium来提高安全性和隐私性,去年,Chromium对第三方Cookie的处理方式进行了更改,并已面向众多Chrome用户推出。从Android 12开始,这些更改将应用于WebView。

 

SameSitecookie的属性控制它是否可以与任何请求一起发送,还是只能与相同站点的请求一起发送。Android 12中的WebView基本版本(版本89.0.4385.0)改进了第三方Cookie的默认处理,将有助于防止意外的跨站点共享。

 

ADB backup 限制

Android 12 限制了 adb backup 命令行的默认行为 (该命令行是用来备份恢复数据的),对应用程序数据adb backup有依赖的开发者可以在清单文件中设置 android:debuggable 为 true。

 

组件需要添加 exported 配置

target=12时,使用的activity 、service或者广播有用到 intent filters ,则需声明 android:exported 属性。不配置的话,在安卓 12 设备上将不能安装,logcat 也会打印错误日志:

Targeting S+ (version 10000 and above) requires that an explicit value for \

android:exported be defined when intent filters are present

 

Pending intents 必须声明意图

使用 PendingIntent 需要声明 PendingIntent.FLAG_MUTABLE 或者 PendingIntent.FLAG_IMMUTABLE flag,否则系统会抛出异常 IllegalArgumentException。

 

性能

 

前台服务启动限制

以 Android 12 为目标的应用程序,无法在后台运行时启动前台服务,应用程序在后台运行时,可考虑使用 WorkManager 执行任务。

 

ForegroundService通知延迟

前台服务启动后必须调用startForeground() 来显示前台通知,如果应用在5s内未调用 startForeground(),则系统将停止服务并声明此应用为 ANR。

在Android 12中,限制时间由5s改为了10s。这样一来,对于部分APP来讲,将会有更充分的处理时间。

 

通知跳转

services 或者 broadcast receivers 中创建的通知将不能调用 startActivity() !!!

logcat 会打印:

Indirect notification activity start (trampoline) from PACKAGE_NAME, \this should be avoided for performance reasons.

 

总结

以上,是个推对Android 12首个开发者预览版本中几个重要更新点的解读。

 

除了以上内容外,Android 12 预览版还在视频、音频和图片处理方面做了很多有趣的更新。比如,通过手机的振动马达增加对触觉耦合音频效果的支持,可以帮助游戏类APP提升玩家体验;引入了兼容媒体转码功能,可以让那些不支持 HEVC的应用,也能将文件高效转码为 AVC 格式;同时还引入了对 AV1 图像文件格式(AVIF)的支持,使得开发者可以同样的文件大小,收获比 JPEG 图像更高的图像质量……感兴趣的开发者可以进入Android 12官网进一步详细了解。

 

https://developer.android.google.cn/about/versions/12

 

后续,个推还将在持续打磨开发者服务和SDK产品的同时,密切跟进移动开发领域的相关动态,为开发者升级产品功能、迭代服务体验提供有效建议。

 

也欢迎更多的开发者和我们一起交流和探索Android及移动开发新技术,共同建设更好的安卓开发生态。

 

*本文图片来源于Android官网

  • 在线咨询
  • 技术咨询
  • 业务咨询
  • 电话咨询