升级 targetSdk 至 35 的注意事项
问题描述
当开发者将 Android 应用的 targetSdkVersion
从 34 升级至 35 后,Android Studio 会显示以下提示消息:
"It looks like you just edited the targetSdkVersion from 34 to 35 in the editor. Be sure to consult the documentation on the behaviors that change as result of this. The Android SDK Upgrade Assistant can help with safely migrating."
核心疑问:
- 这是否意味着代码存在问题?
- 如何定位需要修改的代码?
- 为何提示中的 "Android SDK Upgrade Assistant" 没有实际功能?
核心解答
这是标准提示吗?
关键结论
该提示是 Android Studio 的标准提醒,并非表示代码存在错误。应用成功编译运行表明目标SDK升级在技术上已完成。
为什么需要此提示?
每个 Android SDK 版本升级都会引入:
- 系统行为变更(如权限管理、后台限制)
- API 弃用或签名变更
- 隐私和安全政策调整
即使应用能编译运行,未经检测的行为变更可能导致:
- 前台服务崩溃
- 权限相关功能失效
- 特定设备上的兼容性问题
"Android SDK Upgrade Assistant"是什么?
该名称容易引起误解。实际指:
- 官方文档入口:提供 SDK 升级的完整行为变更清单
- 无自动化工具功能:目前仅作为文档导航存在
- 访问路径:
- Android Studio:
Help > Migrate to Android X...
附近入口 - 直接访问:Android 14 开发者文档
- Android Studio:
实际作用
此“助手”不扫描代码或提供自动修复,纯属文档集合。需开发者手动核对变更项。
操作指南
必需检查项
- 核对行为变更清单:markdown
- [ ] 前台服务类型 (Foreground Service) - [ ] 隐式广播限制 - [ ] 安全存储变更 (Storage Access) - [ ] 应用安装块变更 (Package Installation Block)
- 重点检测模块:
- 后台任务执行组件(JobScheduler/AlarmManager)
- 文件读写和共享操作
- 通知权限处理(
NotificationManager
) - 动态代码加载(DCL)和反射调用
检测潜在问题的方法
通过 Android Studio 的 Logcat 筛选:
adb logcat | grep "ChangedBehavior"
搜索警告日志,定位涉及 API 35 行为变更的代码位置。
何时提示消失?
触发条件
Android Studio 在以下任一操作后不再显示该提示:
- 同步 Gradle 时未检测到明显兼容错误
- 开发者查阅过官方迁移文档
- 项目构建成功后首次运行
最佳实践总结
- 阶段性升级策略:gradle
// build.gradle.kts 渐进式升级 android { compileSdk = 34 targetSdk = 34 // 生产版本 targetSdkPreview = "35" // 测试分支使用预览版 }
- 自动化检测:
- 启用
StrictMode
检测 API 违规
javaStrictMode.VmPolicy policy = new StrictMode.VmPolicy.Builder() .detectLeakedRegistrationObjects() .build(); StrictMode.setVmPolicy(policy);
- 启用
- 兼容性测试流程:
- 在搭载 Android 14 的测试设备上覆盖所有核心场景
- 重点测试后台任务/权限弹窗/文件上传功能
结论
升级目标 SDK 后:
- ✅ 标准提示 不表示代码错误
- 🔧 必须手动核对 Android 14 行为变更文档
- ⚠️ 忽略此步骤可能导致生产环境崩溃
- 🔍 使用
Logcat
筛选和StrictMode
辅助检测变更影响
长期建议
建立常规模块级别的兼容性检查表,无需每次升级时全量筛查代码。