欢迎关注我的公众号OpenFlutter,感谢
我最近加入了一个新项目👩💻。在等待客户端将我添加到主源代码期间,我运行了由一位同事在 GitHub 上发布的 Flutter 示例代码库项目。这个项目使用了 Flutter SDK 3.35.1 。在执行过程中,我注意到一些警告,表明某些库需要 Android SDK 36。

我最近加入了一个新项目👩💻。在等待客户将我添加到主源代码期间,我运行了一位同事在 GitHub 上发布的 Flutter 示例代码库项目。这个项目使用了 Flutter SDK 3.35.1 。在执行过程中,我注意到一些警告,表明某些库需要 Android SDK 36。
我联系了作者,请他帮忙将 Flutter 项目从 Android SDK 35 升级到 36。因为我在之前的项目中处理过类似的 SDK 升级,所以我记得一开始有多么令人困惑------不知道该选择哪个版本、依赖关系是什么,或者如何做出正确的决定而不浪费太多时间。
这就是为什么,在这篇文章中,我将一步一步地带你完成整个过程。我的目标是分享一套清晰的规则,以便下次你遇到同样的情况时,能更有信心地选择正确的版本,并顺利地应用升级。
让我们开始吧!🚀
这是项目当前的配置(在 Copilot 的帮助下):
csharp
Aspect | Value/Config |
|-----------------------|------------------------------------------------------------|
| Flutter SDK | 3.35.1 |
| CocoaPods (iOS) | platform :ios, '13.0' |
| Android Gradle Plugin | Flutter plugin |
| Gradle Version | 8.10.2 |
| AGP Version | (Managed by Flutter/Gradle, compatible with Gradle 8.10.2) |
| compileSdkVersion | 35 |
| minSdkVersion | 26 |
| targetSdkVersion | 35 |
| Java/Kotlin | Java 17 / JVM 17
迁移步骤
基于 Android 的当前要求,以下是主要步骤:
- 升级到 Android API 36
- 添加对 16KB 页大小的支持
- 启用 Edge-to-Edge 支持
实现
1. 升级到 Android API 36
步骤 1. 在 Android Studio 中安装 Android 16 SDK(通过 SDK 管理器)
你可以在 Android Studio 中手动安装 Android 16 SDK。
步骤 2. 更新 compileSdkVersion
和 targetSdkVersion

步骤 3. 升级 Android 构建工具和依赖项
为了查看 AGP (Android Gradle Plugin) 和 Kotlin 的兼容版本,我通常会先阅读发布说明------例如,Flutter 3.35 的新功能。
在这份文档中,有关于与 Android SDK 相关的具体改动说明,如下图所示。

接下来,我们来检查哪个 Gradle 版本与 Flutter 3.35.1 兼容。
验证这一点的最快方法是查看 wrapper/gradle-wrapper.properties
文件。

如果你想知道为什么项目正在使用这个版本,你可以直接在 Android Studio 中打开 Android 项目。就我个人而言,我使用 FVM(Flutter 版本管理器)来管理版本,这能让所有东西保持一致性,更轻松。

接下来,我们来审查当前配置的值,并确定需要更新哪些内容:
csharp
Android Gradle Plugin | Flutter plugin + Google Services + Crashlytics |
| Gradle Version | 8.10.2 |
| AGP Version | ??? (Managed by Flutter/Gradle, compatible with Gradle 8.10.2) |
| compileSdkVersion | 35 -> 36 |
| minSdkVersion | 26 |
| targetSdkVersion | 35 -> 36
| Java/Kotlin | Java 17 / JVM 17
为了验证哪些 AGP 版本与 Android SDK 36 兼容,我查阅了官方文档 👉 Android API level 所需工具的最低版本

为了更清晰地理解,同样值得阅读这部分 👉 升级 Gradle

经过验证,我们可以将它总结为以下图表:
依赖 | 最低版本要求 |
---|---|
Flutter 3.35.1 | Gradle ≥ 8.10.2 |
Android SDK 36 | AGP ≥ 8.9.1 |
AGP 8.9.1 | Gradle ≥ 8.11.1 |

所以,我们今天需要的解决方案是,同时使用 AGP 8.9.1 和 Gradle 8.11.1------这与 Flutter 3.35.1 完全兼容。一旦你理解了这些版本要求,你就能逐步解决在 Flutter 或 Android 项目中升级 SDK 时出现的典型问题。🧭
好消息是,你不需要手动搜索和调整每一个配置值。Android Studio 已经提供了一个工具来让这件事变得更容易。只需前往:Android Studio → Tools → AGP Upgrade Assistant...
→ 选择版本 8.9.1
。

完成迁移后,你可以检查本地历史记录来回顾文件更改。通常,你会看到以下文件发生了更新:
wrapper/gradle-wrapper.properties
settings.gradle


