Android 版本差异速查表(开发者视角)
版本 | 代号 | 发布时间 | 颠覆性变化 | 开发影响 |
---|---|---|---|---|
Android 5.0 | Lollipop | 2014 | ▶ Material Design 发布 ▶ ART 取代 Dalvik (性能提升) ▶ 通知栏重构 | 必须适配 Material 设计规范 64 位支持开始 |
Android 6.0 | Marshmallow | 2015 | ▶ 运行时权限(危险权限需动态申请) ▶ Doze 省电模式 | 权限逻辑重写 后台服务可能被延迟 |
Android 7.0 | Nougat | 2016 | ▶ 分屏多窗口 ▶ Vulkan API (高性能图形) ▶ 文件级加密 | 需处理 Activity 生命周期变化 游戏开发可切 Vulkan 提升性能 |
Android 8.0 | Oreo | 2017 | ▶ 通知渠道(Notification Channels) ▶ 后台执行限制 ▶ Project Treble | 通知必须分组 后台服务需用 JobScheduler 驱动与系统解耦(加速升级) |
Android 9.0 | Pie | 2018 | ▶ 全面屏手势导航 ▶ 限制非 SDK 接口 ▶ Wi-Fi RTT 室内定位 | 反射调用私有 API 会崩溃 需适配刘海屏 |
Android 10 | Q | 2019 | ▶ 深色主题(强制适配) ▶ 分区存储(Scoped Storage) ▶ 隐私增强 | 文件访问需用 MediaStore 禁止读取 IMEI 等设备标识符 |
Android 11 | R | 2020 | ▶ 单次权限授权 ▶ 自动重置未使用权限 ▶ 5G 支持强化 | 需处理用户"仅本次允许"逻辑 长期未用 App 权限自动回收 |
Android 12 | S | 2021 | ▶ Material You 设计语言 ▶ 隐私指示器(摄像头/麦克风访问提示) ▶ 性能等级 API | UI 需适配动态主题 后台访问敏感硬件需弹窗说明 |
Android 13 | T | 2022 | ▶ 精细化媒体权限 (图片/视频/音频单独授权) ▶ 通知运行时权限 ▶ 低功耗蓝牙 | 媒体访问需按类型申请 通知开关需用户手动开启 |
Android 14 | U | 2023 | ▶ 禁止安装 SDK<24 的应用 ▶ 后台启动限制强化 ▶ 语法性别化 | 最低兼容提升至 Android 6.0 禁止从后台启动 Activity |
⚠️ 四大开发重灾区(适配成本最高)
-
运行时权限(6.0+)
scss// 旧代码(直接调用)→ 崩溃! camera.takePicture(); // 正确写法 if (checkSelfPermission(CAMERA) != GRANTED) { requestPermissions(new String[]{CAMERA}, REQ_CODE); }
-
分区存储(10.0+)
- 访问媒体文件:必须用
MediaStore
- 访问下载文件:用
ACTION_OPEN_DOCUMENT
- 应用专属目录:
context.getExternalFilesDir()
无需权限
- 访问媒体文件:必须用
-
后台限制(8.0+)
- 禁止在后台创建
Service
→ 改用JobIntentService
或WorkManager
- 后台定位需
ACCESS_BACKGROUND_LOCATION
- 禁止在后台创建
-
隐私沙盒(12.0+)
- 禁止获取 MAC 地址 → 改用
AdvertisingId
- 剪贴板访问需用户焦点(非后台读取)
- 禁止获取 MAC 地址 → 改用
📊 各版本市占率(2024年数据)
版本 | 占比 | 适配建议 |
---|---|---|
12-14 | 38% | 必须优先适配,使用最新 API |
10-11 | 29% | 重点测试分区存储和权限逻辑 |
8-9 | 18% | 注意后台限制和通知渠道 |
<8 | 15% | 可考虑放弃(游戏/特殊行业除外) |
🔧 兼容性最佳实践
-
Target SDK 必须设最新版(否则新系统会以兼容模式运行,可能触发异常)
arduinoandroid { targetSdkVersion 34 // Android 14 }
-
使用 Jetpack 组件解决碎片化
- 权限:
androidx.activity.result.contract.ActivityResultContracts
- 存储:
androidx.documentfile.provider.DocumentFile
- 后台任务:
WorkManager
- 权限:
-
检测系统版本差异化处理
arduinoif (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { // 使用 Scoped Storage API } else { // 传统 File 方式 }
总结 :从 Marshmallow(6.0) 开始,Android 进入 隐私保护+后台控制 时代,开发者需重点解决 权限、存储、后台、隐私 四大适配难题。新项目建议最低兼容至 Android 8.0(Oreo),并采用 Jetpack 架构组件降低兼容成本。