ClassNotFoundException: Didn‘t find class “org.apache.http.message.BasicNameValuePair“

背景

在做的一个APP项目,原来是在Android 7(N版本)上运行,一直没有问题

近期,设备升级到Android 10版本,在进行新设备适配时,出现了一系列问题。

其中一个问题,如下:

java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/http/message/BasicNameValuePair;
	at com.baidu.tts.e.a.c(StatHelper.java:192)
	at com.baidu.tts.e.a.a(StatHelper.java:154)
	at com.baidu.tts.e.a.b(StatHelper.java:130)
	at com.baidu.tts.e.a.a(StatHelper.java:88)
	at com.baidu.tts.e.b.run(StatThread.java:19)
Caused by: java.lang.ClassNotFoundException: Didn't find class "org.apache.http.message.BasicNameValuePair" on path: DexPathList[[zip file "/data/app/com.xxx.xxx-NsL2k6wjYuweN22e0DY_oQ==/base.apk"],nativeLibraryDirectories=[/data/app/com.xxx.xxx-NsL2k6wjYuweN22e0DY_oQ==/lib/arm, /data/app/com.xxx.xxx-NsL2k6wjYuweN22e0DY_oQ==/base.apk!/lib/armeabi-v7a, /system/lib, /product/lib]]
	at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:196)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
	... 5 more
java.lang.ClassNotFoundException: Didn't find class "org.apache.http.message.BasicNameValuePair" on path: DexPathList[[zip file "/data/app/com.xxx.xxx-NsL2k6wjYuweN22e0DY_oQ==/base.apk"],nativeLibraryDirectories=[/data/app/com.xxx.xxx-NsL2k6wjYuweN22e0DY_oQ==/lib/arm, /data/app/com.xxx.xxx-NsL2k6wjYuweN22e0DY_oQ==/base.apk!/lib/armeabi-v7a, /system/lib, /product/lib]]
	at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:196)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
	at com.baidu.tts.e.a.c(StatHelper.java:192)
	at com.baidu.tts.e.a.a(StatHelper.java:154)
	at com.baidu.tts.e.a.b(StatHelper.java:130)
	at com.baidu.tts.e.a.a(StatHelper.java:88)
	at com.baidu.tts.e.b.run(StatThread.java:19)

方法一

android {
    defaultConfig {
        // 1.加入这句话
        useLibrary 'org.apache.http.legacy'
    }

    packagingOptions {
        // 2.加入这句话
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
    }
}

dependencies {
    //3.加入这句话
    api 'org.apache.httpcomponents:httpclient:4.4.1'
}

一开始,按照方法一修改,虽然解决了这个问题;

但是,引入了新的问题,项目中使用的百度语音合成播报功能失效了。

因为使用的是在线语音合成功能,所以每次语音合成播报时,都会发送网络请求进行合成,会出现如下错误:

    (1)  debug模式运行时,虽然不会崩溃,但报错如下:

