生成构建时Retrofit2+Gson出现newJsonReader方法缺失问题
解决Retrofit2+Gson构建包时方法缺失的问题
从你的描述和错误信息来看,问题出在构建打包过程中Gson类的方法丢失,但直接运行时正常,这大概率是依赖冲突、多DEX配置或打包流程的问题。下面是针对性的解决方案:
1. 移除冲突的OkHttp依赖
你的Gradle里同时引入了OkHttp 2.x和3.x版本:
implementation 'com.squareup.okhttp:okhttp:2.7.5' implementation 'com.squareup.okhttp3:okhttp:3.8.0'
Retrofit 2.3.0是基于OkHttp 3.x开发的,旧版本的OkHttp 2.x会和Retrofit、Gson转换器产生依赖冲突。直接删除com.squareup.okhttp:okhttp:2.7.5这一行,保留OkHttp 3.x版本即可。
2. 排查并排除重复的Gson依赖
检查你的本地模块(比如zoomsdk、zoomcommonlib)是否引入了旧版本的Gson,导致构建时多个Gson版本被打包,出现方法缺失。
- 执行命令查看完整依赖树:
./gradlew app:dependencies - 找到所有包含
com.google.code.gson:gson的依赖项,如果有其他模块引入了旧版本(比如2.7及以下),在对应的依赖声明里排除Gson:
对其他本地模块做同样的排查和排除操作,确保整个项目只使用你声明的Gson 2.8.0版本。implementation project(':zoomsdk') { exclude group: 'com.google.code.gson', module: 'gson' }
3. 完善MultiDex配置
虽然你开启了multiDexEnabled true,但可能缺少必要的依赖和初始化步骤:
- 添加MultiDex依赖:
implementation 'com.android.support:multidex:1.0.3' - 配置Application类:
- 如果你的项目有自定义Application,让它继承
MultiDexApplication:public class MyApplication extends MultiDexApplication { // ... 你的代码 } - 或者在现有Application的
attachBaseContext方法中初始化MultiDex:@Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); }
- 如果你的项目有自定义Application,让它继承
4. 暂时关闭ABI Splits排查问题
你开启了ABI拆分,有可能在打包特定架构的APK时,依赖的类没有被正确打包到对应的dex中。可以先暂时注释掉ABI splits的配置:
// splits { // abi { // enable true // reset() // include 'x86', 'armeabi-v7a' // universalApk true // } // }
然后重新构建包,如果问题消失,再逐步调整ABI配置,排查是否是某个架构的打包异常。
5. 清理构建缓存并重新构建
构建缓存残留的旧文件也可能导致这类问题,执行以下命令清理后重新构建:
./gradlew clean ./gradlew assembleDebug # 或者 assembleRelease
按以上步骤逐一排查,应该能解决你遇到的Gson方法缺失问题。
内容的提问来源于stack exchange,提问作者Junaid Ahmed
相关产品推荐
相关产品推荐

