登录 立即注册
安币:

谷歌大动作影响大部分App!Android P版本推荐使用HttpURLConnection

[复制链接]

39

主题

56

帖子

613

安币

代码手工艺人

Rank: 4

发表于 2018-6-13 15:29:04 | 显示全部楼层 |阅读模式

早在几年前,谷歌就推荐在Android2.3版本以上使用HttpURLConnection,而在即将正式发布的 Android P 版本中,谷歌彻底取消了对Apache HTTPClient的支持,针对此更改,开发者该如何正确适配 Android P ?

一、背景

1、参考谷歌提供的 Android P 版本变更说明文档:

https://developer.android.com/preview/behavior-changes#apache-nonp

https://developer.android.com/preview/behavior-changes#apache-p

2、Android 6.0 版本已移除对 Apache HTTP 客户端的支持

https://developer.android.com/about/versions/marshmallow/android-6.0-changes

Android 6.0 版本移除了对Apache HTTP客户端的支持。如果您的应用使用该客户端,并以 Android 2.3(API 级别为9)或更高版本为目标平台,请改用 HttpURLConnection 类。此API效率更高,能够通过透明压缩和响应缓存减少网络使用,并可最大限度降低耗电量。要继续使用 Apache HTTP API,须先在 build.gradle 文件中声明以下编译时依赖项:

android {
    useLibrary 'org.apache.http.legacy'
}

3、P版本修改

Remove org.apache.http.legacy from bootclasspath

从Android P开始,org.apache.http.legacy 库将从 bootclasspath 中删除。

(1)修改对 TargetSdkVersion<P 的应用的影响

该修改对大多数 TargetSdkVersion<P 的应用都无影响,但是如果应用使用了系统 ClassLoader加载org.apache.http.*中的类时,将在Android P上发生 NoClassDefFoundError 失败,因为系统ClassLoader不再知道这些类。为了防止将来出现类似的问题,应用应该通过应用 ClassLoader 加载类,而不是直接访问系统ClassLoader。

(2)修改对 TargetSdkVersion>=P 的应用的影响

对所有 TargetSdkVersion>=P 的应用,如果还是按照以前一样通过在 build.gradle 文件中声明以下编译时依赖项:

android {
    useLibrary 'org.apache.http.legacy'
}

想继续使用 Apache-http 接口,都会出现 Apache-http 接口找不到的异常:

二、适配指导

1.继续使用Apache-http

(1)TargetSdkVersion<P 的应用适配指导

方案一:不要使用非标准的 ClassLoader 。

方案二:应用可以自己添加依赖的 apache jar 包到工程 libs 目录规避该兼容性问题。

注意:对于最低 SDK为23或更低的应用程序,android:required=“false”属性是必需的,因为在 API 等级低于24的设备上,org.apache.http.legacy 库不可用。(在这些设备上,Apache HTTP 类在 bootclasspath 上可用。)

(2)TargetSdkVersion>=P 的应用适配指导

对于 TargetSdkVersion>=P的应用如果想继续使用Apache-http客户端,需要在应用的 AndroidManifest.xml 文件中添加:

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

2.不再使用Apache-http客户端

使用 HttpURLConnection 替代 Apache-http。

三、Android P版本测试验证方法说明

1、购买谷歌原生机 Pixel、Pixel XL、Pixel2、Pixel 2 XL,下载 Android P 版本进行刷机测试

下载地址:
https://developer.android.google.cn/preview/download

*需要将网页底部的显示语言修改为英文

刷机

*刷机前需要退出之前登录的谷歌账号

1.下载对应设备的压缩包并解压;

2.手机连 USB 后,执行 adb reboot bootloader 命令;

3.手机出现小机器人图案,并显示‘unlock’字样时,执行压缩包中的 bat 脚本。

如果是“lock”字样:

  • 连续点击设置-版本号7次,打开开发人员选项;

  • 在开发人员选项中打开 OEM unlock;

  • 连接手机到电脑,执行 adb reboot bootloader 命令到小机器人界面;

  • 执行 fastboot oem unlock,手机就解锁了,再使用上面的刷机方法即可。

2、利用云真机调试

6月6日谷歌发布了 Android P Beta 2,即DP3。此版本API最终确定,完成安卓P版本应用兼容性适配的应用可大胆发布,现在安卓P版本用户相对少,可以在安卓P版本手机大规模上市前,充分测试。

谷歌在 Android P DP3中发布了最终版 API,最新的系统映像以及更新后的开发者工具,各位开发者需做好准备,应对即将在今夏发布的 Android P 正式版。

华为终端开放实验室第一时间提供Android P DP3的兼容性测试和远程真机调试能力,帮助开发者应对谷歌的大动作。

新用户如需申请使用,需加入安卓绿色联盟,成为会员。可通过以下步骤申请:

  • 登录https://deveco.huawei.com/

  • 使用所在公司尾缀的邮箱进行账号注册;

  • 将您新申请的账号、所在公司、个人姓名及电话、负责的应用名称发送至deveco@huawei.com,申请成为安卓绿色联盟会员,通过审核后,将为您开通使用权限;

Android P DP3兼容性测试(视频35秒)

https://v.qq.com/x/page/x0688mxysd8.html

Android P DP3远程真机调试(视频21秒)

https://v.qq.com/x/page/h0688g21gik.html

欢迎关注安卓绿色联盟公众号,回复关键词“申请”,了解华为终端开放实验室免费云测申请流程;回复关键词“P版本”加入Android P版本技术交流群。

2

主题

9201

帖子

2493

安币

Android大神

Rank: 6Rank: 6

发表于 2018-6-13 17:50:56 | 显示全部楼层
感觉楼主很用心,辛苦啦~

446

主题

841

帖子

2007

安币

手工艺人

发表于 2018-6-13 18:56:00 | 显示全部楼层
帮帮顶顶!!

324

主题

729

帖子

725

安币

手工艺人

发表于 2018-6-13 21:54:41 | 显示全部楼层
感谢分享,安卓巴士有你更精彩:lol

424

主题

829

帖子

1945

安币

手工艺人

发表于 2018-6-13 22:05:12 | 显示全部楼层
感谢分享,安卓巴士有你更精彩:lol

312

主题

755

帖子

702

安币

手工艺人

发表于 2018-6-13 22:11:52 | 显示全部楼层
楼主是好人,回个帖会有安币吗?

7

主题

9344

帖子

1982

安币

Android大神

Rank: 6Rank: 6

发表于 2018-6-13 22:13:12 | 显示全部楼层
安卓巴士是个不错的网站,我来顶个贴~

0

主题

6

帖子

8

安币

初级码农

Rank: 1

发表于 2018-6-14 14:19:41 | 显示全部楼层
强烈支持楼主ing……
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站长推荐

通过邮件订阅最新安卓weekly信息
上一条 /4 下一条

下载安卓巴士客户端

全国最大的安卓开发者社区
联系我们
关闭
合作电话:
15618560077
Email:
805941275@qq.com
商务市场合作/投稿
问题反馈及帮助
联系我们

广告投放| 下载客户端|申请友链|手机版|站点统计|安卓巴士 ( 粤ICP备15117877号 )

快速回复 返回顶部 返回列表