Android 各版本迭代差异

作为一个 Android 开发者,了解Android 系统各个版本的变更,是再基础不过的要求了。毕竟,适配也是我们日常的工作之一,
面试时面试官也喜欢问类似的题目。

Android 12

Android 12 API 31

行为变更

  • 用户体验
    • 拉伸滚动效果
    • 应用启动画面
    • 网络 intent 解析
    • 沉浸模式下的手势导航改进
    • Display#getRealSize 和 getRealMetrics:废弃和限制
    • 多窗口模式下的所有应用
    • 大屏设备上的相机预览
    • 前台服务通知的用户体验延迟
  • 性能
    • 受限应用待机模式存储分区
  • 安全和隐私设置
    • 麦克风和摄像头切换开关
    • 麦克风和摄像头指示标志
    • 权限软件包可见性
    • 移除了 BouncyCastle 实现
    • 剪贴板访问通知
    • 应用无法关闭系统对话框
    • 不受信任的触摸事件被屏蔽
  • activity 生命周期
    • 按下“返回”按钮时,不再 finish 根启动器 activity
  • 图形和图片
    • 改进了刷新率切换

Android 11

Android 11 API 30

行为变更

  • 隐私设置
    • 单次授权:让用户可以选择授予更多对位置信息、麦克风和摄像头的临时访问权限。
    • 权限对话框的可见性:一再拒绝某项权限表示用户希望“不再询问”。
    • 数据访问审核:深入了解您的应用在何处访问私密数据,无论是在您的应用自己的代码中,还是在依赖库的代码中。
    • 系统提醒窗口权限:根据请求自动向某些类型的应用授予 SYSTEM_ALERT_WINDOW 权限。此外,包含 ACTION_MANAGE_OVERLAY_PERMISSION intent 操作的 intent 始终会将用户转至系统设置中的屏幕。
    • 永久 SIM 卡标识符:在 Android 11 及更高版本中,使用 getIccId() 方法访问不可重置的 ICCID 受到限制。该方法会返回一个非 null 的空字符串。如需唯一标识设备上安装的 SIM 卡,请改用 getSubscriptionId() 方法。订阅 ID 会提供一个索引值(从 1 开始),用于唯一识别已安装的 SIM 卡(包括实体 SIM 卡和电子 SIM 卡)。除非设备恢复出厂设置,否则此标识符的值对于给定 SIM 卡是保持不变的。
  • 针对 5G 的模拟器支持
  • 性能和调试
    • JobScheduler API 调用限制调试
    • 文件描述符排错程序 (fdsan)
  • 非 SDK 接口限制: 反射系统隐藏或限制方法,成员等将出现不可预期的异常

重大隐私权限变更

强制执行分区存储机制

以 Android 11 或更高版本为目标平台的应用始终会受分区存储行为的影响
以 Android 11 或更高版本为目标平台的应用,以及以 Android 10 为目标平台且未将 requestLegacyExternalStorage 设为 true 以停用分区存储的应用
更新您的应用以使用分区存储详细了解分区存储变更

单次授权

使用单次授权功能,用户可以授予对位置信息、麦克风和摄像头的临时访问权限
在 Android 11 或更高版本上运行且请求位置信息、麦克风或摄像头权限的应用
在尝试访问受某项权限保护的数据之前,检查您的应用是否具有该权限
遵循请求权限方面的最佳做法

自动重置权限

如果用户在 Android 11 或更高版本上几个月未与应用互动,系统会自动重置应用的敏感权限

以 Android 11 或更高版本为目标平台且在后台执行大部分工作的应用
要求用户阻止系统重置应用的权限详细了解自动重置权限

后台位置信息访问权限

Android 11 更改了用户向应用授予后台位置信息权限的方式

以 Android 11 或更高版本为目标平台且需要在后台访问位置信息的应用

通过对权限请求方法的多次单独调用,逐步请求在前台(粗略或精确)和后台访问位置信息的权限。必要时,说明用户授予该权限所能得到的益处
详细了解 Android 11 中的在后台访问位置信息的权限

软件包可见性

Android 11 更改了应用查询同一设备上的其他已安装应用及与之互动的方式

以 Android 11 或更高版本为目标平台且与设备上的其他已安装应用交互的应用