2021-05-21 14:59:11.903 23528-23797/com.xxx.xxx W/System.err:     at com.baidu.tts.loopj.AsyncHttpRequest.makeRequest(AsyncHttpRequest.java:146)
2021-05-21 14:59:11.903 23528-23797/com.xxx.xxx W/System.err:     at com.baidu.tts.loopj.AsyncHttpRequest.makeRequestWithRetries(AsyncHttpRequest.java:177)
2021-05-21 14:59:11.903 23528-23797/com.xxx.xxx W/System.err:     at com.baidu.tts.loopj.AsyncHttpRequest.run(AsyncHttpRequest.java:107)
2021-05-21 14:59:11.903 23528-23797/com.xxx.xxx W/System.err:     at com.baidu.tts.loopj.SyncHttpClient.sendRequest(SyncHttpClient.java:93)
2021-05-21 14:59:11.903 23528-23797/com.xxx.xxx W/System.err:     at com.baidu.tts.loopj.AsyncHttpClient.post(AsyncHttpClient.java:1043)
2021-05-21 14:59:11.903 23528-23797/com.xxx.xxx W/System.err:     at com.baidu.tts.b.a.b.f$a.a(OnlineSynthesizer.java:314)
2021-05-21 14:59:11.904 23528-23797/com.xxx.xxx W/System.err:     at com.baidu.tts.b.a.b.f$a.call(OnlineSynthesizer.java:255)
2021-05-21 14:59:11.908 23528-23797/com.xxx.xxx W/System.err:     at com.baidu.tts.loopj.AsyncHttpRequest.makeRequest(AsyncHttpRequest.java:146)
2021-05-21 14:59:11.908 23528-23797/com.xxx.xxx W/System.err:     at com.baidu.tts.loopj.AsyncHttpRequest.makeRequestWithRetries(AsyncHttpRequest.java:177)
2021-05-21 14:59:11.908 23528-23797/com.xxx.xxx W/System.err:     at com.baidu.tts.loopj.AsyncHttpRequest.run(AsyncHttpRequest.java:107)
2021-05-21 14:59:11.908 23528-23797/com.xxx.xxx W/System.err:     at com.baidu.tts.loopj.SyncHttpClient.sendRequest(SyncHttpClient.java:93)
2021-05-21 14:59:11.908 23528-23797/com.xxx.xxx W/System.err:     at com.baidu.tts.loopj.AsyncHttpClient.post(AsyncHttpClient.java:1043)
2021-05-21 14:59:11.908 23528-23797/com.xxx.xxx W/System.err:     at com.baidu.tts.b.a.b.f$a.a(OnlineSynthesizer.java:314)
2021-05-21 14:59:11.908 23528-23797/com.xxx.xxx W/System.err:     at com.baidu.tts.b.a.b.f$a.call(OnlineSynthesizer.java:255)
2021-05-21 14:59:32.100 23528-23812/com.xxx.xxx W/System.err:     at com.baidu.tts.loopj.AsyncHttpRequest.makeRequest(AsyncHttpRequest.java:146)
2021-05-21 14:59:32.100 23528-23812/com.xxx.xxx W/System.err:     at com.baidu.tts.loopj.AsyncHttpRequest.makeRequestWithRetries(AsyncHttpRequest.java:177)
2021-05-21 14:59:32.101 23528-23812/com.xxx.xxx W/System.err:     at com.baidu.tts.loopj.AsyncHttpRequest.run(AsyncHttpRequest.java:107)
2021-05-21 14:59:32.101 23528-23812/com.xxx.xxx W/System.err:     at com.baidu.tts.loopj.SyncHttpClient.sendRequest(SyncHttpClient.java:93)
2021-05-21 14:59:32.101 23528-23812/com.xxx.xxx W/System.err:     at com.baidu.tts.loopj.AsyncHttpClient.post(AsyncHttpClient.java:1043)
2021-05-21 14:59:32.101 23528-23812/com.xxx.xxx W/System.err:     at com.baidu.tts.b.a.b.f$a.a(OnlineSynthesizer.java:314)
2021-05-21 14:59:32.101 23528-23812/com.xxx.xxx W/System.err:     at com.baidu.tts.b.a.b.f$a.call(OnlineSynthesizer.java:255)
2021-05-21 14:59:32.107 23528-23812/com.xxx.xxx W/System.err:     at com.baidu.tts.loopj.AsyncHttpRequest.makeRequest(AsyncHttpRequest.java:146)
2021-05-21 14:59:32.107 23528-23812/com.xxx.xxx W/System.err:     at com.baidu.tts.loopj.AsyncHttpRequest.makeRequestWithRetries(AsyncHttpRequest.java:177)
2021-05-21 14:59:32.107 23528-23812/com.xxx.xxx W/System.err:     at com.baidu.tts.loopj.AsyncHttpRequest.run(AsyncHttpRequest.java:107)
2021-05-21 14:59:32.107 23528-23812/com.xxx.xxx W/System.err:     at com.baidu.tts.loopj.SyncHttpClient.sendRequest(SyncHttpClient.java:93)
2021-05-21 14:59:32.107 23528-23812/com.xxx.xxx W/System.err:     at com.baidu.tts.loopj.AsyncHttpClient.post(AsyncHttpClient.java:1043)
2021-05-21 14:59:32.107 23528-23812/com.xxx.xxx W/System.err:     at com.baidu.tts.b.a.b.f$a.a(OnlineSynthesizer.java:314)
2021-05-21 14:59:32.107 23528-23812/com.xxx.xxx W/System.err:     at com.baidu.tts.b.a.b.f$a.call(OnlineSynthesizer.java:255)

     (2)  release模式运行时,直接崩溃,报错如下:

 
