Flutter集成Google Mobile Ads报错:无法获取JavascriptEngine
Flutter集成Google Mobile Ads加载失败(错误码0/3)问题描述
设备端加载测试广告始终返回错误码0,模拟器返回错误码3,设备端核心报错为Unable to obtain a JavascriptEngine.,相关日志:
E/chromium(26719): [ERROR:aw_browser_terminator.cc(154)] Renderer process (27080) crash detected (code -1). I/Ads (26719): Ad failed to load : 0 I/flutter (26719): error: LoadAdError(code: 0, domain: com.google.android.gms.ads, message: Unable to obtain a JavascriptEngine., responseInfo: ResponseInfo(responseId: null, mediationAdapterClassName: , adapterResponses: [], loadedAdapterResponseInfo: null), responseExtras: {})
当前使用依赖版本:google_mobile_ads: ^5.1.0
已配置内容:
权限及APP ID(AndroidManifest.xml)
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="com.google.android.gms.permission.AD_ID" /> <meta-data android:name="com.google.android.gms.ads.APPLICATION_ID" android:value="ca-app-pub-3940256099942544~3347511713"/>
Flutter初始化及广告加载代码
void main() async { WidgetsFlutterBinding.ensureInitialized(); MobileAds.instance.initialize(); // thing to add RequestConfiguration configuration = RequestConfiguration(testDeviceIds: deviceIds); MobileAds.instance.updateRequestConfiguration(configuration); await Firebase.initializeApp( options: DefaultFirebaseOptions.currentPlatform, ); runApp(const MyApp()); } loadAd() { _bannerAd = BannerAd( adUnitId: 'ca-app-pub-3940256099942544/6300978111', // adUnitId banner test request: const AdRequest(), size: AdSize.banner, listener: BannerAdListener( onAdLoaded: (ad) { debugPrint('$ad loaded.'); setState(() { _isLoaded = true; }); }, onAdFailedToLoad: (ad, err) { debugPrint('BannerAd failed to load: $err'); ad.dispose(); }, onAdOpened: (Ad ad) {}, onAdClosed: (Ad ad) {}, onAdImpression: (Ad ad) {}, ), )..load(); }
Android Gradle配置(app/build.gradle)
plugins { id "com.android.application" // START: FlutterFire Configuration id 'com.google.gms.google-services' // END: FlutterFire Configuration id "kotlin-android" id "dev.flutter.flutter-gradle-plugin" } def localProperties = new Properties() def localPropertiesFile = rootProject.file('local.properties') if (localPropertiesFile.exists()) { localPropertiesFile.withReader('UTF-8') { reader -> localProperties.load(reader) } } def flutterVersionCode = localProperties.getProperty('flutter.versionCode') if (flutterVersionCode == null) { flutterVersionCode = '1' } def flutterVersionName = localProperties.getProperty('flutter.versionName') if (flutterVersionName == null) { flutterVersionName = '1.0' } android { namespace "com.example.admob" compileSdk flutter.compileSdkVersion ndkVersion flutter.ndkVersion compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } kotlinOptions { jvmTarget = '1.8' } sourceSets { main.java.srcDirs += 'src/main/kotlin' } defaultConfig { applicationId "com.example.admob" minSdkVersion 21 targetSdkVersion flutter.targetSdkVersion versionCode flutterVersionCode.toInteger() versionName flutterVersionName } buildTypes { release { signingConfig signingConfigs.debug } } } flutter { source '../..' } dependencies { implementation 'com.google.android.gms:play-services-ads:23.0.0' }
解决方案
针对Unable to obtain a JavascriptEngine.错误,按以下步骤排查修复:
移除手动添加的Play Services Ads依赖
google_mobile_ads插件已自带对应依赖,手动添加implementation 'com.google.android.gms:play-services-ads:23.0.0'会导致版本冲突,直接删除这一行即可。升级google_mobile_ads版本
^5.1.0版本存在已知的JavascriptEngine兼容性问题,升级到最新稳定版(如^6.1.0及以上),新版本修复了多个广告加载时的引擎初始化异常。调整初始化顺序
确保MobileAds.instance.initialize()等待完成后再配置请求和加载广告,修改main函数:void main() async { WidgetsFlutterBinding.ensureInitialized(); // 等待广告SDK初始化完成 await MobileAds.instance.initialize(); RequestConfiguration configuration = RequestConfiguration(testDeviceIds: deviceIds); MobileAds.instance.updateRequestConfiguration(configuration); await Firebase.initializeApp( options: DefaultFirebaseOptions.currentPlatform, ); runApp(const MyApp()); }检查设备WebView兼容性
Chromium渲染进程崩溃说明设备WebView版本过低或损坏:- 打开设备「设置-应用-Android System WebView」,检查并更新到最新版本;
- 若更新后仍报错,尝试清除WebView的缓存和数据。
验证minSdkVersion配置
部分Android 5.1(API 21)设备存在WebView兼容性问题,测试时优先使用Android 7.0+设备,或暂时将minSdkVersion提升到24再测试。
内容的提问来源于stack exchange,提问作者Anderson Ribeiro
相关产品推荐
相关产品推荐

