Android 在 2020-2025 都做哪些更新?
好的!下面这份「2021–2025(近5年)Android 开发全景复盘 + 迁移实操清单」专门为一位 2022 年后暂别开发、2025 年想回归的 Android App 层工程师准备。重点覆盖:平台版本演进、权限与行为变更、Google Play 合规要求、工具链(AGP/Gradle/JDK/Kotlin/Studio)、Jetpack/Compose 体系、新特性(Credential Manager、Privacy Sandbox、Health Connect 等),以及一套可落地的升级路线图与逐项适配检查表。
一、5 年总览(TL;DR)
-
平台版本:Android 12(API 31/12L=32)→ Android 13(API 33)→ Android 14(API 34)→ Android 15(API 35)。13 起引入通知运行时权限、细粒度媒体权限、照片选择器、每应用语言;14 起选定照片访问、预测式返回(Predictive Back)、Health Connect 纳入系统、全屏意图权限更严;15 起边到边(Edge-to-Edge)默认强制(当 targetSdk=35),预测式返回动画默认开放等。(commonsware.com, Android Developers)
-
Google Play 目标 API 要求(每年提升):2025 年新上架与更新都需target API 35(Android 15),分别自 2025-08-31/2025-11-01 起执行;历史:2024 年要求 target 34,2023 年要求 target 33。(Android Developers, support.google.com)
-
工具链跃迁:AGP 7→8→(8.x/9.x),JDK 17 成为默认要求(AGP 8 起),Gradle 7→8,Android Studio 从 Arctic Fox→…→Hedgehog / Iguana / Jellyfish / Koala 等;Kotlin 演进至 2.0(K2 编译器),Compose 稳定到 1.6/1.7+ 与 Material 3、性能与可测试性显著增强。(Stack Overflow, Android Developers Blog)
-
合规 & 生态:App Bundle 早已强制用于新应用上架(自 2021-08),Data safety 表单、Play Integrity API(取代 SafetyNet)、Privacy Sandbox on Android 正式化。(Stack Overflow, Android Developers)
-
关键“易踩坑”:
- target 33 起要请求 POST_NOTIFICATIONS;
- 存储访问迁移到 READ_MEDIA_ + Photo Picker*;
- Android 14 起选定照片访问与USE_FULL_SCREEN_INTENT 收紧;
- Android 15 target=35 默认 Edge-to-Edge,必须处理 WindowInsets;
- Exact alarm(精确闹钟)自 12 起要声明/申请,14 起更严格;
- **前台服务类型(FGS Types)**与后台启动限制逐年趋严。(Android Developers, blog.google)
二、平台版本演进与行为变化
Android 12 / 12L(API 31/32,2021–2022)
-
权限/隐私
- 位置:引入近似位置选择(粗略 vs 精确),你请求
ACCESS_FINE_LOCATION
时系统可授予近似。 - 蓝牙:新增运行时权限
BLUETOOTH_SCAN/CONNECT/ADVERTISE
(归类“附近设备”),不再需要定位即可扫描/连接。(support.google.com, Android Developers)
- 位置:引入近似位置选择(粗略 vs 精确),你请求
-
前台服务/闹钟:
SCHEDULE_EXACT_ALARM
精确闹钟需要特殊声明并受管控;前台服务进一步限制滥用。(Android Developers) -
UX/API:SplashScreen API 全面统一冷启动动画;对可折叠/大屏的 12L 适配(分栏、任务栏等)。(Stack Overflow)
Android 13(API 33,2022)
-
全新权限:
POST_NOTIFICATIONS
(通知运行时权限);- 媒体细分:
READ_MEDIA_IMAGES/VIDEO/AUDIO
取代广义存储读权限; NEARBY_WIFI_DEVICES
(无需定位使用 Wi-Fi 相关能力)。(commonsware.com, Android Developers, GeeksforGeeks)
-
照片选择器(Photo Picker):官方跨版本回溯;用户仅授予选中的媒体项访问权。(Android Developers)
-
国际化:**每应用语言(App Locale)**一键切换,无需系统语言跟随。(Medium)
Android 14(API 34,2023)
- 选定照片访问:新增
READ_MEDIA_VISUAL_USER_SELECTED
,支持后续追加授权的媒体项(用户可重选/补充)。 - 预测式返回(Predictive Back):提供进度 API + 过渡动画;AndroidX 支持。
- Health Connect 纳入系统模块:无需单独安装,统一健康数据的读写与授权。
- 全屏意图更严:
USE_FULL_SCREEN_INTENT
仅限来电/闹钟等极少数场景,Play 也会收紧。
Android 15(API 35,2024/2025)
- Edge-to-Edge 默认强制(target=35):系统栏透明、内容铺满屏幕;必须正确处理 WindowInsets。
- 预测式返回动画默认开放:不再需要开发者选项开关,凡已接入 Predictive Back 的应用都会展示系统动画。
- 更多媒体/隐私与性能改良:详见官方“Android 15 变化”汇总。(docs.gradle.org)
三、Google Play 合规(target API / AAB / Integrity / Sandbox)
- 目标 API 每年升级:2025 年起,新应用/应用更新分别在 8/31、11/1 强制
targetSdk=35
;2024 年是 34,2023 年是 33。不要等到最后一天才切。(Android Developers, support.google.com) - Android App Bundle(AAB):自 2021-08 新应用上架强制 AAB。老项目如仍在 APK 产物链条上,需转产线为 AAB。(Stack Overflow)
- Play Integrity API:替代 SafetyNet Attestation,用于防作弊/完整性校验。
- Privacy Sandbox on Android:广告归因/兴趣主题与 SDK Runtime 正在推广,尽量使用官方广告 SDK 新版与 Jetpack/Play 服务提供的接口。(Android Developers)
四、工具链与语言栈(AGP / Gradle / JDK / Kotlin / Studio)
版本脉络与硬性要求
- JDK 17 成为 AGP 8 的最低要求(构建工具运行所需),你的 CI 与本地 JDK 都要升到 17(注意 Gradle/AGP 兼容矩阵)。(Stack Overflow)
- Gradle 7→8:API 清理、配置缓存、性能更好;注意升级指南中的不兼容变更。
- R8:近期版本默认 full mode,体积与优化更 aggressive,混淆 keep 规则务必校准。
- Non-Transitive R class:现代项目普遍启用/默认,减少方法数/加速编译(资源引用需要本模块可见)。(工程实践参考)
Kotlin 与 Compose
-
**Kotlin 2.0(K2 编译器)**稳定,性能与分析更好;Android 官方全线跟进。
-
Jetpack Compose:
- 2021 年 1.0 稳定,如今已迭代至 1.6/1.7+,配合 Material 3、Glance(小组件)、Navigation、性能/可测试性全面成熟。(support.google.com, Android Developers, median.co)
- Baseline Profiles / Macrobenchmark:极大提升冷启动与滚动性能(特别是 Compose UI)。(ProAndroidDev, Reddit)
五、权限与行为变化:从“老项目”到“现代项目”的必做迁移
下列每项尽量给出“旧 → 新”的映射、示例代码或注意点,覆盖 12→13→14→15 的关键变化。
1)通知权限
-
旧:直接
NotificationManager
;新:Android 13 起需要POST_NOTIFICATIONS
运行时授权。if (Build.VERSION.SDK_INT >= 33 &&ContextCompat.checkSelfPermission(ctx, Manifest.permission.POST_NOTIFICATIONS)!= PackageManager.PERMISSION_GRANTED) {requestPermissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS) }
提示:把首次弹窗放在真正需要发通知的时刻,提高通过率。(commonsware.com)
2)媒体读取与照片选择
-
旧:
READ_EXTERNAL_STORAGE
+ 自己做媒体选择; -
Android 13:改为
READ_MEDIA_IMAGES/VIDEO/AUDIO
; -
Android 13+:Photo Picker:调用系统选择器,仅拿到用户选中的项(可向后兼容到更低系统,通过 Play 服务)。
-
Android 14:选定照片访问(
READ_MEDIA_VISUAL_USER_SELECTED
),支持再次选择追加授权项。// Photo Picker (13+ 原生 / 低版本走兼容) val pickMedia = registerForActivityResult(PickVisualMedia()) { uri -> ... } pickMedia.launch(PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageAndVideo))
优先用 Photo Picker;只有真正需要“批量/后台媒体访问”再请求 READ_MEDIA_*。(Android Developers)
3)蓝牙与邻近/Wi-Fi
- 旧:蓝牙扫描常被迫请求位置;
- 新:Android 12 起蓝牙权限三分(SCAN/CONNECT/ADVERTISE);Android 13 起 Wi-Fi 新增
NEARBY_WIFI_DEVICES
,无须位置。(Android Developers, GeeksforGeeks)
4)精确闹钟(Exact Alarm)
- 12 起
SCHEDULE_EXACT_ALARM
需要声明/用户允许;14 起又进一步收紧与优化路径(尽量用WorkManager + setExactAndAllowWhileIdle()
/AlarmManager
的替代策略,并提供合理说明入口)。(Android Developers, blog.google)
5)前台服务(FGS)与后台启动限制
- 避免在后台启动 Activity;FGS Types 必须声明正确用途(例如
mediaPlayback
、location
等),并在合规时间窗口内启动/停止,减少系统与 Play 的合规风险。(Android Developers)
6)全屏通知(Full-screen intent)
- 14 起,
USE_FULL_SCREEN_INTENT
严格仅限来电/闹钟等极端场景,Play 也会撤销不当默认授予。不要用它来顶替常规通知。
7)预测式返回(Predictive Back)
-
13/14 可通过开发者选项开启预览;15 起默认对已接入的应用展示动画。
- 迁移建议:使用
OnBackInvokedCallback
,并在 AndroidX Navigation/Transitions 上实现进度联动动画。 - Compose/Views 都需处理返回过渡,避免“黑屏闪烁”。
- 迁移建议:使用
8)边到边显示(Edge-to-Edge)
-
Android 15 + target=35 时系统将强制 E2E:状态栏/导航栏透明,内容铺满屏幕。
- 迁移要点:处理
WindowInsets
,为顶部 AppBar、底部导航/按钮留出安全间距。 - 旧系统可调用
WindowCompat.enableEdgeToEdge(window)
主动开启以统一体验。
- 迁移要点:处理
六、登录与安全:Credential Manager / Play Integrity
- Credential Manager:统一密码、Passkeys、联登录入口,极大简化登录逻辑与 UI;建议迁移自自研/旧版账号选择器至
androidx.credentials
。 - Play Integrity API:替代 SafetyNet,做设备/应用/账号层面的完整性校验,保护付费与联机场景。
七、健康与敏感数据:Health Connect
- Android 14 起 Health Connect 作为系统模块存在,统一健康/运动数据的本地存储与授权;对接可读写步数、心率、睡眠等(用户细粒度控制来源与去向)。
八、Jetpack / Compose 生态的关键进展
-
Compose 体系:Material 3 主题化、性能(Lazy 列表、文本、绘制管线)持续优化;配套 Navigation、Paging、Lifecycle、Room、WorkManager 等 Jetpack 组件全量适配。(Android Developers, median.co)
-
性能工具:
- Baseline Profiles:在安装时预编译关键路径,显著降低首次启动/滚动卡顿;
- Macrobenchmark:稳定复现实测与回归对比。(ProAndroidDev, Reddit)
九、从 2022 老项目到 2025 现代栈:一步到位的升级路线图
目标:在 2–4 周 内把一个 2022 年的 App 顺利升级到 targetSdk=35,兼容 Android 15 的强制 Edge-to-Edge、预测式返回动画、权限/合规等要求,并通过 Play 上架。
步骤 A:工具链升级
-
统一 JDK 17(本地/CI):确保
JAVA_HOME
指向 17;Gradle JVM 设为 17。(Stack Overflow) -
升级 Gradle/AGP:
- Gradle 至 8.x(按项目插件兼容性选择 8.5/8.7/8.8+);
- AGP 8.x+(8.3/8.4/8.5/8.6/8.7/8.8/8.9/8.10/8.11/9.0 系列按官方兼容表选择);
- 逐项处理构建脚本 DSL/API 变更与弃用警告。(Stack Overflow, Android Developers)
-
Kotlin 升到 1.9.x/2.0(配套 Compose 编译器版本),先把 KAPT 逐步迁到 KSP(若依赖库支持)。
-
R8/混淆:启用现代配置(full mode 默认),补齐 keep 规则;启用 Non-Transitive R 降低构建体积。
步骤 B:目标 API 与合规
compileSdkVersion
/targetSdkVersion
→ 35;- 产物转 AAB(如未使用);
- 引入 Play Integrity API;更新 Data safety 表单。(Stack Overflow)
步骤 C:权限与系统交互重构
- 通知:在真正需要时请求
POST_NOTIFICATIONS
; - 媒体访问:默认用 Photo Picker;确需后台/批量扫描再请求
READ_MEDIA_*
;支持 Android 14 的选定照片访问与重选; - 蓝牙/Wi-Fi/附近设备:替换到新权限集;
- 闹钟/后台任务:梳理所有
setExact
场景,评估是否转 WorkManager/普通闹钟,必要时通过设置页引导授予精确闹钟; - 前台服务类型:标注正确类型,避免滥用;
- 全屏意图:清理所有非来电/闹钟用途。(commonsware.com, Android Developers)
步骤 D:UI/导航现代化
-
边到边:在
onCreate
主动启用(旧系统),统一 Insets 处理;target=35 自动强制,确保 TopAppBar、BottomBar、列表首尾 padding 正确。override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)WindowCompat.enableEdgeToEdge(window) // 旧版本主动启用 }
-
预测式返回:接入
OnBackInvokedCallback
或 AndroidX Navigation 的官方实现;对自定义转场实现“进度驱动”的过渡动画。 -
Compose:Material 3 主题、
Modifier.windowInsetsPadding()
等统一适配;启用 Baseline Profiles 提升首帧。(Android Developers, ProAndroidDev)
步骤 E:登录与健康
- 迁移登录到 Credential Manager;
- 需要健身/健康能力的,接入 Health Connect(在 Android 14+ 即系统内置)。
十、按版本的适配检查清单(可直接拷到你们的跟踪文档)
✅ Android 13(API 33)
- 通知权限
POST_NOTIFICATIONS
的触发时机/文案完成 - 媒体权限改为
READ_MEDIA_*
;默认 Photo Picker - Wi-Fi 能力改用
NEARBY_WIFI_DEVICES
(若涉及) - 每应用语言(App Locale)设置入口与持久化
- 蓝牙权限是否仍然错误依赖位置(应迁到 12 模型)
- 视觉/音频播放器适配新媒体通知样式
- target=33 下行为变更回归通过(启动、广播、剪贴板提示等)(commonsware.com, Android Developers, GeeksforGeeks, Medium)
✅ Android 14(API 34)
- 选定照片访问
READ_MEDIA_VISUAL_USER_SELECTED
与重选流程 - 预测式返回:是否已接入过渡动画或至少不出现闪烁
-
USE_FULL_SCREEN_INTENT
合规自查(仅来电/闹钟) - Health Connect 数据授权/类型/隐私弹窗
- 设备兼容:Ultra HDR、相机扩展等(如涉及)
✅ Android 15(API 35)
- Edge-to-Edge:所有页面 Insets 适配(沉浸栏下的点击区域/输入法与底部导航冲突)
- 预测式返回动画默认展示:自定义转场与返回栈一致性
- target=35 行为变更全面回归(窗口 inset、手势导航细节)
十一、典型代码片段(可直接落地)
1)一站式权限适配(通知 + 照片选择)
class MainActivity : ComponentActivity() {private val requestNotif = registerForActivityResult(ActivityResultContracts.RequestPermission()) { granted ->if (granted) pushWelcomeNotification() else toast("你可在设置里重新开启通知")}private val pickMedia = registerForActivityResult(ActivityResultContracts.PickVisualMedia()) { uri: Uri? ->uri?.let { handlePickedMedia(it) }}override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)WindowCompat.enableEdgeToEdge(window) // 统一 E2EsetContent { /* Compose UI with Insets padding */ }}fun requestPostNotificationsIfNeeded() {if (Build.VERSION.SDK_INT >= 33 &&ContextCompat.checkSelfPermission(this, Manifest.permission.POST_NOTIFICATIONS)!= PackageManager.PERMISSION_GRANTED) {requestNotif.launch(Manifest.permission.POST_NOTIFICATIONS)}}fun pickPhotoOrVideo() {pickMedia.launch(PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageAndVideo))}
}
(通知与照片权限要点分别参考 Android 13 的通知权限与官方 Photo Picker 文档。)(commonsware.com, Android Developers)
2)预测式返回(Views/Activity 方向)
class DetailActivity : AppCompatActivity() {private val backCallback = OnBackInvokedCallback {finish() // 或交给 NavController}override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)if (Build.VERSION.SDK_INT >= 33) {onBackInvokedDispatcher.registerOnBackInvokedCallback(OnBackInvokedDispatcher.PRIORITY_DEFAULT, backCallback)}}
}
(如使用 AndroidX Navigation/Transitions,可实现进度驱动的转场动画以匹配 Predictive Back。)
3)精确闹钟最小化依赖
// 优先 WorkManager;只有确需“到点必达”才考虑 SCHEDULE_EXACT_ALARM,
// 并在设置页提供开关说明与跳转。
if (Build.VERSION.SDK_INT >= 31) {val alarmManager = getSystemService(AlarmManager::class.java)// 对 exact 的使用要可解释、可关闭
}
(详见 12/14 对 SCHEDULE_EXACT_ALARM 的行为与限制说明。)(Android Developers, blog.google)
4)Credential Manager(Passkeys/密码/第三方)
val request = GetCredentialRequest(listOf(GetPasswordOption(), GetPublicKeyCredentialOption() // Passkeys
))
credentialManager.getCredentialAsync(this, request, null) { result ->// 统一处理登录凭据
}
(用 androidx.credentials
库;大幅简化登录体验与跨设备 Key。)
十二、性能与质量:你值得立刻启用的东西
- Baseline Profiles:与 Compose/Views 通吃,冷启动/切屏明显提升;
- Macrobenchmark:构建基准场景(滚动、过渡、渲染帧),用于 CI 回归;
- R8 full mode:在校准 keep 后通常能安全减小体积与加速;
- Non-Transitive R:模块化更清晰,编译更快。(ProAndroidDev, Reddit)
十三、版本/能力对照速记
- API 31/32(Android 12/12L):近似位置、蓝牙新权限、SplashScreen、Exact Alarm 限制。(Android Developers, Stack Overflow)
- API 33(Android 13):
POST_NOTIFICATIONS
、READ_MEDIA_*
、NEARBY_WIFI_DEVICES
、Photo Picker、App Locale。(commonsware.com, Android Developers, GeeksforGeeks) - API 34(Android 14):选定照片访问、Predictive Back、Health Connect 系统化、
USE_FULL_SCREEN_INTENT
收紧。 - API 35(Android 15):Edge-to-Edge 强制(target=35)、预测式返回动画默认开放。
十四、回归与发布清单(用于你们 QA/上架流程)
- 设备矩阵:至少覆盖 Android 13/14/15(Pixel 仿真 + 主流厂商),横竖屏/全面屏/折叠屏。
- 权限穿透测试:通知授权拒绝/允许后的业务可达性;Photo Picker 仅授予单张/多张/多次补选;蓝牙/Wi-Fi 权限拒绝兜底。
- 窗口适配:Edge-to-Edge 下状态栏/导航栏覆盖、输入法顶起、沉浸下列表首项/悬浮按钮可点。
- 导航一致性:Predictive Back 慢滑预览 + 快滑完成的转场一致性,无“空白/撕裂/回弹”。
- 闹钟/前台服务:Exact alarm 的授权状态变化(允许→撤销)与功能退化路径。
- 登录:Credential Manager 多种凭据切换(密码/Passkey/第三方)。
- Play 合规:target API、AAB、Data safety、Play Integrity。(Android Developers, support.google.com, Stack Overflow)
十五、给你的快速起步建议
- 先把 工具链 升上去(JDK17/Gradle8/AGP8/Kotlin≥1.9 或 2.0),并跑通构建与基础 UI。(Stack Overflow)
- 把 targetSdk 直接拉到 35,一口气解决 13/14/15 的“必改项”。(Android Developers)
- 优先完成 权限与系统交互 的重构(通知/媒体/蓝牙/Wi-Fi/闹钟/FGS/全屏意图)。(commonsware.com, Android Developers)
- UI 层全面采用 Edge-to-Edge + Predictive Back,并建立 Insets 与过渡动画的统一抽象(Views/Compose 均可用)。
- 性能侧立刻加上 Baseline Profiles + Macrobenchmark;登录侧迁到 Credential Manager;涉及健康数据的尽量用 Health Connect 官方管道。(ProAndroidDev, Reddit)