Play Console报错NoSuchMethodError:androidx.core.app.e类缺失静态方法b
问题现象
在Google Play Console后台监测到应用出现崩溃错误,暂无法准确定位问题产生根源,崩溃日志如下:
FATAL EXCEPTION: main Process: com.madhurtexttospeechtts.madhur, PID: 7705 java.lang.NoSuchMethodError: No static method b(Landroid/os/Bundle;Ljava/lang/String;Landroid/os/IBinder;)V in class Landroidx/core/app/e; or its super classes (declaration of 'androidx.core.app.e' appears in base.apk) at androidx.media.d$h.h(Unknown Source:46) at androidx.media.d$h$d.onGetRoot(Unknown Source:15) at android.service.media.MediaBrowserService$ServiceBinder$1.run(MediaBrowserService.java:229) at android.os.Handler.handleCallback(Handler.java:873) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:193) at android.app.ActivityThread.main(ActivityThread.java:6669) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
问题根因
这是典型的AndroidX依赖版本不兼容导致的崩溃:
- 日志里混淆后的
androidx.core.app.e对应类是androidx.core.os.BundleCompat,找不到的b静态方法就是putBinder(Bundle, String, IBinder)方法 - 当前应用引入的
androidx.media组件版本高于androidx.core核心库版本,高版本media库在执行MediaBrowserService的onGetRoot逻辑时,需要调用core库里的putBinder方法,但低版本core库没有实现该方法,直接触发NoSuchMethodError崩溃 - 该应用为文本转语音(TTS)类应用,本身就依赖MediaBrowserService相关能力,完全匹配崩溃触发场景
修复方案
- 对齐AndroidX依赖版本:将
androidx.core依赖升级到当前引入的androidx.media版本要求的最低版本以上,优先使用AndroidX官方同批次发布的稳定版依赖,避免跨大版本搭配 - 排查依赖传递冲突:执行依赖查看指令检查全量依赖树,如果存在其他三方库传递引入了低版本androidx.core的情况,在app模块的build.gradle中通过force规则强制指定高版本core,覆盖低版本传递依赖
- 检查混淆裁剪规则:确认ProGuard/R8的混淆规则没有误删androidx.core、androidx.media包下的必要类与方法,不要对AndroidX官方库做过度代码裁剪
- 若暂时无法升级依赖,可对MediaBrowserService的相关逻辑加系统版本判断,在低版本系统走兼容分支,但优先推荐对齐依赖版本彻底解决问题
内容的提问来源于stack exchange,提问作者Harsh Vardhan
相关产品推荐
相关产品推荐