元素添加到应用的清单

详细了解软件包可见性

前台服务

Android 11 更改了前台服务访问位置信息、摄像头和麦克风相关数据的方式

在 Android 11 或更高版本上运行且在前台服务中访问位置信息、摄像头或麦克风的应用

分别针对需要访问摄像头和麦克风的前台服务,声明 camera 和 microphone 前台服务类型。但请注意,应用在后台运行时启动的前台服务通常无法访问位置信息、摄像头或麦克风。

详细了解前台服务的变更

Android 10

Android 10 API 29

  • 限制非 SDK 接口
  • 手势导航
  • NDK
    • 共享对象不得包含文本重定位
    • Bionic 库和动态链接器路径变更
    • 系统二进制文件/库会映射到只执行内存
  • WLAN 直连广播
  • WLAN 感知功能
  • 应用使用情况

  • 可折叠设备

  • 5G 网络
  • 通知中的智能回复
  • 深色主题

Android 9

Android 9.0 API 28 Pie

  • 利用 Wi-Fi RTT 进行室内定位
  • 显示屏缺口支持
  • 通知
  • 多摄像头支持和摄像头更新
  • 适用于可绘制对象和位图的 ImageDecoder
  • 动画:引入了 AnimatedImageDrawable 类,用于绘制和显示 GIF 和 WebP 动画图像
  • HDR VP9 视频、HEIF 图像压缩和 Media API
  • JobScheduler 中的流量费用敏感度
  • Neural Networks API 1.1

Android 8

Android 8.0 API 26 Oreo

行为变更

  • 后台执行限制
  • Android 后台位置限制
  • 应用快捷键
  • 语言区域和国际化
  • 通知
    • 提醒窗口: TYPE_APPLICATION_OVERLAY 窗口
    • 引入了通知渠道
  • 输入和导航
  • 网页表单自动填充
  • 网络连接和 HTTP(S) 连接
  • 安全性
  • 隐私性
  • 记录未捕获的异常

Android 7

Android 7.0 API 24 Nougat.
Android 7.0 提供新功能以提升性能、生产效率和安全性。通过新的系统行为测试您的应用,以节省电量和内存。充分利用多窗口 UI、直接回复通知等功能。

  • 电池和内存
    • 低电耗模式:增强了低电耗模式
    • Project Svelte:后台优化,移除了三项隐式广播,以帮助优化内存使用和电量消耗
  • 权限更改
    • 系统权限更改:私有目录被限制访问
  • NDK 应用链接至平台库

Android 6

Android 6.0 API 23 Marshmallow。主要变更如下

行为变更

  • 运行时权限
  • 低电耗模式和应用待机模式
  • 取消支持 Apache HTTP 客户端
  • BoringSSL
  • 硬件标识符访问权
  • 通知
  • 音频管理器变更:不再支持通过 AudioManager 类直接设置音量或将特定音频流静音
  • 文本选择
  • WLAN 和网络连接变更

API 变更

  • 【新增】指纹身份验证
  • 【新增】确认凭据
  • 应用链接
  • 【更新】直接共享
  • 语音交互
  • Assist API
  • 可采用的存储设备
  • 4K 显示模式
  • 主题化 ColorStateList
  • 音频功能
  • 视频功能
  • Android for Work

详细移步 传送门

Android 5

Android 5.1 API 22 Lollipop。 Android 5.x 是 Android 的一次大变更,主要有

  • Material Design
  • 通知管理:浮动通知等
  • Android Runtime (ART)
  • 高级连接
    • 蓝牙BLE
    • 多网络功能
    • NFC
  • 高性能图像,支持 Khronos OpenGL ES 3.1
  • 相机:全新的 Camera API
  • 更强大的音频功能:全新的音频采集设计可提供低延迟音频输入
  • 屏幕采集和共享
  • 新的传感器类型
    • 倾斜检测器
    • 心率传感器
    • 互动复合传感器:现在可以检测“唤醒”手势、“拿起”手势和“扫视”手势等特殊交互
  • Chromium WebView
  • 引入对 64位系统的支持
  • 显示绑定服务

Android 5.1,变更

  • 多 SIM 卡支持
  • 弃用的 HTTP 类:URLConnection 代替 AndroidHttpClient 等