java.lang.NoClassDefFoundError: com.baidu.tts.loopj.MySSLSocketFactory
	at com.baidu.tts.loopj.MySSLSocketFactory.getFixedSocketFactory(MySSLSocketFactory.java:169)
	at com.baidu.tts.loopj.AsyncHttpClient.getDefaultSchemeRegistry(AsyncHttpClient.java:208)
	at com.baidu.tts.loopj.AsyncHttpClient.<init>(AsyncHttpClient.java:179)
	at com.baidu.tts.loopj.SyncHttpClient.<init>(SyncHttpClient.java:68)
	at com.baidu.tts.e.a.a(StatHelper.java:160)
	at com.baidu.tts.e.a.b(StatHelper.java:130)
	at com.baidu.tts.e.a.a(StatHelper.java:88)
	at com.baidu.tts.e.b.run(StatThread.java:19)
Caused by: java.lang.ExceptionInInitializerError
	at org.apache.http.e.d.j.<clinit>(SSLSocketFactory.java:151)
	at com.baidu.tts.loopj.MySSLSocketFactory.getFixedSocketFactory(MySSLSocketFactory.java:169)
	at com.baidu.tts.loopj.AsyncHttpClient.getDefaultSchemeRegistry(AsyncHttpClient.java:208)
	at com.baidu.tts.loopj.AsyncHttpClient.<init>(AsyncHttpClient.java:179)
	at com.baidu.tts.loopj.SyncHttpClient.<init>(SyncHttpClient.java:68)
	at com.baidu.tts.auth.c.d(OnlineAuth.java:132)
	at com.baidu.tts.auth.c.call(OnlineAuth.java:32)
	at java.util.concurrent.FutureTask.run(FutureTask.java:237)
	at com.baidu.tts.k.c.a(Memorizer.java:51)
	at com.baidu.tts.auth.a$b.a(AuthClient.java:125)
	at com.baidu.tts.auth.a$b.call(AuthClient.java:97)
	at java.util.concurrent.FutureTask.run(FutureTask.java:237)
	at java.lang.Thread.run(Thread.java:761)
