Flutter安卓模拟器运行报错java.lang.NoSuchMethodError求解决
安卓模拟器运行Flutter应用失败问题排查与解决
问题概述
在安卓模拟器上运行Flutter应用时出现崩溃,抛出java.lang.NoSuchMethodError错误,同时偶发出现「与设备失去连接」「连接服务协议失败」的问题。
错误详情
致命崩溃日志
Running Gradle task 'assembleDebug'... 60.6s √ Built build\app\outputs\flutter-apk\app-debug.apk. Installing ..\build\app\outputs\flutter-apk\app.apk... 36.2s W/FlutterActivityAndFragmentDelegate(11217): A splash screen was provided to Flutter, but this is deprecated. See flutter.dev/go/android-splash-migration for migration steps. D/FlutterLocationService(11217): Creating service. D/FlutterLocationService(11217): Binding to location service. E/AndroidRuntime(11217): FATAL EXCEPTION: main E/AndroidRuntime(11217): Process: com.praveeshramroop.athena, PID: 11217 E/AndroidRuntime(11217): java.lang.NoSuchMethodError: No static method getMainExecutor(Landroid/content/Context;)Ljava/util/concurrent/Executor; in class Landroidx/core/content/ContextCompat; or its super classes (declaration of 'androidx.core.content.ContextCompat' appears in /data/app/com.praveeshramroop.athena-xNhfD9FuVpNs2XnASDlC4w==/base.apk) E/AndroidRuntime(11217): at io.flutter.embedding.android.FlutterView.onAttachedToWindow(FlutterView.java:506) E/AndroidRuntime(11217): at android.view.View.dispatchAttachedToWindow(View.java:18347) E/AndroidRuntime(11217): at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3397) E/AndroidRuntime(11217): at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3404) E/AndroidRuntime(11217): at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3404) E/AndroidRuntime(11217): at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3404) E/AndroidRuntime(11217): at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3404) E/AndroidRuntime(11217): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1761) E/AndroidRuntime(11217): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1460) E/AndroidRuntime(11217): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7183) E/AndroidRuntime(11217): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:949) E/AndroidRuntime(11217): at android.view.Choreographer.doCallbacks(Choreographer.java:761) E/AndroidRuntime(11217): at android.view.Choreographer.doFrame(Choreographer.java:696) E/AndroidRuntime(11217): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:935) E/AndroidRuntime(11217): at android.os.Handler.handleCallback(Handler.java:873) E/AndroidRuntime(11217): at android.os.Handler.dispatchMessage(Handler.java:99) E/AndroidRuntime(11217): at android.os.Looper.loop(Looper.java:193) E/AndroidRuntime(11217): at android.app.ActivityThread.main(ActivityThread.java:6669) E/AndroidRuntime(11217): at java.lang.reflect.Method.invoke(Native Method) E/AndroidRuntime(11217): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) E/AndroidRuntime(11217): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
偶发错误
- 与设备失去连接
- 连接服务协议失败
相关代码文件
pubspec.yaml
dependencies: flutter: sdk: flutter cloud_firestore: cupertino_icons: null firebase_auth: firebase_core: firebase_messaging: flutter_google_places: null flutter_spinkit: ^5.1.0 geocoder: geoflutterfire: geolocator: google_maps_flutter: null google_maps_webservice: null http: null location: ^4.4.0 modal_bottom_sheet: ^2.0.1 percent_indicator: ^4.2.1 provider: null rxdart: any shared_preferences: ^2.0.15 uuid: null url_launcher: ^6.0.5 get_it: ^7.2.0 plugin_platform_interface: geolocator_platform_interface: geocoding: ^2.0.4 google_api_availability: google_api_headers: ^1.1.1 mockito: ^5.2.0
main.dart
import 'package:flutter/material.dart'; import 'package:txapita/providers/app_state.dart'; import 'package:txapita/providers/user.dart'; import 'package:txapita/screens/login.dart'; import 'package:txapita/screens/splash.dart'; import 'locators/service_locator.dart'; import 'screens/home.dart'; import 'package:provider/provider.dart'; import 'package:firebase_core/firebase_core.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp(); setupLocator(); return runApp(MultiProvider( providers: [ ChangeNotifierProvider<AppStateProvider>.value( value: AppStateProvider(), ), ChangeNotifierProvider<UserProvider>.value( value: UserProvider.initialize(), ), ], child: MaterialApp( debugShowCheckedModeBanner: false, title: 'Txapita', theme: ThemeData( primarySwatch: Colors.red, ), home: MyApp(), ), )); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { UserProvider auth = Provider.of<UserProvider>(context); switch (auth.status) { case Status.Uninitialized: return Splash(); case Status.Unauthenticated: case Status.Authenticating: return LoginScreen(); case Status.Authenticated: return MyHomePage(); default: return LoginScreen(); } } }
解决方法
1. 修复AndroidX核心依赖版本问题
getMainExecutor方法是AndroidX Core 1.2.0及以上版本才提供的,当前项目依赖的AndroidX Core版本过低,需统一指定版本:
- 打开
android/build.gradle文件,在ext代码块中添加AndroidX Core版本配置:
ext { androidxCoreVersion = '1.10.1' }
- 确保项目中所有依赖的AndroidX Core版本一致,避免冲突。
2. 规范并更新Flutter依赖
- 给pubspec.yaml中未指定版本的依赖添加最新稳定版号,删除
null值配置(例如cupertino_icons: null改为cupertino_icons: ^1.0.6); - 执行命令
flutter pub upgrade更新所有依赖到最新兼容版本。
3. 清理项目缓存
- 执行命令
flutter clean清理Flutter项目缓存; - 进入android目录,执行
./gradlew clean清理Gradle缓存; - 重启模拟器和开发IDE。
4. 解决偶发设备连接问题
- 执行命令
adb kill-server && adb start-server重置ADB服务; - 重启安卓模拟器,确保模拟器网络与主机正常连通;
- 执行命令
flutter upgrade将Flutter SDK升级到最新稳定版。
内容的提问来源于stack exchange,提问作者Praveesh Ramroop
相关产品推荐
相关产品推荐

