干货 | 携程Android 10适配踩坑指南

作者简介

 

曙光,携程资深软件工程师,负责市场营销相关研发及管理工作。

2019 年 9 月 3 日,Google 发布了 Android 10 正式版。Android 10 聚焦移动创新、安全隐私和数字健康三大主题,全面打造最佳用户体验。

背景

目前携程旅行线上最新版本已适配到Android 10(API =29),由于从API=26升级到API=29,跨度较大,我们提前对相关适配进行了调研,希望其中一些经验能对其他开发者有一定的帮助。

在Android 10 版本中,官方的改动较大,相应的开发者适配成本还是很高的。基于前期调研,我们主要基于以下几方面进行Android 10的适配:

  • Android X

  • 分区存储

  • 设备ID

  • 明文HTTP限制


一、AndroidX

AndroidX 对原始 Android Support库进行了重大改进,后者现在已不再维护。AndroidX 软件包完全取代了支持库,不仅提供同等的功能,而且提供了新的库。

1.1 什么是AndroidX

Android系统在刚刚面世的时候,可能连它的设计者也没有想到它会如此成功。随着Android系统版本不断地迭代更新,每个版本中都会加入很多新的API进去,但是新增的API在老版系统中并不存在,因此这就出现了一个向下兼容的问题。

于是Android团队推出了一个鼎鼎大名的Android Support Library,用于提供向下兼容的功能。比如我们熟知的support-v4库,appcompat-v7库都是属于Android Support Library的。4在这里指的是Android API版本号,对应的系统版本是1.6。support-v4的意思就是这个库中提供的API会向下兼容到Android 1.6系统。类似地,appcompat-v7指的是将库中提供的API向下兼容至API 7,也就是Android 2.1系统。

随着时间的推移,Android1.6、2.1系统早已被淘汰了,现在Android官方支持的最低系统版本已经是4.0.1,对应的API版本号是15。support-v4、appcompat-v7库也不再支持那么久远的系统了,但是它们的名字却一直保留了下来,虽然它们现在的实际作用已经对不上当初命名的原因了。

Android团队也意识到这种命名已经非常不合适了,于是对这些API的架构进行了一次重新的划分,推出了AndroidX。因此,AndroidX本质上其实就是对Android Support Library进行的一次升级。

1.2 为什么要升级AndroidX

  • 版本 28.0.0 是Android Support 库的最后一个版本。官方将不再发布 android.support 库版本。所有新功能都将在 AndroidX命名空间中开发。

  • 长远来看。AndroidX重新设计了包结构,旨在鼓励库的小型化,支持库和架构组件包的名字进行了简化。而且这也是减轻Android生态系统碎片化的有效方式。

  • 与Android Support库不同,AndroidX软件包是单独维护和更新的。这些AndroidX包使用严格的语义版本控制,从版本1.0.0开始,您可以单独更新项目中的AndroidX库。


1.3 适配步骤

1.3.1 环境准备

  • AndroidStudio 3.2.0+

  • gradle:gradle-4.6+

另外修改相关app、library模块中build.gradle的compileSdkVersion、targetSdkVersion、buildToolsVersion的配置,都设置为29,示例如下:

android {
   compileSdkVersion 29
   buildToolsVersion 29.0.2
   defaultConfig {
      targetSdkVersion 29
   }
   ...
}

1.3.2 修改当前项目的 gradle.properties

android.useAndroidX=true
android.enableJetifier=true

其中:

  • android.useAndroidX=true 表示当前项目启用 AndroidX;

  • android.enableJetifier=true 表示将依赖包也迁移到AndroidX 。如果取值为 false ,表示不迁移依赖包到AndroidX,但在使用依赖包中的内容时可能会出现问题,如果你的项目中没有使用任何三方依赖,此项可以设置为 false。


1.3.3 修改项目中的build.gradle依赖库

implementation 'com.android.support:appcompat-v7:28.0.0'
→ implementation 'androidx.appcompat:appcompat:1.0.2'


implementation 'com.android.support:design:28.0.0'
→implementation 'com.google.android.material:material:1.0.0'


implementation 'com.android.support.constraint:constraint-layout:1.1.3'
→ implementation 'androidx.constraintlayout:constraintlayout:1.1.3'


映射关系:

https://developer.android.com/jetpack/androidx/migrate/artifact-mappings

1.3.4 修改支持库类

将原来import的android.**包删除,重新import新的androidx.**包;

import android.support.v7.app.AppCompatActivity; →import androidx.appcompat.app.AppCompatActivity;


1.3.5 迁移

官方迁移指南:

https://developer.android.com/jetpack/androidx/migrate#migrate

在 AndroidStudio 3.2 或更高版本(截图中 AndroidStudio 为 3.5 版本)中执行如下操作:菜单>Refactor > Migrate to AndroidX(如果迁移失败,就需要重复上面1,2,3,4步手动去修改迁移)

注意:
  • 使用AS迁移工具并不能完全修改完毕,需要手动修改

  • support包名涉及到资源修改,切记检查资

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值