迁移到空安全后应用无法编译,release模式下flutter build apk执行失败
我的应用在调试模式下可以正常构建,但在发布模式下无法构建,flutter build apk命令执行失败,控制台输出如下编译器报错:
D:\All Data\Softwares\Latest Flutter\flutter\.pub-cache\hosted\pub.dartlang.org\google_maps_flutter-2.0.11\android\src\main\java\io\flutter\plugins\googlemaps\GoogleMapsPlugin.java:19: error: cannot find symbol import io.flutter.embedding.engine.plugins.lifecycle.FlutterLifecycleAdapter; ^ symbol: class FlutterLifecycleAdapter location: package io.flutter.embedding.engine.plugins.lifecycle D:\All Data\Softwares\Latest Flutter\flutter\.pub-cache\hosted\pub.dartlang.org\google_maps_flutter-2.0.11\android\src\main\java\io\flutter\plugins\googlemaps\GoogleMapsPlugin.java:92: error: cannot find symbol lifecycle = FlutterLifecycleAdapter.getActivityLifecycle(binding); ^ symbol: variable FlutterLifecycleAdapter location: class GoogleMapsPlugin Note: D:\All Data\Softwares\Latest Flutter\flutter\.pub-cache\hosted\pub.dartlang.org\google_maps_flutter-2.0.11\android\src\main\java\io\flutter\plugins\googlemaps\Convert.java uses or overrides a deprecated API. Note: Recompile with -Xlint:deprecation for details. Note: D:\All Data\Softwares\Latest Flutter\flutter\.pub-cache\hosted\pub.dartlang.org\google_maps_flutter-2.0.11\android\src\main\java\io\flutter\plugins\googlemaps\TileProviderController.java uses unchecked or unsafe operations. Note: Recompile with -Xlint:unchecked for details. 2 errors FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':google_maps_flutter:compileReleaseJavaWithJavac'.
已尝试操作
- 删除pubspec.lock文件,执行flutter clean后重新运行flutter pub get,问题未解决
- 找到报错对应的GoogleMapsPlugin.java文件,删除标红的报错代码,依旧没有解决问题
注意:迁移到空安全之前,应用可以正常完成发布构建。
这个报错的核心原因是当前使用的google_maps_flutter:2.0.11版本和你的Flutter SDK版本不兼容,FlutterLifecycleAdapter类在你升级后的Flutter SDK中已经被调整了包路径或者移除,刚好迁移空安全的操作触发了版本不匹配问题。按以下步骤操作即可解决:
- 优先升级
google_maps_flutter依赖版本
打开项目根目录的pubspec.yaml文件,将google_maps_flutter的版本约束改为适配当前Flutter SDK的兼容版本,比如空安全场景下可以使用^2.5.0或者更高的稳定版本,不要固定死2.0.11版本。
修改完成后依次执行以下命令清理缓存并拉取新依赖:
flutter clean flutter pub get
之后重新执行flutter build apk测试构建结果。
2. 检查Android编译配置适配
如果升级依赖后仍有报错,打开android/app/build.gradle文件,将compileSdkVersion参数调整到31及以上,高版本的google_maps_flutter要求编译SDK版本不低于31。
同时确认android/build.gradle中的Android Gradle插件版本和Flutter SDK适配,Flutter 2.x及以上版本建议使用4.1.0及以上的Gradle插件版本,对应gradle-wrapper的版本不低于6.5。
3. 不升级依赖的临时修复方案
如果业务原因暂时不能升级google_maps_flutter版本,可以手动修改报错代码适配新版SDK:
找到报错的GoogleMapsPlugin.java文件,删除import io.flutter.embedding.engine.plugins.lifecycle.FlutterLifecycleAdapter;这行导入代码,再将lifecycle = FlutterLifecycleAdapter.getActivityLifecycle(binding);替换为:
lifecycle = binding.getLifecycle();
修改后重新构建即可正常编译。
内容的提问来源于stack exchange,提问作者Bill_The_Coder

