Android Studio编译项目时遇NoSuchMethodError异常求助
解决
java.lang.NoSuchMethodError: ResourcesCompat.getFont() 错误 嘿,这个错误我帮不少开发者搞定过,本质就是你的项目里Android Support库和AndroidX版本冲突,或者依赖的库版本不兼容,导致找不到对应的getFont静态方法。下面是几个经过验证的解决步骤,按顺序试就行:
1. 直接迁移到AndroidX(最推荐的长期方案)
如果你的项目还在沿用旧的Android Support库,直接迁移到AndroidX一劳永逸,彻底解决这类版本冲突:
- 打开Android Studio,点顶部菜单栏的
Refactor > Migrate to AndroidX... - 跟着向导走就行,AS会自动把所有Support库依赖换成对应的AndroidX库
- 迁移完记得检查
gradle.properties里有没有这两行,没有就加上:
第二行的Jetifier会自动把第三方依赖里的旧Support库转换成AndroidX兼容版本,很省心。android.useAndroidX=true android.enableJetifier=true
2. 统一Support库版本(暂时不想迁移的话)
要是还想用Support库,必须保证所有相关依赖的版本完全一致,不能有的用27,有的用28:
- 打开
app/build.gradle,找所有com.android.support:开头的依赖 - 把它们的版本号统一成同一个稳定版,比如
28.0.0(这是Support库的最后一个稳定版本)
举个例子:implementation 'com.android.support:appcompat-v7:28.0.0' implementation 'com.android.support:recyclerview-v7:28.0.0' implementation 'com.android.support:design:28.0.0' - 同步gradle后重新编译项目
3. 揪出第三方依赖的冲突
有些第三方库自己内部依赖了不同版本的Support库,偷偷搞事情:
- 打开Android Studio的Terminal,执行命令:
./gradlew app:dependencies - 看输出里的
android.support.v4相关条目,找到版本不一样的那个 - 用
exclude语法把冲突的依赖排除掉,比如:implementation('com.example:some-third-party-lib:1.0.0') { exclude group: 'com.android.support', module: 'support-v4' }
4. 清理缓存重新构建
有时候缓存抽风也会导致这种奇怪的错误,试试:
- 点顶部的
Build > Clean Project - 再点
Build > Rebuild Project - 要是还不行,手动删了项目根目录的
.gradle文件夹和app/build文件夹,再同步gradle
补充一句:
ResourcesCompat.getFont()是从Support Library 26.0.0才开始有的方法,要是你的项目里有依赖低于这个版本的库,肯定会找不到,所以统一版本是核心。
内容的提问来源于stack exchange,提问作者amanuel negash
相关产品推荐
相关产品推荐

