Android 9 版本
- Android 9 总览
- 行为变更:所有应用
- 行为变更:以 API 级别 28 及更高级别为目标的应用
- Android 9 功能和 API
Android 9 总览
https://developer.android.google.cn/about/versions/pie?hl=zh-cn
文章基于官方资料上提取
行为变更:所有应用
https://developer.android.google.cn/about/versions/pie/android-9.0-changes-all?hl=zh-cn#apache-nonp
电源管理
https://developer.android.google.cn/about/versions/pie/power?hl=zh-cn
Android 9(API 级别 28)引入了一些新功能来改进设备电源管理。 这些变化,连同先前版本中已经存在的功能,有助于确保将系统资源提供给最需要它们的应用。
电源管理功能可以分为两个类别:
- 应用待机群组
系统将根据用户的使用模式限制应用对 CPU 或电池等设备资源的访问。 这是 Android 9 中新增的一项功能。 - 省电模式改进
开启省电模式后,系统会对所有应用施加限制。 这是一项已有的功能,但在 Android 9 中得到了改进。
注:这些变化适用于所有应用,无论它们是否以 Android 9 为目标。
隐私权变更
为了增强用户隐私,Android 9 引入了若干行为变更,如限制后台应用访问设备传感器、限制通过 Wi-Fi 扫描检索到的信息,以及与通话、手机状态和 Wi-Fi 扫描相关的新权限规则和权限组。
后台对传感器的访问受限
应用在运行 Android 9 设备的后台运行,系统将对您的应用采取以下限制:
- 您的应用不能访问麦克风或摄像头。
- 使用连续报告模式的传感器(例如加速度计和陀螺仪)不会接收事件。
- 使用变化或一次性报告模式的传感器不会接收事件。
如果您的应用需要在运行 Android 9 的设备上检测传感器事件,请使用前台服务。
限制访问通话记录
Android 9 引入 CALL_LOG 权限组并将 READ_CALL_LOG、WRITE_CALL_LOG 和 PROCESS_OUTGOING_CALLS
权限移入该组。 在之前的 Android 版本中,这些权限位于 PHONE 权限组。
对于需要访问通话敏感信息(如读取通话记录和识别电话号码)的应用,该 CALL_LOG 权限组为用户提供了更好的控制和可见性。
限制访问电话号码
在未首先获得 READ_CALL_LOG
权限的情况下,除了应用的用例需要的其他权限之外,运行于 Android 9 上的应用无法读取电话号码或手机状态。
要从手机状态中读取电话号码,请根据您的用例更新应用以请求必要的权限:
- 要通过
PHONE_STATE Intent (广播)
操作读取电话号码,同时需要READ_CALL_LOG 权限和 READ_PHONE_STATE 权限
。 - 要从
onCallStateChanged() (接口)
中读取电话号码,只需要READ_CALL_LOG
权限。 不需要READ_PHONE_STATE
权限。
限制访问 Wi-Fi 位置和连接信息
在 Android 9 中,应用进行 Wi-Fi 扫描的权限要求比之前的版本更严格
从 Wi-Fi 服务函数中移除的信息
在 Android 9 中,下列事件和广播不接收用户位置或个人可识别数据方面的信息:
- WifiManager 中的 getScanResults() 和 getConnectionInfo() 函数。
- WifiP2pManager 中的 discoverServices() 和 addServiceRequest() 函数。
- NETWORK_STATE_CHANGED_ACTION 广播。
Wi-Fi 的 NETWORK_STATE_CHANGED_ACTION
系统广播不再包含 SSID(之前为 EXTRA_SSID)、BSSID(之前为 EXTRA_BSSID)或连接信息(之前为 EXTRA_NETWORK_INFO)。 如果应用需要此信息,请改为调用 getConnectionInfo()。
电话信息现在依赖设备位置设置
对使用非 SDK 接口的限制
https://developer.android.google.cn/about/versions/pie/android-9.0-changes-all?hl=zh-cn#compat
安全行为变更
设备安全性变更
传输层安全协议 (TLS) 实现变更
更严格的 SECCOMP 过滤器
加密变更
参数和算法的 Conscrypt 实现
不再支持 Android 安全加密文件
Android 9 完全取消了对 Android 安全加密文件 (ASEC) 的支持。
ICU 库更新
https://developer.android.google.cn/about/versions/pie/android-9.0-changes-all?hl=zh-cn#icu
ICU 用于提供 android.icu package
下的公开 API, 供 Android 平台内部用来提供国际化支持。 例如,它用于实现java.util、java.text 和 android.text.format
格式的 Android 类。
Android Test 变更
Android 9 引入了多项针对 Android Test 框架库和类结构的更改。 这些变更可帮助开发者使用支持框架的公共 API,此外,在使用第三方库或自定义逻辑构建和运行测试时,这些变更还可提供更大的灵活性。
Java UTF 解码器
https://developer.android.google.cn/about/versions/pie/android-9.0-changes-all?hl=zh-cn#decoder
UTF-8 是 Android 中的默认字符集。 UTF-8 字节序列可由 String(byte[] bytes) 之类的 String 构造函数解码。
使用证书的主机名验证
网络地址查询可能会导致网络违规
在 Android 9 及更高版本中,StrictMode
可以检测需要名称解析的网络地址查询所导致的网络违规。
套接字标记
https://developer.android.google.cn/about/versions/pie/android-9.0-changes-all?hl=zh-cn#trafficstats-setthreadstatstag
在 Android 9 及更高版本中,利用 binder 进程间通信将套接字发送至其他进程时,其标记将得到保留。 此变更可能影响网络流量统计,例如,使用 queryDetailsForUidTag()
函数时。
报告的套接字中可用字节数
在调用 shutdownInput() 函数后,available() 函数会在调用时返回 0。
更详尽的 VPN 网络功能报告
在 Android 8.1(API 级别 28)及更低版本中,NetworkCapabilities 类仅报告 VPN 的有限信息,例如 TRANSPORT_VPN,但会省略 NET_CAPABILITY_NOT_VPN。 信息有限导致难以确定使用 VPN 是否会导致对应用的用户收费。 例如,检查 NET_CAPABILITY_NOT_METERED 并不能确定底层网络是否按流量计费。
应用不再能访问 xt_qtaguid 文件夹中的文件
现在强制执行 FLAG_ACTIVITY_NEW_TASK 要求
在 Android 9 中,您不能从非 Activity 环境中启动 Activity,除非您传递 Intent 标志 FLAG_ACTIVITY_NEW_TASK。 如果您尝试在不传递此标志的情况下启动 Activity,则该 Activity 不会启动,系统会在日志中输出一则消息。
屏幕旋转变更
从 Android 9 开始,对纵向旋转模式做出了重大变更。
Apache HTTP 客户端弃用影响采用非标准 ClassLoader 的应用
https://developer.android.google.cn/about/versions/pie/android-9.0-changes-all?hl=zh-cn#apache-nonp
枚举相机
在 Android 9 设备上运行的应用可以通过调用 getCameraIdList()
发现每个可用的摄像头。
行为变更:以 API 级别 28 及更高级别为目标的应用
前台服务
如果应用以 Android 9 或更高版本为目标平台并使用前台服务,则必须请求 FOREGROUND_SERVICE
权限。这是普通权限,因此,系统会自动为请求权限的应用授予此权限。
隐私权变更
构建序列号弃用
在 Android 9 中,Build.SERIAL
始终设为 “UNKNOWN”,以保护用户隐私。
如果您的应用需要访问设备的硬件序列号,您应改为请求 READ_PHONE_STATE
权限,然后调用 getSerial()
。
DNS 隐私权
以 Android 9 为目标平台的应用应采用私有 DNS API。
框架安全性变更
默认启用网络传输层安全协议 (TLS)
https://developer.android.google.cn/about/versions/pie/android-9.0-changes-28?hl=zh-cn#tls-enabled
按进程分设基于网络的数据目录
https://developer.android.google.cn/about/versions/pie/android-9.0-changes-28?hl=zh-cn#web-data-dirs
在 Android 9 中,为改善应用稳定性和数据完整性,应用无法再让多个进程共享一个 WebView 数据目录。通常情况下,此类数据目录会存储 Cookie、HTTP 缓存以及其他与网络浏览有关的持久性和临时性存储。
按应用划分的 SELinux 域
以 Android 9 或更高版本为目标平台的应用无法使用所有人都可访问的 Unix 权限与其他应用共享数据。这项变更可提高 Android 应用沙盒的完整性,尤其是对于应用的私有数据仅能由相应应用访问这一要求而言。
网络连接变更
网络连接数据计数和多路径
在以 Android 9 或更高版本为目标平台的应用中,系统会统计并非当前默认网络的网络流量(例如,当设备连接到 WLAN 时的蜂窝流量),并在 NetworkStatsManager 类中提供查询该流量的方法。
Apache HTTP 客户端弃用
https://developer.android.google.cn/about/versions/pie/android-9.0-changes-28?hl=zh-cn#apache-p
界面变更
https://developer.android.google.cn/about/versions/pie/android-9.0-changes-28?hl=zh-cn#ui-changes
视图焦点
CSS RGBA 十六进制值处理
文件的 MIME 类型嗅探:URI
低于 Android 9 的 Android 版本可以通过文件内容推断出 MIME 类型。从 Android 9(API 级别 28)开始,在 WebView 中加载 file: URI 时,应用必须使用正确的文件扩展名。
文档滚动元素
来自已暂停应用的通知
Android 9 功能和 API
https://developer.android.google.cn/about/versions/pie/android-9.0?hl=zh-cn
利用 Wi-Fi RTT 进行室内定位
Android 9 添加了对 IEEE 802.11mc Wi-Fi 协议(也称为 Wi-Fi Round-Trip-Time (RTT))的平台支持,从而让您的应用可以利用室内定位功能。
https://developer.android.google.cn/about/versions/pie/android-9.0?hl=zh-cn#rtt
显示屏缺口支持
Android 9 支持最新的全面屏,其中包含为摄像头和扬声器预留空间的屏幕缺口。 通过 DisplayCutout
类可确定非功能区域的位置和形状,这些区域不应显示内容。 要确定这些屏幕缺口区域是否存在及其位置,请使用 getDisplayCutout()
函数。
https://developer.android.google.cn/about/versions/pie/android-9.0?hl=zh-cn#cutout
通知
https://developer.android.google.cn/about/versions/pie/android-9.0?hl=zh-cn#notifications
提升短信体验
从 Android 7.0(API 级别 24)开始,您可以添加一个操作以回复短信或直接从通知中输入其他文本。 Android 9 通过下列增强提升了该功能:
- 简化了针对对话参与者的支持
- 支持图像
- 将回复另存为草稿
- 确定对话是否为群组对话
- 为 Intent 设置语义操作
- SmartReply
渠道设置、广播和请勿打扰
Android 8.0 引入了通知渠道,允许您为要显示的每种通知类型创建可由用户自定义的渠道。 Android 9 通过下列变更简化通知渠道设置:
- 屏蔽渠道组
- 全新的广播 Intent 类型
- NotificationManager.Policy 有 3 种新的“请勿打扰”优先级类别
- NotificationManager.Policy 还有 7 种新的“请勿打扰”常量,可以用来抑制视觉中断
多摄像头支持和摄像头更新
https://developer.android.google.cn/about/versions/pie/android-9.0?hl=zh-cn#camera
适用于可绘制对象和位图的 ImageDecoder
Android 9 引入了 ImageDecoder 类,可提供现代化的图像解码方法。 使用该类取代 BitmapFactory 和 BitmapFactory.Options API。
https://developer.android.google.cn/about/versions/pie/android-9.0?hl=zh-cn#decoding-images
动画
Android 9 引入了 AnimatedImageDrawable 类,用于绘制和显示 GIF 和 WebP 动画图像。
https://developer.android.google.cn/about/versions/pie/android-9.0?hl=zh-cn#animation
HDR VP9 视频、HEIF 图像压缩和 Media API
Android 9 新增了对 High Dynamic Range (HDR) VP9 Profile 2 的内置支持,因此,现在您可以在支持 HDR 的设备上为用户提供来自 YouTube、Play Movies 和其他来源的采用 HDR 的影片。
Android 9 为平台增加了对 HEIF (heic) 图像编码的支持。
JobScheduler 中的流量费用敏感度
https://developer.android.google.cn/about/versions/pie/android-9.0?hl=zh-cn#jobscheduler
从 Android 9 开始,JobScheduler 可以使用运营商提供的网络状态信号来改善与网络有关的作业处理。
Neural Networks API 1.1
https://developer.android.google.cn/about/versions/pie/android-9.0?hl=zh-cn#nnapi
Android 8.1(API 级别 27)中引入了 Neural Networks API 以加快 Android 设备上机器学习的速度。 Android 9 扩展和改进了该 API。
自动填充框架
https://developer.android.google.cn/about/versions/pie/android-9.0?hl=zh-cn#autofill
安全增强功能
https://developer.android.google.cn/about/versions/pie/android-9.0?hl=zh-cn#security
Android Protected Confirmation
统一生物识别身份验证对话框
https://developer.android.google.cn/about/versions/pie/android-9.0?hl=zh-cn#biometric-auth
在 Android 9 中,系统代表您的应用提供生物识别身份验证对话框。 该功能可创建标准化的对话框外观、风格和位置,让用户更加确信,他们在使用可信的生物识别凭据检查程序进行身份验证。
硬件安全性模块
https://developer.android.google.cn/about/versions/pie/android-9.0?hl=zh-cn#hardware-security-module
运行 Android 9 或更高版本的受支持设备可拥有 StrongBox Keymaster,它是位于硬件安全性模块中的 Keymaster HAL 的一种实现。
保护对密钥库进行的密钥导入
Android 9 通过利用 ASN.1‑编码密钥格式将已加密密钥安全导入密钥库的功能,提高了密钥解密的安全性。 Keymaster 随后会在密钥库中将密钥解密,因此密钥的内容永远不会以明文形式出现在设备的主机内存中。
https://developer.android.google.cn/about/versions/pie/android-9.0?hl=zh-cn#secure-key-import
具有密钥轮转的 APK 签名方案
https://developer.android.google.cn/about/versions/pie/android-9.0?hl=zh-cn#apk-key-rotation
Android 9 新增了对 APK Signature Scheme v3 的支持。
只允许在未锁定设备上进行密钥解密的选项
Android 9 引入了 unlockedDeviceRequired 标志。 此选项确定在允许使用指定密钥对任何正在传输或存储的数据进行解密之前,密钥库是否要求屏幕解锁。
https://developer.android.google.cn/about/versions/pie/android-9.0?hl=zh-cn#key-decrypt-unlocked
旧版加密支持
附带 Keymaster 4 的 Android 9 设备支持三重数据加密算法(简称三重 DES)。 如果您的应用与需要三重 DES 的旧版系统进行互操作,请使用这种加密来加密敏感凭据。
Android 备份
Android 9 新增了与备份和还原有关的功能和开发者选项。 这些更改的详细信息如以部分下所示。
https://developer.android.google.cn/about/versions/pie/android-9.0?hl=zh-cn#android-backups
无障碍功能
https://developer.android.google.cn/about/versions/pie/android-9.0?hl=zh-cn#a11y
旋转
https://developer.android.google.cn/about/versions/pie/android-9.0?hl=zh-cn#rotation
文本
https://developer.android.google.cn/about/versions/pie/android-9.0?hl=zh-cn#text
设备端系统跟踪
https://developer.android.google.cn/about/versions/pie/android-9.0?hl=zh-cn#on-device-systrace