Android应用启动崩溃求助:NoSuchMethodError错误排查
解决应用启动时的「NoSuchMethodError」崩溃问题
嘿,我仔细看了你的问题描述、崩溃日志以及代码文件,这个启动阶段的崩溃原因非常明确——Android Support库版本不兼容,具体是android.support.v4.content.res.ResourcesCompat类里找不到指定的getFont静态方法。
崩溃日志核心信息
01-02 12:52:57.694 5065-5065/com.logo.tm.logodrive001 E/AndroidRuntime: FATAL EXCEPTION: main Process: com.logo.tm.logodrive001, PID: 5065 java.lang.NoSuchMethodError: No static method getFont(Landroid/content/Context;ILandroid/util/TypedValue;ILandroid/widget/TextView;)Landroid/graphics/Typeface; in class Landroid/support/v4/content/res/ResourcesCompat; or its super classes (declaration of 'android.support.v4.content.res.ResourcesCompat' appears in /data/app/com.logo.tm.logodrive001-1/split_lib_dependencies_apk.apk) at android.support.v7.widget.TintTypedArray.getFont(TintTypedArray.java:119) at android.support.v7.widget.AppCompatTextHelper.updateTypefaceAndStyle(AppCompatTextHelper.java:208) at android.support.v7.widget.AppCompatTextHelper.loadFromAttributes(AppCompatTextHelper.java:110) at android.support.v7.widget.AppCompatTextHelperV17.loadFromAttributes(AppCompatTextHelperV17.java:38) at android.support.v7.widget.AppCompatTextView.<init>(AppCompatTextView.java:81) at android.support.v7.widget.AppCompatTextView.<init>(AppCompatTextView.java:71) at android.support.v7.widget.AppCompatTextView.<init>(AppCompatTextView.java:67) at android.support.v7.widget.Toolbar.setTitle(Toolbar.java:753) at android.support.v7.widget.ToolbarWidgetWrapper.setTitleInt(ToolbarWidgetWrapper.java:261) at android.support.v7.widget.ToolbarWidgetWrapper.setWindowTitle(ToolbarWidgetWrapper.java:243) at android.support.v7.widget.ActionBarOverlayLayout.setWindowTitle(ActionBarOverlayLayout.java:621) at android.support.v7.app.AppCompatDelegateImplV9.onTitleChanged(AppCompatDelegateImplV9.java:631) at android.support.v7.app.AppCompatDelegateImplV9.ensureSubDecor(AppCompatDelegateImplV9.java:328) at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:284) at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:139) at com.logo.tm.logodrive001.MainActivity.onCreate(MainActivity.java:14) at android.app.Activity.performCreate(Activity.java:6092) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1112) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2468) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2595) at android.app.ActivityThread.access$800(ActivityThread.java:178) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1470) at android.os.Handler.dispatchMessage(Handler.java:111) at android.os.Looper.loop(Looper.java:194) at android.app.ActivityThread.main(ActivityThread.java:5631) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:959) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754)
问题原因
ResourcesCompat.getFont()这个静态方法是在support-v4库26.0.0版本才新增的。你的项目中appcompat-v7(因为使用了AppCompatActivity和Toolbar相关组件)依赖的support-v4版本,和你实际引入的support-v4版本不一致,或者support-v4版本过低,导致代码运行时找不到这个方法,从而触发崩溃。
你的MainActivity代码和布局文件本身没有逻辑问题,崩溃完全是依赖库版本不匹配导致的。
解决方案
1. 统一所有Support库版本
打开你的Module级别的build.gradle文件,确保所有com.android.support开头的依赖版本完全一致。比如选择最后一个稳定的Support库版本28.0.0:
implementation 'com.android.support:appcompat-v7:28.0.0' implementation 'com.android.support:support-v4:28.0.0' // 如果项目中还有其他Support库(如design、recyclerview等),也必须统一为28.0.0版本
2. 清理并重建项目
修改完依赖后,执行以下步骤确保依赖生效:
- 点击Android Studio顶部菜单栏的
Build -> Clean Project - 接着点击
Build -> Rebuild Project - 如果还是有问题,可以删除项目根目录和Module目录下的
.gradle文件夹,然后点击File -> Sync Project with Gradle Files
3. 迁移到AndroidX(推荐)
Support库已经停止维护,迁移到AndroidX可以彻底避免这类版本兼容问题,步骤如下:
- 打开Android Studio,点击菜单栏的
Refactor -> Migrate to AndroidX... - 按照向导提示完成迁移,IDE会自动替换所有Support库依赖为对应的AndroidX库,并更新相关代码
内容的提问来源于stack exchange,提问作者mid rads38 s38
相关产品推荐
相关产品推荐