现在是时候清理并重建应用,看看有没有什么东西会坏掉了:
shell
flutter clean
flutter pub get
在这个项目中,我甚至不需要单独运行这两个命令------只需要一个 make sync
命令就搞定了。相当方便!这个代码库的设置非常便捷,让我不需要敲太多字。
⚠️ 但等等......弹出了一个警告!
vbnet
Warning: Flutter support for your project's Kotlin version (2.0.20) will soon be dropped. Please upgrade your Kotlin version to a version of at least 2.1.0 soon.
Alternatively, use the flag "--android-skip-build-dependency-validation" to bypass this check.
Potential fix: Your project's KGP version is typically defined in the plugins block of the `settings.gradle` file (/Users/ngoclan/techtus_base_flutter/android/settings.gradle), by a plugin with the id of org.jetbrains.kotlin.android.
If you don't see a plugins block, your project was likely created with an older template version, in which case it is most likely defined in the top-level build.gradle file (/Users/ngoclan/techtus_base_flutter/android/build.gradle) by the ext.kotlin_version property.
这个警告基本上是说你可以绕过它来隐藏这条消息😅,但更好的做法是尝试将 Kotlin 版本升级到 2.1.0。
在这样做之前,请确保查阅发布说明,了解语法或行为上的变化。对于大多数不依赖大量原生代码的 Flutter 项目来说,升级并不会造成任何大问题。然而,对于那些有大量 Kotlin 原生代码的项目,你应该格外小心,并彻底审查所有变更。
😗 一旦所有事情都搞定,你可能还会看到一些小的警告,但在现阶段,这都不是关键问题。
现在,项目在以下配置下成功运行:
- Flutter SDK: 3.35.1
- Android SDK: 36
- AGP: 8.9.1
- Gradle: 8.11.1
- Kotlin: 2.1.0
- JVM: 17
要了解更多关于 Kotlin 兼容性的细节,请查阅官方文档。
2. 支持 16KB 页大小
如果你在管理项目的 Google Play Console ,你可能已经注意到最近收到一个关于支持 16KB 页大小的新要求通知,如下图所示:

在这个 Flutter 项目中,我碰巧立即遇到了这个问题------特别是与 Isar 库(一个开源的本地数据库解决方案)相关。
解决这个问题的过程有点漫长,所以我已经把整个过程写在了另一篇文章里!
你也可以直接查看 PR中的配置更改。
dart
// Edge to Edge
await SystemChrome.setEnabledSystemUIMode(SystemUiMode.edgeToEdge);
3. 支持 Edge-to-Edge(全屏显示)
由于这个项目是从 SDK 35 升级到 36,所以配置已经就位。你可以参考:
- 在视图中实现 Edge-to-Edge 的内容显示 | Android 开发者
- 行为变更:面向 Android 16 或更高版本的应用 | Android 开发者
- Flutter 破坏性变更:默认 SystemUiMode 设置为 Edge-to-Edge
旧版 Android 上的 Edge-to-Edge
如果你想在旧设备上模拟同样的效果,你需要在 Android 和 Flutter 中额外添加配置。然而,从 Flutter 3.35.1 开始,当你调用适当的 API 时,Flutter 会自动处理 Edge-to-Edge。
如果你的屏幕已经包裹在 SafeArea
中,那你基本上是安全的。
但如果你只使用了 固定的内边距值**,那情况可能会出问题------比如,在 Android 15+ 上,你的 UI 元素可能会被 NavigationBar
遮挡。**
以下是一些需要注意的情况:
- 浮动操作按钮 (
Floating Action Buttons
) - 底部导航栏 (
BottomNavigationBar
) - 硬编码的底部内边距
- 底部抽屉中的按钮
测试并调整内边距
- 在 Android 15+ 设备/模拟器上运行你的应用。
- 检查屏幕顶部和底部的重叠情况。
- 在需要的地方增加
padding
或使用SafeArea
,确保 UI 元素没有被遮挡。
此外,我发现 Android Studio 提供了一个非常详细的 SDK 升级清单,涵盖了你需要注意的所有组件。你可以通过 Tools → Android SDK Upgrade Assistant
来访问它。让我们试一试吧!

参考文档
如果你想深入了解,以下是我在升级过程中参考的关键资源:
-
Flutter 3.35 发布说明 --- Flutter 3.35 的新功能
-
Android Gradle 插件 (AGP) --- 发布说明与 API 级别支持
-
Gradle 兼容性 --- 更新 Gradle
-
Android 中 Kotlin 支持 --- Kotlin 版本所需的 AGP、D8 和 R8 版本
-
支持 16KB 页大小 --- Google Play:迁移以支持 16KB 页大小
-
特别感谢作者\]提供了这个很棒的 [techtus_base_flutter](https://link.juejin.cn?target=https%3A%2F%2Fgithub.com%2Fmynavitechtus-minhnt3%2Ftechtus_base_flutter "https://github.com/mynavitechtus-minhnt3/techtus_base_flutter") 仓库!