如何解决Retrofit2初始化阶段出现的NoSuchMethodError?
解决Retrofit初始化时的NoSuchMethodError(LambdaMetafactory相关)
我帮你分析下这个问题:你遇到的NoSuchMethodError本质是因为Retrofit 2.9.0依赖的OkHttp版本使用了Java 8的Lambda表达式特性,而你的项目minSdkVersion是23——Android在API 24以下的系统里,默认没有对Java 8的LambdaMetafactory提供完整支持,所以在调用Retrofit.Builder.baseUrl()的时候触发了这个异常。
下面是具体的解决步骤,亲测有效:
1. 在build.gradle里开启Java 8编译支持
在你的android代码块中添加compileOptions配置,强制项目用Java 8编译,这样就能兼容Lambda相关的特性了:
android { compileSdkVersion 29 buildToolsVersion "29.0.3" viewBinding.enabled = true // 新增Java 8编译配置 compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } defaultConfig { applicationId "kr.ac.sunmoon.gijoe.camaps" minSdkVersion 23 targetSdkVersion 29 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } }
2. 确认依赖兼容性(可选)
Retrofit 2.9.0本身是支持minSdk 21+的,但它默认依赖的OkHttp 4.9.0确实需要Java 8支持。你可以通过执行./gradlew app:dependencies(Windows系统用gradlew.bat app:dependencies)查看项目的依赖树,确保OkHttp没有被意外替换成不兼容的版本。
为什么新建项目也会出问题?
因为新版的Retrofit和OkHttp已经全面切换到Java 8开发了,低版本Android项目如果没有显式开启Java 8编译支持,就会触发这个错误——这也是你新建项目只加Retrofit依赖也会出问题的原因。
修改完配置后,同步Gradle项目,重新编译运行,这个NoSuchMethodError应该就消失了。
内容的提问来源于stack exchange,提问作者BlueMS
相关产品推荐
相关产品推荐

