在Android项目中编译报错:
Process: com.discovery.ocrserver, PID: 9769
                                                                       java.lang.NoSuchFieldError: No field INSTANCE of type Lorg/apache/http/conn/ssl/AllowAllHostnameVerifier; in class Lorg/apache/http/conn/ssl/AllowAllHostnameVerifier; or its superclasses (declaration of 'org.apache.http.conn.ssl.AllowAllHostnameVerifier' appears in /system/framework/framework.jar:classes2.dex)
                                                                           at org.apache.http.conn.ssl.SSLConnectionSocketFactory.<clinit>(SSLConnectionSocketFactory.java:144)
说该类AllowAllHostnameVerifier 没有INSTANCE 
但是我引入的jar包:httpclient-4.5.2 里面AllowAllHostnameVerifier 是有 INSTANCE;最后发现是由于我调用AllowAllHostnameVerifier这个类的时候就自动调用Android API26中的AllowAllHostnameVerifier了,这是怎么回事?jar包和api里面都有 为什么会只调用api里面的? 需要怎么改?谢谢大神们

解决方案 »

  1.   

    在app build.gradle中添加android  {
        ...    useLibrary 'org.apache.http.legacy'
    }
      

  2.   


    然而并不行....还是优先使用framwork.jar里面的类    不知道要怎么解决
      

  3.   

    重新描述一下问题:
    使用httpclient库中的一个类在android的framework.jar中也同样存在,并且先使用了framework.jar中的类导致的问题 我使用了一个第三方ocr库,这个库使用了httpclient-4.5.2.jar中的org/apache/http/conn/ssl/AllowAllHostnameVerifier类,但是这个类在android的framework中存在,所以运行时会先运行framework中的AllowAllHostnameVerifier类。但是framework中的AllowAllHostnameVerifier类和httpclient-4.5.2.jar中的AllowAllHostnameVerifier类内容有差别,因此,报了如下错误:java.lang.NoSuchFieldError: No static field INSTANCE of type Lorg/apache/http/conn/ssl/AllowAllHostnameVerifier; in class Lorg/apache/http/conn/ssl/AllowAllHostnameVerifier; or its superclasses (declaration of 'org.apache.http.conn.ssl.AllowAllHostnameVerifier' appears in /system/framework/framework.jar:classes2.dex)问题是,我又不能改我使用的第三方ocr库的代码,所以遇到像这种必须使用httpclient-4.5.2.jar中的某个类的某个方法,但是这个类在framework中有,但是使用到的相关方法却没有的情况,大家是如何解决的呢?谢谢
      

  4.   

    阿帕奇的http框架早就被谷歌废弃了,干嘛还垂死挣扎呢,倒不如一次性换成okhttp,省的日后麻烦。
    这个问题应该是无解了,总不能重写classloader吧。
      

  5.   

    换成okhttp才是正道