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

Expo导出React Native安卓应用集成Firebase后崩溃:NoClassDefFoundError求助

React Native Android 崩溃:java.lang.NoClassDefFoundError 针对 RNAdMobPackage 的解决方案

从你给出的崩溃日志和Gradle配置来看,这个问题的核心是AdMob相关的类无法被正确加载,具体是RNPublisherBannerViewManager——它属于Expo导出项目中的AdMob模块。下面我会一步步分析原因并给出具体的修复步骤:

可能的原因分析

  1. 依赖版本不兼容:你使用的expoview:22.0.0是比较旧的版本(2018年左右),而Firebase依赖用的是10.0.1,两者依赖的Google Play Services版本不一致,导致类加载失败。
  2. 错误的依赖排除规则:你在expoview的依赖配置中排除了整个com.google.android.gms组,而AdMob模块恰恰需要依赖Google Play Services的Ads组件,这直接导致了相关类缺失。
  3. MultiDex配置不完整:虽然你开启了multiDexEnabled true,但可能没有完成MultiDex的完整配置,导致部分类无法被正确加载。

具体修复步骤

1. 统一Google Play Services与Firebase版本

Expo expoview:22.0.0对应的兼容Google Play Services版本是11.8.0,所以你需要把Firebase依赖升级到相同版本,避免版本冲突:

// 修改Firebase依赖版本为11.8.0
compile('com.google.firebase:firebase-core:11.8.0') {
    force = true;
}
compile ('com.google.firebase:firebase-messaging:11.8.0') {
    force = true;
}

// 添加AdMob所需的Play Services Ads依赖
compile 'com.google.android.gms:play-services-ads:11.8.0'

2. 修复expoview的依赖排除规则

移除对整个com.google.android.gms组的排除,只保留必要的冲突排除:

compile('host.exp.exponent:expoview:22.0.0@aar') {
    exclude group: 'com.facebook.android', module: 'facebook-android-sdk'
    exclude group: 'com.facebook.android', module: 'audience-network-sdk'
    exclude group: 'io.nlopez.smartlocation', module: 'library'
    exclude module: 'com.android.support:appcompat-v7' // 移除版本号,避免精准匹配冲突
    // 移除这一行:exclude group: 'com.google.android.gms'
    transitive = true;
}

3. 完善MultiDex配置

虽然你已经开启了multiDexEnabled true,但还需要确保Application类正确集成MultiDex:

  • 如果没有自定义Application类,修改AndroidManifest.xml中的application标签:
    <application
        android:name="android.support.multidex.MultiDexApplication"
        <!-- 其他原有属性 -->
    >
    
  • 如果有自定义Application类,在类中添加:
    import android.support.multidex.MultiDex;
    import android.content.Context;
    
    public class YourApplication extends Application {
        @Override
        protected void attachBaseContext(Context base) {
            super.attachBaseContext(base);
            MultiDex.install(this);
        }
    }
    

4. 清理缓存并重新构建项目

执行以下命令清理Gradle缓存并重新编译:

# 清理项目缓存
./gradlew clean

# 构建Debug版本
./gradlew assembleDebug

额外注意事项

  • 如果你不需要AdMob功能,可以尝试在Expo导出时移除AdMob相关模块,但考虑到你是集成Firebase通知,修复依赖是更稳妥的方式。
  • 旧版本的Expo导出项目容易出现依赖冲突问题,如果后续还有其他兼容性问题,建议考虑升级Expo SDK版本后重新导出项目。

内容的提问来源于stack exchange,提问作者Iura Gaitur

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:10:13