关于Android 9.0 ClassNotFoundException: Didn't find class "org.apache.http.protocol.BasicHttpContext"

近期在项目中适配了Android9.0-P,但是在部分用户的手机上出现闪退的现象,通过捕获错误日志发现报的错如下:

Caused by: java.lang.ClassNotFoundException: Didn't find class 
"org.apache.http.protocol.BasicHttpContext" on path: DexPathList[[zip file "/data
/app/com.jyc99.jyc-v6asoBfubX-NaDf0IoqSvQ==/base.apk", dex file "/data
/app/com.jyc99.jyc-v6asoBfubX-NaDf0IoqSvQ==/base.apk"],nativeLibraryDirectories=[/data
/app/com.jyc99.jyc-v6asoBfubX-NaDf0IoqSvQ==/lib/arm64, /data/app/com.jyc99.jyc-
v6asoBfubX-NaDf0IoqSvQ==/base.apk!/lib/arm64-v8a, /system/lib64, /product/lib64]]

在Google官方文档上查找到了原因,从 Android 9 开始,默认情况下该内容库已从 bootclasspath 中移除且不可用于应用。 要继续使用 Apache HTTP 客户端,以 Android 9 及更高版本为目标的应用可以向其 AndroidManifest.xml的application节点下 添加以下内容:

在application下面添加 即可:


 
            
 
            
                
                    
                    
                    
                
            
 
        

其中android:required="false" 属性是为了SDK 版本 在23 或更低版本的app上起作用 ,因为在 API 级别低于 24 的设备上,org.apache.http.legacy 库不可用。 (在这些设备上,Apache HTTP 类在 bootclasspath 中提供。)

所以作为使用运行时 Apache 库的替代,应用可以在其 APK 中绑定自己的 org.apache.http 库版本。 如果进行此操作,您必须将该库重新打包(使用一个类似 Jar Jar 的实用程序)以避免运行时中提供的类存在类兼容性问题。

至此以上问题就得到解决,此问题不是在所有的安卓9.0版本上发生,所以比较难发现。
 

你可能感兴趣的:(Android,日常踩坑,Android新特新和适配,Android9.0,Android,P,版本适配)