Classloader关于Apache Http在Android里targetSdkVersion28前后时的表现调研

本文调研了在Android P(targetSdkVersion 28)前后,使用Apache Http相关类的行为变化。Android P中移除了Apache Http类,但若targetSdkVersion < 28,系统会将Apache类添加到应用的classpath。针对插件使用Apache Http的问题,文章探讨了不同targetSdkVersion和Android版本的兼容性,提出了在AndroidManifest.xml中配置以解决target >= P时的运行异常。
摘要由CSDN通过智能技术生成

原因导向:项目在逐步适配targetSdkVersion,当Android P(9.0)手机问世后,出现了大面积的崩溃,后来定位到由于使用了org/apache/http/client/methods/HttpGet类,但是类缺失导致了crash。然后调研后发现Apache Http相关的类确实是在Android P版本的系统的rootclasspath去掉了,但是谷歌做了一个兼容:如果应用的targetSdkVersion<P,系统会把apache的类预加到应用自己的classpath中,所以应用自己的classloader还是能正常找到apache的类,但是如果应用指定使用系统的classpath加载apache的类就会有问题,会报这个异常(系统classpath获取的指的是ClassLoader.getSystemClassLoader(),一般插件中代码的预加载使用的就是系统的classloader)。

调研分析结论:
关于apache的问题,这里分开来进行调研分析:
1、targetSdkVersion<28(P)时,Android28手机和小于28的手机
2、targetSdkVersion>=28(P)时,Android28手机和小于28的手机

针对应用(非插件化)targetSdkVersion和Android系统版本中是否包含Apache Http相关类结论:

targetSdkVersion / Android手机系统版本 应用ClassLoader是否包含Apache Http
targetSdkVersion<28 / >=Android P
targetSdkVersion<28 / <Android P
targetSdkVersion>28 / >=Android P
targetSdkVersion>28 / <Android P

Apache Http在Android 版本的变更:
1、Android API 23中已经开始不提供

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值