You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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版本过低或损坏:

    1. 打开设备「设置-应用-Android System WebView」,检查并更新到最新版本;
    2. 若更新后仍报错,尝试清除WebView的缓存和数据。
  • 验证minSdkVersion配置
    部分Android 5.1(API 21)设备存在WebView兼容性问题,测试时优先使用Android 7.0+设备,或暂时将minSdkVersion提升到24再测试。

内容的提问来源于stack exchange,提问作者Anderson Ribeiro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 23:57:38