Android 8.0(Oreo)新功能和行为变更
Android 8.0(Oreo)带来了多项新功能和行为变更,为开发者提供了更多控制和用户体验优化的机会。
新功能
画中画模式
Android 8.0 引入了画中画(PIP)模式,允许应用以多窗口形式展示视频播放等内容,提升用户体验。该功能最初用于 Android TV,但现在也适用于其他 Android 设备。
通知渠道
引入了通知渠道,允许开发者为每种通知类型创建自定义渠道,用户可以根据需求管理通知的显示方式,这提高了通知的可控性和用户体验。
自动调整 TextView 的大小
Android 8.0 允许根据 TextView 的大小自动调整文本大小,适应不同屏幕和动态内容的展示需求,简化了文本展示的优化工作。
自适应启动器图标
引入了自适应启动器图标,支持在不同设备上显示各种形状和视觉效果的应用图标,提升了应用在不同设备上的视觉一致性和品牌展示。
JobScheduler 改进
Android 8.0 对 JobScheduler 进行了改进,使其更易用和更高效,有助于开发者更好地管理和调度后台任务,以符合新的后台执行限制。
新的电话权限
Android 8.0(API 级别 26)引入了若干与电话相关的新权限:
ANSWER_PHONE_CALLS 权限允许您的应用以编程方式接听来电。如需在您的应用中处理来电,您可以使用 acceptRingingCall() 方法。 READ_PHONE_NUMBERS 权限会授予您的应用对设备中存储的电话号码的读取权限。
这些权限被归类为危险权限,并且都属于 PHONE 权限组。
加密更新
Android 8.1 在加密方面进行了更新,优先使用 Conscrypt 实现新的加密算法,提高了数据安全性和加密效率。
更多
更多功能请参考官方文档:Android 8.0 功能和 API。
行为变更
针对所有应用的变更
在 Android 8.0(API 级别 26)平台上运行时,这些行为变更将影响所有应用,无论这些应用以哪个 API 级别为目标平台。所有开发者都应查看这些变更,并修改其应用以正确支持这些变更(如果适用)。
后台执行限制
为延长电池续航时间,Android 8.0 引入了严格的后台执行限制。系统会限制后台应用的行为,包括对后台服务的访问和隐式广播接收器的注册,开发者需要适应新的限制策略。
Android 后台位置限制
为了节省电池电量、用户体验和系统运行状况,在搭载 Android 8.0 的设备上使用后台应用时,后台应用接收位置信息更新的频率会降低。
这些更改会影响以下 API:
- Fused Location Provider (FLP)
- 地理围栏
- GNSS Measurements
- Location Manager
- Wi-Fi Manager
提醒窗口类型限制
应用如果使用 SYSTEM_ALERT_WINDOW 权限显示提醒窗口,需使用新的窗口类型(TYPE_APPLICATION_OVERLAY),不再支持旧的系统窗口类型。
安装未知来源 APK
Android 可防止用户无意中从受信任的第一方应用商店(例如 Google Play)以外的位置下载和安装应用。Android 会阻止此类安装,除非用户选择允许安装来自其他来源的应用。
如需详细了解如何安装未知应用,请参阅未知应用安装权限指南。
隐私权更新
-
对于在 OTA 之前安装到 Android 8.0(API 级别 26)(API 级别 26)版本的应用,除非卸载并在 OTA 后重新安装,否则 ANDROID_ID 的值将保持不变。如需在 OTA 之后在卸载过程中保留值,开发者可以使用 键值对备份来关联旧值和新值。
-
对于安装在搭载 Android 8.0 的设备上的应用,ANDROID_ID 的值现在按应用签名密钥和用户确定。对于应用签名密钥、用户和设备的每个组合,ANDROID_ID 的值都是唯一的。 因此,在同一设备上运行具有不同签名密钥的应用时,不会再看到相同的 Android ID(即使对于同一用户也是如此)。
-
只要签名密钥相同(并且应用未在 OTA 之前安装到 Android 8.0 版本),ANDROID_ID 的值在软件包卸载或重新安装时就不会改变。
-
即使系统更新导致软件包签名密钥发生变化,ANDROID_ID 的值也不会改变。
-
ANDROID_ID 现在按应用签名密钥和用户确定,不同签名密钥的应用在同一设备上不再共享相同的 Android ID,增强了设备和用户数据的安全性和隐私保护。
以 Android 8.0 为目标平台的应用
这些行为变更仅影响以 Android 8.0(API 级别 26)或更高版本为目标平台的应用。针对 Android 8.0 进行编译或者将 targetSdkVersion 设置为 Android 8.0 或更高版本的应用必须修改其应用,以正确支持这些行为(如果适用)。
明文流量
如果您的应用的网络安全配置选择不支持明文流量,则应用的 WebView 对象将无法通过 HTTP 访问网站。每个 WebView 对象必须改用 HTTPS。
安装未知来源APK
我们已移除允许未知来源系统设置,并由安装未知应用权限管理来自未知来源的未知应用安装。如需详细了解这项新权限,请参阅未知应用安装权限指南。
隐私权
- 如需获取 DNS 服务器等网络信息,具有 ACCESS_NETWORK_STATE 权限的应用可以注册 NetworkRequest 或 NetworkCallback 对象。这些类在 Android 5.0(API 级别 21)及更高版本中提供。
- 废弃了 Build.SERIAL。需要知道硬件序列号的应用应改用新的 Build.getSerial() 方法,该方法需要 READ_PHONE_STATE 权限。
- LauncherApps API 不再允许工作资料应用获取有关主资料的信息。当用户位于工作资料中时,LauncherApps API 的行为就像同一资料组内的其他资料中未安装任何应用一样。与之前一样,尝试访问不相关的个人资料会导致 SecurityException。
权限
在Android 8.0之前,如果应用在运行时请求权限并且被授予,该应用还会自动获得属于同一权限组且已在清单中注册的其他权限。Android 8.0修正了这一行为,系统只会向应用授予其明确请求的权限。
更多行为变更请参考官方文档:Android 8.0 行为变更