記錄一個崩潰問題
崩潰詳情如下
java.lang.IncompatibleClassChangeError: Class 'org.apache.http.message.BasicHeader' does not implement interface 'org.apache.http.NameValuePair' in call to 'java.lang.String org.apache.http.NameValuePair.getName()' (declaration of 'com.android.volley.toolbox.BasicNetwork' appears in base.apk)
at com.android.volley.toolbox.BasicNetwork.convertHeaders(BasicNetwork.java:3)
at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:8)
at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:13)
從錯誤日誌來看是由於BasicHeader沒有實現NameValuePair接口導致的
但是奇怪的是運行沒有混淆的包,沒有問題
但是運行混淆的包,啓動就崩潰
在項目中查找BasicHeader有兩個類,聯想到因爲項目最近升級了編譯版本爲29導致httpClint出現了兩個版本
解決方案:
第一步:單獨把29版本的httpclient.jar 集成到libs下面
第二步:在build 文件 刪除 useLibrary ‘org.apache.http.legacy’ 這行代碼
混淆打包後沒有出現該問題,至於爲什麼不混淆下就沒問題,這個目前還不清楚