Android Studio升级至3.1.2后出现MultiDex及Firebase初始化错误
解决升级Android Studio 3.1.2后FirebaseInitProvider类找不到的问题
我之前升级AS到3.1.x版本时也碰到过一模一样的Firebase初始化错误,折腾了好一会儿才解决,给你几个亲测有效的解决步骤:
1. 检查Firebase依赖的完整配置
这个错误最常见的原因是Firebase的依赖或插件没配置全,尤其是升级AS后仓库配置有变化:
- 根目录build.gradle要确保包含Google Maven仓库和正确版本的Google Services插件:
buildscript { repositories { google() // 必须放在jcenter前面 jcenter() } dependencies { classpath 'com.android.tools.build:gradle:3.1.2' // 对应AS3.1.2的兼容版本,不要用太新的插件 classpath 'com.google.gms:google-services:4.2.0' } } allprojects { repositories { google() jcenter() } } - app模块build.gradle末尾必须添加Google Services插件,同时引入Firebase核心依赖:
dependencies { // 引入Firebase核心依赖,版本要和插件兼容 implementation 'com.google.firebase:firebase-core:16.0.9' // 你的其他依赖... } // 必须放在文件末尾 apply plugin: 'com.google.gms.google-services'
2. 启用MultiDex适配(针对minSdkVersion 19)
你的minSdk是19,而Android 4.4及以下默认不支持MultiDex,一旦项目方法数接近或超过65k,就会出现类打包不进Dex的问题:
- 在app模块的
defaultConfig里开启MultiDex:defaultConfig { applicationId "com.example" minSdkVersion 19 targetSdkVersion 26 versionCode 1 versionName "1.0.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" // 新增这行 multiDexEnabled true } - 添加MultiDex依赖:
dependencies { implementation 'com.android.support:multidex:1.0.3' // 和compileSdk26匹配的版本 } - 配置Application类:
如果你的项目有自定义Application,让它继承MultiDexApplication,或者在attachBaseContext方法中手动初始化MultiDex:
别忘了在public class MyApp extends Application { @Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); } }AndroidManifest.xml中指定这个Application:<application android:name=".MyApp" // 其他配置... > </application>
3. 清理缓存并重建项目
升级AS后gradle缓存很容易出问题,一定要做这几步:
- 点击AS顶部菜单栏的
Build->Clean Project - 接着点击
Build->Rebuild Project - 如果还是不行,手动删除项目根目录的
.gradle、.idea文件夹,以及app模块的build目录,然后点击File->Sync Project with Gradle Files重新同步
4. 处理混淆(如果开启了混淆)
如果你的项目启用了ProGuard,要在proguard-rules.pro中添加Firebase的混淆规则,避免核心类被混淆掉:
-keep class com.google.firebase.** { *; } -keep class com.google.android.gms.** { *; } -dontwarn com.google.firebase.**
按照上面的步骤一步步来,应该就能解决这个ClassNotFoundException的问题了。
内容的提问来源于stack exchange,提问作者Nadimibox
相关产品推荐
相关产品推荐

