当前位置: 首页 > news >正文

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)

  • 关键“易踩坑”

    1. target 33 起要请求 POST_NOTIFICATIONS
    2. 存储访问迁移到 READ_MEDIA_ + Photo Picker*;
    3. Android 14 起选定照片访问USE_FULL_SCREEN_INTENT 收紧
    4. Android 15 target=35 默认 Edge-to-Edge,必须处理 WindowInsets;
    5. Exact alarm(精确闹钟)自 12 起要声明/申请,14 起更严格;
    6. **前台服务类型(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)
  • 前台服务/闹钟SCHEDULE_EXACT_ALARM 精确闹钟需要特殊声明并受管控;前台服务进一步限制滥用。(Android Developers)

  • UX/APISplashScreen 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 必须声明正确用途(例如 mediaPlaybacklocation 等),并在合规时间窗口内启动/停止,减少系统与 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:工具链升级

  1. 统一 JDK 17(本地/CI):确保 JAVA_HOME 指向 17;Gradle JVM 设为 17。(Stack Overflow)

  2. 升级 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)
  3. Kotlin 升到 1.9.x/2.0(配套 Compose 编译器版本),先把 KAPT 逐步迁到 KSP(若依赖库支持)。

  4. R8/混淆:启用现代配置(full mode 默认),补齐 keep 规则;启用 Non-Transitive R 降低构建体积。

步骤 B:目标 API 与合规

  1. compileSdkVersion/targetSdkVersion35
  2. 产物转 AAB(如未使用);
  3. 引入 Play Integrity API;更新 Data safety 表单。(Stack Overflow)

步骤 C:权限与系统交互重构

  1. 通知:在真正需要时请求 POST_NOTIFICATIONS
  2. 媒体访问:默认用 Photo Picker;确需后台/批量扫描再请求 READ_MEDIA_*;支持 Android 14 的选定照片访问与重选;
  3. 蓝牙/Wi-Fi/附近设备:替换到新权限集;
  4. 闹钟/后台任务:梳理所有 setExact 场景,评估是否转 WorkManager/普通闹钟,必要时通过设置页引导授予精确闹钟;
  5. 前台服务类型:标注正确类型,避免滥用;
  6. 全屏意图:清理所有非来电/闹钟用途。(commonsware.com, Android Developers)

步骤 D:UI/导航现代化

  1. 边到边:在 onCreate 主动启用(旧系统),统一 Insets 处理;target=35 自动强制,确保 TopAppBar、BottomBar、列表首尾 padding 正确。

    override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)WindowCompat.enableEdgeToEdge(window) // 旧版本主动启用
    }
    
  2. 预测式返回:接入 OnBackInvokedCallback 或 AndroidX Navigation 的官方实现;对自定义转场实现“进度驱动”的过渡动画。

  3. 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_NOTIFICATIONSREAD_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/上架流程)

  1. 设备矩阵:至少覆盖 Android 13/14/15(Pixel 仿真 + 主流厂商),横竖屏/全面屏/折叠屏。
  2. 权限穿透测试:通知授权拒绝/允许后的业务可达性;Photo Picker 仅授予单张/多张/多次补选;蓝牙/Wi-Fi 权限拒绝兜底。
  3. 窗口适配:Edge-to-Edge 下状态栏/导航栏覆盖、输入法顶起、沉浸下列表首项/悬浮按钮可点。
  4. 导航一致性:Predictive Back 慢滑预览 + 快滑完成的转场一致性,无“空白/撕裂/回弹”。
  5. 闹钟/前台服务:Exact alarm 的授权状态变化(允许→撤销)与功能退化路径。
  6. 登录:Credential Manager 多种凭据切换(密码/Passkey/第三方)。
  7. 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)

http://www.lryc.cn/news/619408.html

相关文章:

  • 从0开始跟小甲鱼C语言视频使用linux一步步学习C语言(持续更新)8.13
  • 数据治理之元数据管理
  • TensorFlow实现回归分析详解
  • PyTorch基础(使用TensorFlow架构)
  • CSS counter-reset 与 counter-increment:用 CSS 实现自动编号的黑科技
  • 【贪心算法】加油站
  • TensorFlow深度学习实战(31)——强化学习仿真库Gymnasium
  • 【IntelliJ IDEA】如何在pom.xml中去除maven中未使用的依赖
  • 七大排序算法全解析:从入门到精通
  • 各种排序算法(一)
  • Java开发环境搭建(WIN+IDEA+Maven)
  • STM32的UART奇偶校验注意
  • C# xml UI格式化字符串
  • IDEA创建一个VUE项目
  • 基于人工智能和物联网融合跌倒监控系统(LW+源码+讲解+部署)
  • CW32L011电机开发板控制教程
  • 分布式与微服务宝典
  • js:13KB或者xxxkb、xxxMB\xxxtb\xxb等多种情况怎么获取后面的单位
  • FluxSelectMultiple 技术设计文档
  • 飞算JavaAI的中间件风暴:Redis + Kafka 全链路实战
  • docker network 与host的区别
  • 数据科学与爬虫技术学习笔记
  • 玩转Docker | 使用Docker部署WordPress网站服务
  • 【车联网kafka】Kafka核心架构与实战经验(第四篇)
  • 猿大师中间件:Chrome网页内嵌PhotoShop微信桌面应用程序
  • Jetson NX Python环境搭建:使用APT轻松安装NumPy, scikit-learn, OpenCV
  • java学习 leetcode 二分查找 图论
  • 图论理论部分
  • 【C++ STL】list详解和模拟
  • Day52--图论--101. 孤岛的总面积(卡码网),102. 沉没孤岛(卡码网),103. 水流问题(卡码网),104. 建造最大岛屿(卡码网)