Flutter升级compileSdkVersion33后在Android 12L模拟器因方法缺失崩溃
Flutter升级compileSdkVersion至33后模拟器崩溃的解决思路
将Flutter项目的compileSdkVersion升级至33后,应用在模拟器中崩溃,但新建同版本的Flutter项目无异常,且对比两个项目的gradle.build和AndroidManifest.xml未发现差异,求解决思路。
Flutter版本信息
Doctor summary (to see all details, run flutter doctor -v): [✓] Flutter (Channel stable, 3.3.5, on macOS 12.6 21G115 darwin-arm, locale de-DE) [✓] Android toolchain - develop for Android devices (Android SDK version 32.1.0-rc1) [✓] Xcode - develop for iOS and macOS (Xcode 14.0.1) [✓] Chrome - develop for the web [✓] Android Studio (version 2021.3) [✓] IntelliJ IDEA Ultimate Edition (version 2022.2.2) [✓] VS Code (version 1.72.2) [✓] Connected device (3 available) [✓] HTTP Host Availability
崩溃错误日志
D/FlutterLocationService(13862): Binding to location service. E/AndroidRuntime(13862): FATAL EXCEPTION: main E/AndroidRuntime(13862): Process: de.roegmbh.checkit, PID: 13862 E/AndroidRuntime(13862): java.lang.NoSuchMethodError: No interface method addWindowLayoutInfoListener(Landroid/app/Activity;Lj$/util/function/Consumer;)V in class Landroidx/window/extensions/layout/WindowLayoutComponent; or its super classes (declaration of 'androidx.window.extensions.layout.WindowLayoutComponent' appears in /system_ext/framework/androidx.window.extensions.jar) E/AndroidRuntime(13862): at androidx.window.layout.ExtensionWindowLayoutInfoBackend.registerLayoutChangeCallback(ExtensionWindowLayoutInfoBackend.kt:68) E/AndroidRuntime(13862): at androidx.window.layout.WindowInfoTrackerImpl$windowLayoutInfo$1.invokeSuspend(WindowInfoTrackerImpl.kt:52) E/AndroidRuntime(13862): at androidx.window.layout.WindowInfoTrackerImpl$windowLayoutInfo$1.invoke(Unknown Source:8) E/AndroidRuntime(13862): at androidx.window.layout.WindowInfoTrackerImpl$windowLayoutInfo$1.invoke(Unknown Source:4) E/AndroidRuntime(13862): at kotlinx.coroutines.flow.SafeFlow.collectSafely(Builders.kt:61) E/AndroidRuntime(13862): at kotlinx.coroutines.flow.AbstractFlow.collect(Flow.kt:212) E/AndroidRuntime(13862): at androidx.window.java.layout.WindowInfoTrackerCallbackAdapter$addListener$1$1.invokeSuspend(WindowInfoTrackerCallbackAdapter.kt:96) E/AndroidRuntime(13862): at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) E/AndroidRuntime(13862): at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106) E/AndroidRuntime(13862): at android.os.Handler.handleCallback(Handler.java:942) E/AndroidRuntime(13862): at android.os.Handler.dispatchMessage(Handler.java:99) E/AndroidRuntime(13862): at android.os.Looper.loopOnce(Looper.java:201) E/AndroidRuntime(13862): at android.os.Looper.loop(Looper.java:288) E/AndroidRuntime(13862): at android.app.ActivityThread.main(ActivityThread.java:7898) E/AndroidRuntime(13862): at java.lang.reflect.Method.invoke(Native Method) E/AndroidRuntime(13862): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) E/AndroidRuntime(13862): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)
解决思路
从错误日志看,崩溃根源是androidx.window库的方法找不到,属于依赖版本不兼容问题,可按以下步骤排查:
- 统一androidx.window依赖版本:在项目根目录的
android/build.gradle中,通过allprojects的resolutionStrategy强制指定androidx.window系列库的版本,比如适配compileSdk33的稳定版:allprojects { repositories { // ... 其他仓库配置 } configurations.all { resolutionStrategy { force 'androidx.window:window:1.1.0' force 'androidx.window:window-java:1.1.0' force 'androidx.window:window-extensions:1.1.0' } } } - 对比依赖树差异:分别在旧项目和新项目中执行
flutter pub deps,或者用Android Studio的File > Project Structure > Dependencies查看依赖树,找出两个项目中androidx.window及相关依赖的版本差异,将旧项目的依赖版本对齐新项目。 - 升级Flutter插件:检查项目中用到的插件(比如日志里的FlutterLocationService对应的location插件),旧版插件可能未适配compileSdk33,导致依赖的androidx库版本过低,更新插件到最新兼容版本。
- 清理构建缓存:执行
flutter clean,再进入android目录执行./gradlew clean,删除缓存的旧构建文件后重新编译项目。 - 检查Gradle配置一致性:对比新项目和旧项目的
gradle-wrapper.properties中的Gradle版本、android/build.gradle中的Android Gradle Plugin版本,确保compileSdk33使用对应的兼容版本(比如AGP 7.4+适配compileSdk33)。
内容的提问来源于stack exchange,提问作者KlausSzilvas
相关产品推荐
相关产品推荐