Caused by: org.apache.a.b.b: The chosen LogFactory implementation does not extend LogFactory. Please check your configuration. (Caused by java.lang.ClassCastException: The application has specified that a custom LogFactory implementation should be used but Class 'org.apache.commons.logging.impl.LogFactoryImpl' cannot be converted to 'org.apache.a.b.c'. Please check the custom implementation. Help can be found @http://commons.apache.org/logging/troubleshooting.html.)
	at org.apache.a.b.c.a(LogFactory.java:1154)
	at org.apache.a.b.e.run(LogFactory.java:960)
	at java.security.AccessController.doPrivileged(AccessController.java:41)
	at org.apache.a.b.c.a(LogFactory.java:957)
	at org.apache.a.b.c.a(LogFactory.java:624)
	at org.apache.a.b.c.b(LogFactory.java:655)
	at org.apache.http.e.d.a.<init>(AbstractVerifier.java:60)
	at org.apache.http.e.d.b.<init>(AllowAllHostnameVerifier.java:43)
	at org.apache.http.e.d.b.<clinit>(AllowAllHostnameVerifier.java:45)
	... 13 more
Caused by: java.lang.ClassCastException: The application has specified that a custom LogFactory implementation should be used but Class 'org.apache.commons.logging.impl.LogFactoryImpl' cannot be converted to 'org.apache.a.b.c'. Please check the custom implementation. Help can be found @http://commons.apache.org/logging/troubleshooting.html.
	at org.apache.a.b.c.a(LogFactory.java:1108)
	... 21 more
java.lang.ExceptionInInitializerError
	at org.apache.http.e.d.j.<clinit>(SSLSocketFactory.java:151)
	at com.baidu.tts.loopj.MySSLSocketFactory.getFixedSocketFactory(MySSLSocketFactory.java:169)
	at com.baidu.tts.loopj.AsyncHttpClient.getDefaultSchemeRegistry(AsyncHttpClient.java:208)
	at com.baidu.tts.loopj.AsyncHttpClient.<init>(AsyncHttpClient.java:179)
	at com.baidu.tts.loopj.SyncHttpClient.<init>(SyncHttpClient.java:68)
	at com.baidu.tts.auth.c.d(OnlineAuth.java:132)
	at com.baidu.tts.auth.c.call(OnlineAuth.java:32)
	at java.util.concurrent.FutureTask.run(FutureTask.java:237)
	at com.baidu.tts.k.c.a(Memorizer.java:51)
	at com.baidu.tts.auth.a$b.a(AuthClient.java:125)
	at com.baidu.tts.auth.a$b.call(AuthClient.java:97)
	at java.util.concurrent.FutureTask.run(FutureTask.java:237)
	at java.lang.Thread.run(Thread.java:761)
Caused by: org.apache.a.b.b: The chosen LogFactory implementation does not extend LogFactory. Please check your configuration. (Caused by java.lang.ClassCastException: The application has specified that a custom LogFactory implementation should be used but Class 'org.apache.commons.logging.impl.LogFactoryImpl' cannot be converted to 'org.apache.a.b.c'. Please check the custom implementation. Help can be found @http://commons.apache.org/logging/troubleshooting.html.)
	at org.apache.a.b.c.a(LogFactory.java:1154)
	at org.apache.a.b.e.run(LogFactory.java:960)
	at java.security.AccessController.doPrivileged(AccessController.java:41)
	at org.apache.a.b.c.a(LogFactory.java:957)
	at org.apache.a.b.c.a(LogFactory.java:624)
	at org.apache.a.b.c.b(LogFactory.java:655)
	at org.apache.http.e.d.a.<init>(AbstractVerifier.java:60)
	at org.apache.http.e.d.b.<init>(AllowAllHostnameVerifier.java:43)
	at org.apache.http.e.d.b.<clinit>(AllowAllHostnameVerifier.java:45)
	... 13 more
Caused by: java.lang.ClassCastException: The application has specified that a custom LogFactory implementation should be used but Class 'org.apache.commons.logging.impl.LogFactoryImpl' cannot be converted to 'org.apache.a.b.c'. Please check the custom implementation. Help can be found @http://commons.apache.org/logging/troubleshooting.html.
	at org.apache.a.b.c.a(LogFactory.java:1108)
	... 21 more
org.apache.a.b.b: The chosen LogFactory implementation does not extend LogFactory. Please check your configuration. (Caused by java.lang.ClassCastException: The application has specified that a custom LogFactory implementation should be used but Class 'org.apache.commons.logging.impl.LogFactoryImpl' cannot be converted to 'org.apache.a.b.c'. Please check the custom implementation. Help can be found @http://commons.apache.org/logging/troubleshooting.html.)
	at org.apache.a.b.c.a(LogFactory.java:1154)
	at org.apache.a.b.e.run(LogFactory.java:960)
	at java.security.AccessController.doPrivileged(AccessController.java:41)
	at org.apache.a.b.c.a(LogFactory.java:957)
	at org.apache.a.b.c.a(LogFactory.java:624)
	at org.apache.a.b.c.b(LogFactory.java:655)
	at org.apache.http.e.d.a.<init>(AbstractVerifier.java:60)
	at org.apache.http.e.d.b.<init>(AllowAllHostnameVerifier.java:43)
	at org.apache.http.e.d.b.<clinit>(AllowAllHostnameVerifier.java:45)
	at org.apache.http.e.d.j.<clinit>(SSLSocketFactory.java:151)
	at com.baidu.tts.loopj.MySSLSocketFactory.getFixedSocketFactory(MySSLSocketFactory.java:169)
	at com.baidu.tts.loopj.AsyncHttpClient.getDefaultSchemeRegistry(AsyncHttpClient.java:208)
	at com.baidu.tts.loopj.AsyncHttpClient.<init>(AsyncHttpClient.java:179)
	at com.baidu.tts.loopj.SyncHttpClient.<init>(SyncHttpClient.java:68)
	at com.baidu.tts.auth.c.d(OnlineAuth.java:132)
	at com.baidu.tts.auth.c.call(OnlineAuth.java:32)
	at java.util.concurrent.FutureTask.run(FutureTask.java:237)
	at com.baidu.tts.k.c.a(Memorizer.java:51)
	at com.baidu.tts.auth.a$b.a(AuthClient.java:125)
	at com.baidu.tts.auth.a$b.call(AuthClient.java:97)
	at java.util.concurrent.FutureTask.run(FutureTask.java:237)
	at java.lang.Thread.run(Thread.java:761)
Caused by: java.lang.ClassCastException: The application has specified that a custom LogFactory implementation should be used but Class 'org.apache.commons.logging.impl.LogFactoryImpl' cannot be converted to 'org.apache.a.b.c'. Please check the custom implementation. Help can be found @http://commons.apache.org/logging/troubleshooting.html.
	at org.apache.a.b.c.a(LogFactory.java:1108)
	... 21 more
java.lang.ClassCastException: The application has specified that a custom LogFactory implementation should be used but Class 'org.apache.commons.logging.impl.LogFactoryImpl' cannot be converted to 'org.apache.a.b.c'. Please check the custom implementation. Help can be found @http://commons.apache.org/logging/troubleshooting.html.
	at org.apache.a.b.c.a(LogFactory.java:1108)
	at org.apache.a.b.e.run(LogFactory.java:960)
	at java.security.AccessController.doPrivileged(AccessController.java:41)
	at org.apache.a.b.c.a(LogFactory.java:957)
	at org.apache.a.b.c.a(LogFactory.java:624)
	at org.apache.a.b.c.b(LogFactory.java:655)
	at org.apache.http.e.d.a.<init>(AbstractVerifier.java:60)
	at org.apache.http.e.d.b.<init>(AllowAllHostnameVerifier.java:43)
	at org.apache.http.e.d.b.<clinit>(AllowAllHostnameVerifier.java:45)
	at org.apache.http.e.d.j.<clinit>(SSLSocketFactory.java:151)
	at com.baidu.tts.loopj.MySSLSocketFactory.getFixedSocketFactory(MySSLSocketFactory.java:169)
	at com.baidu.tts.loopj.AsyncHttpClient.getDefaultSchemeRegistry(AsyncHttpClient.java:208)
	at com.baidu.tts.loopj.AsyncHttpClient.<init>(AsyncHttpClient.java:179)
	at com.baidu.tts.loopj.SyncHttpClient.<init>(SyncHttpClient.java:68)
	at com.baidu.tts.auth.c.d(OnlineAuth.java:132)
	at com.baidu.tts.auth.c.call(OnlineAuth.java:32)
	at java.util.concurrent.FutureTask.run(FutureTask.java:237)
	at com.baidu.tts.k.c.a(Memorizer.java:51)
	at com.baidu.tts.auth.a$b.a(AuthClient.java:125)
	at com.baidu.tts.auth.a$b.call(AuthClient.java:97)
	at java.util.concurrent.FutureTask.run(FutureTask.java:237)
	at java.lang.Thread.run(Thread.java:761)

方法二

    <application
        ...
        >

        <uses-library
            android:name="org.apache.http.legacy"
            android:required="false" />

    </application>

于是,按照方法二修改了清单文件,解决了这个问题。

 

参考链接:

https://www.codeleading.com/article/9794945240/

https://blog.csdn.net/weitao_666/article/details/90082986

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hgxydn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值