升级Gradle后MiniControllerFragment报ClassNotFoundException求助
解决Cast MiniControllerFragment的ClassNotFoundException问题
我之前也碰到过几乎一模一样的问题,这个错误Failed resolution of: Lcom/google/android/gms/common/internal/zzbq本质是依赖版本冲突导致的,结合你的配置来看,主要有两个核心问题:
问题分析
- Google Play服务与Firebase版本不匹配:你使用了非常老的
play-services-cast-framework:11.6.0,但同时引入了17.x版本的Firebase依赖(比如firebase-analytics:17.4.1)。Firebase会依赖较新版本的Google Play服务核心库,老版本的Cast框架找不到新库里已经被重构/移除的zzbq类,从而触发ClassNotFoundException。 - Support Library与AndroidX混用:你的主依赖用的是Support Library 27.0.2,但测试依赖却使用了AndroidX库(比如
androidx.test:core:1.1.0),这种混用会导致Dex合并异常,进一步加剧类查找失败的问题。
具体解决步骤
1. 统一Google Play服务与Firebase的版本
推荐使用Google的**Bill of Materials (BOM)**来自动管理所有Play服务和Firebase依赖的版本,避免手动匹配版本的麻烦。
修改项目根目录的build.gradle:
allprojects { repositories { google() // 其他仓库... } }
修改app模块的build.gradle:
dependencies { // 先添加Google BOM,它会统一所有Play服务和Firebase的版本 implementation platform('com.google.firebase:firebase-bom:32.7.0') // Firebase依赖不需要再写版本号,由BOM自动管理 implementation 'com.google.firebase:firebase-analytics' implementation 'com.google.firebase:firebase-crashlytics' implementation 'com.google.firebase:firebase-core' // Cast框架依赖也由BOM管理版本,移除原有的11.6.0版本号 implementation 'com.google.android.gms:play-services-cast-framework' // 你的其他依赖保持不变... }
2. 修复Support Library与AndroidX的混用问题
你有两个选择:要么继续使用Support Library,要么迁移到AndroidX。
选项A:继续使用Support Library
把所有AndroidX的测试依赖替换为对应的Support Library版本:
testImplementation 'junit:junit:4.12' // 替换AndroidX测试依赖为Support Library版本 androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' androidTestImplementation 'com.android.support.test:rules:1.0.2'
选项B:迁移到AndroidX(推荐长期方案)
在项目根目录的gradle.properties中添加:
android.useAndroidX=true android.enableJetifier=true
然后把所有Support Library依赖替换为对应的AndroidX库,例如:
com.android.support:appcompat-v7:27.0.2→androidx.appcompat:appcompat:1.6.1com.android.support:design:27.0.2→com.google.android.material:material:1.11.0com.android.support:mediarouter-v7:27.0.2→androidx.mediarouter:mediarouter:1.3.0
3. 确保Multidex配置正确
如果你的项目启用了Multidex,确保在自定义Application类中:
public class MyApp extends MultiDexApplication { @Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); } }
或者在AndroidManifest.xml中指定Application类:
<application android:name=".MyApp" // 其他配置... >
4. 清理并重新构建项目
执行以下命令清理缓存,然后重新编译:
./gradlew clean ./gradlew assembleDebug
内容的提问来源于stack exchange,提问作者Pavan Pyati
相关产品推荐
相关产品推荐

