在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里面的? 需要怎么改?
謝謝大神們
uj5u.com熱心網友回復:
在app build.gradle中添加android {
...
useLibrary 'org.apache.http.legacy'
}
uj5u.com熱心網友回復:
然而并不行....還是優先使用framwork.jar里面的類 不知道要怎么解決
uj5u.com熱心網友回復:
重新描述一下問題:使用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中有,但是使用到的相關方法卻沒有的情況,大家是如何解決的呢?謝謝
uj5u.com熱心網友回復:
樓主,這個你怎么解決的么uj5u.com熱心網友回復:
阿帕奇的http框架早就被谷歌廢棄了,干嘛還垂死掙扎呢,倒不如一次性換成okhttp,省的日后麻煩。這個問題應該是無解了,總不能重寫classloader吧。
uj5u.com熱心網友回復:
換成okhttp才是正道
uj5u.com熱心網友回復:
遇到了同樣的問題,運行的時候優先加載了fw里面的類,請問題主是怎么解決的啊?轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/256081.html
標籤:Android
