1. 程式人生 > >在Android工程中使用unirest-java報錯.md

在Android工程中使用unirest-java報錯.md

在Android工程中引入unirest-java時,執行出現以下錯誤:

Could not find class ‘javax.naming.ldap.LdapName’, referenced from method com.mashape.relocation.conn.ssl.DefaultHostnameVerifier.extractCN

首先,在Android工程中使用unirest-java需要單獨的編譯,這裡參考官方給出的教程,但使用mvn clean assembly:assembly命令編譯時會在執行Running com.mashape.unirest.test.http.UnirestTest

task是報錯,因此需要跳過測試task,以mvn clean assembly:assembly -Dmaven.test.skip=true命令執行;

當你編譯出unirest-java-1.4.10-SNAPSHOT-withDependency-ShadedForAndroid.jar後在Android工程中發現不能使用,會報如上的錯誤;但使用教程中Sample工程裡unirest-java-1.3.2-SNAPSHOT-withDependency-ShadedForAndroid.jar卻沒問題;
通過檢視unirest-java在github的提交歷史,發現在adbcfab

的提交記錄中修改httpclient/httpasyncclient/httpmime三個jar的版本後,就不能在使用了;因為這裡講三個jar的依賴修改到前一個commit;

        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.3.4</version>
        </dependency
>
<dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpasyncclient</artifactId> <version>4.0.1</version> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpmime</artifactId> <version>4.3.4</version> </dependency>

這樣重新編譯出的jar在Android工程就可以使用了;
原因猜猜是在新版的httpClient中引用了jdk的javax.naming.ldap.LdapName,而在android.jar中未包含找個類;