升级Google API库后三星设备出现GRPC类解析失败崩溃问题
升级Google依赖库后三星设备启动崩溃:
NoClassDefFoundError: Lio/grpc/InternalGlobalInterceptors 升级以下任意Google依赖库到指定版本后,应用启动触发崩溃,报错:NoClassDefFoundError: Failed resolution of: Lio/grpc/InternalGlobalInterceptors。应用并未直接使用GRPC,且已手动集成GRPC库但问题仍存在,仅在三星设备上出现。
涉及的依赖库
Implementation 'com.google.http-client:google-http-client-gson:1.44.2' Implementation 'com.google.api-client:google-api-client-android:2.6.0' Implementation 'com.google.auth:google-auth-library-oauth2-http:1.24.0' Implementation 'com.google.api-client:google-api-client:2.6.0' Implementation 'com.google.apis:google-api-services-drive:v3-rev20220815-2.0.0'
崩溃日志
Fatal Exception: io.reactivex.exceptions.UndeliverableException: java.lang.NoClassDefFoundError: Failed resolution of: Lio/grpc/InternalGlobalInterceptors; at io.reactivex.exceptions.UndeliverableException.<init>(UndeliverableException.java:34) at io.reactivex.plugins.RxJavaPlugins.onError(RxJavaPlugins.java:367) at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:69) at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:57) at java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:307) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644) at java.lang.Thread.run(Thread.java:1012)
解决方案
- 统一GRPC依赖版本:这些Google依赖库可能依赖特定版本的GRPC,手动集成的版本可能不匹配。在
build.gradle中强制指定兼容的GRPC版本:configurations.all { resolutionStrategy.force 'io.grpc:grpc-core:1.59.0' resolutionStrategy.force 'io.grpc:grpc-android:1.59.0' } - 添加ProGuard/R8规则:三星设备的系统优化可能误删GRPC类,确保保留相关类:
-keep class io.grpc.** { *; } -keepattributes *Annotation* -dontwarn io.grpc.** - 排查依赖冲突:执行
./gradlew app:dependencies查看依赖树,排除冲突的旧版本GRPC依赖。 - 三星设备特殊配置:部分三星机型ART虚拟机有类加载限制,在
build.gradle的android块中添加:android { packagingOptions { pickFirst 'META-INF/*' } }
内容的提问来源于Stack Exchange,提问作者GGK stands for Ukraine
相关产品推荐
相关产品推荐

