liujingxing / rxhttp

🔥🔥🔥 Based on OkHttp encapsulation, support Kotlin Coroutines、RxJava2、RxJava3; 30s to get started.
https://juejin.im/post/5ded221a518825125d14a1d4
Apache License 2.0
3.74k stars 457 forks source link

java.lang.NoSuchFieldError: No field Companion of type #480

Closed q947721485 closed 7 months ago

q947721485 commented 7 months ago
java.lang.NoSuchFieldError: No field Companion of type Lrxhttp/wrapper/param/RxHttp$Companion; 
in class Lrxhttp/wrapper/param/RxHttp; 
or its superclasses (declaration of 'rxhttp.wrapper.param.RxHttp' appears in /data/app/~~WKe7naLd7ecjnJoA3eKrWQ==/com.xishidaojia.fuwu-XHrp4duSyPJkNugOeeDssA==/base.apk!classes10.dex)

环境 使用ksp编译 版本3.2.3 ksp版本 1.9.20-1.0.14 无多module依赖 在compose 目前不知道具体问题在什么地方

liujingxing commented 7 months ago

什么情况下出现此问题?打包后?把module结构,及RxHttp依赖配置截图发出

liujingxing commented 7 months ago

在Java还是kotlin环境中调用?依赖的kotlin版本又是多少

q947721485 commented 7 months ago

在kotlin 环境下调用的,kotlin版本为1.9.20 。在调试环境下,运行后调用rxhttp请求网络时出现的 WechatIMG1 WechatIMG2 WechatIMG3 WechatIMG4 WechatIMG5 WechatIMG6 WechatIMG7

liujingxing commented 7 months ago

把kotlin版本改为1.9.10,ksp改为1.9.10-1.0.13再试试,还是不行话,加我微信 ljx-studio

q947721485 commented 7 months ago

好的我先试一下再过来回复

q947721485 commented 7 months ago

你好,还是不行加你微信了

liujingxing commented 7 months ago

问题已找到,原因是,rxhttp-compilerkapt注解处理器hilt有点冲突,即使使用ksp依赖rxhttp-compiler,hilt依然会调用rxhttp-compilerkapt注解处理器去生成Java版本的RxHttp类,而ksp依赖rxhttp-compiler,又会生成一份kotlin版本RxHttp`类,如下图所示:

image

导致在代码合并时,把kotlin版本的RxHttp类丢失了,而Java版本的RxHttp类,是没有RxHttp$Companion变量的,所以就报错了,下个版本会规避这个问题

liujingxing commented 7 months ago

在已使用ksp依赖rxhttp-compiler的情况下,复现步骤如下 1、在项目的build.gradle文件中添加一下代码

buildscript {

    dependencies {
        classpath 'com.google.dagger:hilt-android-gradle-plugin:2.48.1'
    }
}

plugins {
    id("com.google.devtools.ksp") version "1.9.10-1.0.13" apply false
}

2、在module的build.gradle文件中添加以下代码

plugins {
    id 'dagger.hilt.android.plugin'
}

dependencies {
    implementation "com.google.dagger:hilt-android:2.48.1"
    ksp "com.google.dagger:hilt-android-compiler:2.48.1"  //kapt或ksp一样有问题
}

3、使用hilt任一注解,如:

@HiltAndroidApp
public class AppHolder extends Application {
    //省略部分代码
}

项目同步成功后,rebuild一下项目,此时就会出现两个RxHttp类

liujingxing commented 7 months ago

注:使用kapt依赖rxhttp-compiler没有此问题

liujingxing commented 7 months ago

v3.2.4版本已解决该问题