Google Play 的目标 API 级别 36 要求意味着,任何以低于 Android 16 为目标构建的版本都无法发布。截至 2026 年 10 月,Play 会拒绝所有目标级别较低的新应用和更新,通常提示 Target SDK of artifact is too low。收到政策警告的应用可以申请延期,但延期在 2026 年 11 月 1 日终止。本指南介绍延期还能给你什么、如何把 Expo、Flutter 和 React Native 升级到 API 36,以及升级后最容易出问题的地方。
目标 API 级别 36 要求到底会阻止什么?
它阻止的是提交。自 2026 年 8 月 31 日起,除非以 API 36 为目标,否则你无法上传新的手机应用或更新。已上架且目标 API 为 35 或更高的应用仍然完全可用,包括对新用户。
根据 Google 的目标 API 级别要求,“新应用和应用更新必须以 Android 16(API 级别 36)或更高版本为目标,才能提交到 Google Play。”不同设备类型的要求不同,唯一的完全豁免是仅在单一组织内部分发的永久私有应用。
| 设备类型 | 新应用和更新(自 2026 年 8 月 31 日起) | 现有应用保持完全可用所需的目标级别 |
|---|---|---|
| 手机、平板、Android Auto | API 36 | API 35 或更高 |
| Wear OS | API 35 | API 34 或更高 |
| Android Automotive OS | API 35 | API 32 或更高 |
| Android TV | API 34 | API 33 或更高 |
| Android XR | API 34 | API 34 或更高 |
低于这些级别的现有应用“将仅在 Android 系统版本等于或低于应用目标 API 级别的设备上可用”。已经安装的用户可以照常使用。但使用较新手机的用户会看到该应用“是为旧版 Android 打造的”提示。
2026 年 11 月 1 日之前还能申请延期吗?
只有在 Play 已向你的应用发送政策警告、并且申请表单仍然显示的情况下才可以。即便如此,延期最晚也只到 2026 年 11 月 1 日,所以它只是为一个快完成的修复多争取几天,而不是新的计划。
Google 表示,会向受影响的应用“通过通知发送延期申请表单链接”,并且该表单“可在‘政策状态’页面中对应警告或问题的详情页找到”。已经合规的应用不会看到该表单。
- 打开 Play 管理中心并选择该应用。
- 在收件箱或“通知”中查找目标 API 级别相关消息。如果有,点击其中的链接。
- 如果没有,前往“政策状态”,打开目标 API 级别的警告或问题,在详情页中查找延期申请表单。
- 为每个受影响的应用分别填写表单。每个应用都有各自的警告。
- 无论延期是否获批,都应计划在 2026 年 11 月 1 日之前上传 API 36 构建版本。该日期之后,更新必须以 API 36 为目标。
如何将 Expo、Flutter 和 React Native 升级到 API 36?
最干净的做法是升级到已默认以 API 36 为目标的框架版本:Expo SDK 54、React Native 0.81 或 Flutter 3.38。如果暂时无法升级,也可以手动改高数字,但那样你就得自己处理 Android 16 的行为变更。
| 技术栈 | 默认以 API 36 为目标的起始版本 | 数值所在位置 | 无法升级时的手动方案 |
|---|---|---|---|
| Expo(托管 / CNG) | SDK 54(React Native 0.81) | 由 prebuild 生成;可用 expo-build-properties 覆盖 | 在 expo-build-properties 插件中设置 targetSdkVersion: 36 和 compileSdkVersion: 36 |
| React Native(裸项目) | 0.81 | android/build.gradle | 将 compileSdk 和 targetSdk 设为 36,然后在 manifest 中停用预测性返回 |
| Flutter | 3.38(flutter.targetSdkVersion = 36) | android/app/build.gradle(.kts) | 将硬编码的 35 改为 36 或 flutter.targetSdkVersion |
Expo。 SDK 54 更新日志指出,SDK 54 和 React Native 0.81“现已以 Android 16 为目标”。使用 npx expo install expo@^54.0.0 --fix 升级,运行 npx expo-doctor@latest;如果你使用持续原生生成(CNG),“请删除为旧版 SDK 生成的 android 和 ios 目录”。在 SDK 53 上,你可以尝试通过 expo-build-properties 插件设置 targetSdkVersion: 36,但 React Native 0.79 仍通过 onBackPressed 处理返回,所以发布前请先阅读下一节。
Flutter。 Flutter 3.38 发布说明列出的默认值为 flutter.compileSdkVersion(API 36)和 flutter.targetSdkVersion(API 36),并“强烈建议你在构建文件中使用 Flutter SDK 提供的 API 级别变量”。3.38 版本还要求至少 Java 17。如果应用模块中硬编码了 targetSdk = 35,升级 Flutter 并不会改变它,所以请检查该文件。
裸 React Native 项目。 在 android/build.gradle 中将 compileSdkVersion 和 targetSdkVersion 设为 36。在 0.81 及更高版本上,基本就完成了。在更早的版本上,还需在 AndroidManifest.xml 的 <application> 中添加 android:enableOnBackInvokedCallback="false"。否则,硬件返回键和返回手势会绕过你的 JavaScript 导航。
应用开始以 Android 16 为目标后,哪些地方会出问题?
最常出问题的是返回导航和大屏布局。以 API 36 为目标后,Android 不再调用 onBackPressed,不再允许停用边到边(edge-to-edge)显示,并且在宽度至少 600dp 的屏幕上忽略方向和尺寸调整锁定。
以下是 Google Android 16 行为变更中对跨平台应用影响最大的几项:
- 预测性返回:“不再调用
onBackPressed,也不再分发KeyEvent.KEYCODE_BACK。”设置android:enableOnBackInvokedCallback="false"是临时的停用方案。 - 边到边显示:
windowOptOutEdgeToEdgeEnforcement已被“弃用并停用”,因此页眉或底部按钮可能被状态栏或手势栏遮挡。 - 大屏:在 600dp 及更宽的屏幕上,
screenOrientation、resizableActivity和宽高比限制会被忽略,可能导致仅竖屏的布局被拉伸。游戏不受此限制。PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY是临时的停用方案,“在以 API 级别 37 为目标时将不再适用”。 - 文本:
elegantTextHeight会被忽略,这可能改变阿拉伯文、泰文、泰米尔文及其他几种文字的行高。 - 健康传感器:
BODY_SENSORS被细分的健康权限取代,例如READ_HEART_RATE。
其他开发者在迁移到 API 36 时遇到了什么问题?
目前的公开报告显示了两类问题:返回键行为在没有任何报错的情况下发生变化,以及某些库导致 Play 实际收到的应用包目标级别与项目文件中写的不一致。
Audius(React Native 0.79)。 在拉取请求 #14635 中,Audius 团队表示 Google Play 两次拒绝了 Android 1.5.186 版本的上传,提示 Target SDK of artifact is too low。他们将 compileSdk 和 targetSdk 从 35 改为 36,将构建工具设为 36.0.0,并添加了 android.suppressUnsupportedCompileSdk=36,因为“RN 0.79 锁定了 AGP 8.8”。他们还设置了 enableOnBackInvokedCallback="false",因为不这样做的话,返回操作“会绕过 React Navigation”。后来升级到 React Native 0.81 后,另一个 PR 移除了这项停用设置,因为 0.81 会自行注册 OnBackPressedCallback。
一个 Flutter 3.35.2 应用。 在 Flutter issue #174516 中,一位开发者在 Gradle 和 manifest 中都设置了 targetSdk 36,但 Play 管理中心仍提示“你的应用包以 SDK 34 为目标,但使用了无法用于该版本的 Play Core 库”。移除旧的 com.google.android.play:core:1.10.3 库后又出现了 R8“Missing classes”错误。修复这些错误后,又遇到“你无法发布此版本,因为它不允许任何现有用户升级到新添加的应用包”。最终,他们添加了 ProGuard keep 规则、显式设置 minSdk,并关闭了语言、屏幕密度和 ABI 拆分,应用包才被接受,代价是下载体积变大。
共同的教训是:改掉 Gradle 里的数字并不代表大功告成。Audius 需要修复运行时行为,而那位 Flutter 开发者需要修复一个改变了 Play 从应用包读取内容的依赖。请检查构建产物,并在 Android 16 设备上测试,而不只是看配置文件。
上传前如何检查 API 36 构建版本?
直接从发布版应用包中读取目标级别,然后把应用包放到内部测试或封闭测试轨道,在 Android 16 上检查返回导航、边距(insets)和平板布局。被拒或线上 bug 耗费的时间远多于这些检查。
实例:一个目标为 API 35、还需要再发布一次更新的 Expo SDK 53 应用。
- 运行
npx expo install expo@^54.0.0 --fix,然后运行npx expo-doctor@latest,修复它报告的所有问题。 - 如果项目使用持续原生生成(CNG),删除旧的
android和ios文件夹后重新构建。否则,手动应用原生层的升级改动。 - 构建发布版 AAB,例如使用
eas build -p android --profile production。 - 用
bundletool dump manifest --bundle app.aab --xpath /manifest/uses-sdk/@android:targetSdkVersion确认目标级别,输出应为36。 - 上传到内部测试。在 Android 16 手机上,在每个嵌套页面按返回键,检查页眉和底部按钮没有被系统栏遮挡,并旋转平板或可调整尺寸的模拟器。
- 推送到正式版,并在版本说明中提及 Android 16 相关修复。
为了加快测试,可以参考我们的 Google Play 封闭测试指南中的测试人员设置,并从我们的版本说明示例中借用更新文案。如果你更希望把发布工作交给别人,我们的 App Store 提交服务涵盖 Play 管理中心和 App Store Connect,两个商店合计 $599。开发者账号费用另计。
常见问题
如果错过了 2026 年 11 月 1 日的目标 API 延期,会怎样?
你当前的商品详情会继续保留。目标为 API 35 或更高的手机应用仍对现有用户和新用户可用。在应用包以 Android 16(API 36)为目标之前,Play 管理中心会拒绝任何新版本,包括紧急 bug 修复。低于 API 35 的应用只能安装在运行该 Android 版本或更旧版本的设备上。
Wear OS 和 Android TV 应用需要以 API 36 为目标吗?
不需要。截至 2026 年 10 月,新的 Wear OS 和 Android Automotive OS 应用及更新必须以 API 35 为目标,Android TV 和 Android XR 应用必须以 API 34 为目标。只有手机、平板和 Android Auto 应用需要 API 36。唯一的完全豁免是仅在单一组织内部分发的永久私有应用。
不升级 Expo SDK 能以 API 36 为目标吗?
在 SDK 53 上,你可以通过 expo-build-properties 插件将 targetSdkVersion 和 compileSdkVersion 设为 36,也有开发者这样做过。但 SDK 53 使用的 React Native 0.79 仍通过 onBackPressed 传递返回操作,而在以 API 36 为目标时 Android 16 不再调用它。你需要将 enableOnBackInvokedCallback 设为 false 来停用预测性返回。升级到 SDK 54 才是官方支持的路径。
compileSdkVersion 和 targetSdkVersion 有什么区别?
compileSdkVersion 是代码编译所依据的 Android API 版本。targetSdkVersion 告诉 Android 你的应用已适配哪个版本的行为,Google Play 会强制检查它。compileSdk 必须等于或高于 targetSdk,所以把目标改为 36 就意味着要针对 API 36 或更高版本编译。例如,Expo SDK 58 针对 37 编译,目标为 36。
为什么改了 build.gradle 之后,Play 管理中心仍提示我的应用目标 API 级别过旧?
Play 从你上传的应用包中读取目标级别,而不是从源文件读取。其他模块中的硬编码值、过时的插件,或旧版 Play Core 之类的库,都可能改变合并后的 manifest。对发布版 AAB 运行 bundletool dump manifest 查看真实的 targetSdkVersion,并确认上传的是新构建而不是旧的产物。
来源与延伸阅读
政策会变化。提交前请查阅官方文档。
- Google Play 应用的目标 API 级别要求(Play 管理中心帮助) ↗核查于 2026年10月30日
- 行为变更:以 Android 16 或更高版本为目标的应用(Android Developers) ↗核查于 2026年10月30日
- Expo SDK 54 更新日志 ↗核查于 2026年10月30日
- Flutter 3.38 新功能 ↗核查于 2026年10月30日
- fix(mobile): target Android SDK 36,AudiusProject/apps PR #14635 ↗核查于 2026年10月30日
- Flutter 3.35.2 无视显式覆盖强制使用 SDK 34,flutter/flutter issue #174516 ↗核查于 2026年10月30日


