关于android:是时候迁移至-AndroidX-了

30次阅读

共计 4058 个字符,预计需要花费 11 分钟才能阅读完成。

长久以来,咱们致力于做到三件事: 实际指南、缩小模板代码和简化工作流程,咱们心愿帮忙开发者们集中精力专一在真正须要思考的逻辑中去。Jetpack 为此而生,它所蕴含的库、工具和指南,能够帮忙您更轻松地编写高质量的利用。

Jetpack 和 AndroidX 有什么关系呢? Jetpack 中所有库都应用 AndroidX 作为包名,咱们把 AndroidX 作为一个开发、测试和公布 Jetpack 库的开源工程。

在 2018 年的 I/O 大会上咱们发表了把 Support Library 重构至 AndroidX 命名空间的打算。在 Support Library 28,咱们实现了重构,并且公布了 AndroidX 1.0。为了可能享受 Jetpack 所带来的便当,您须要将旧的 Support Library 迁徙至 AndroidX。

为什么有必要迁徙至 AndroidX

您可能会想: 既然 AndroidX 只是 Support Library 28 的重构,那为什么要迁徙呢? 对于这个问题,咱们有上面几个理由:

  1. Support Library 曾经实现了它的历史使命,28 将会是它的最初公布版。咱们接下来将不会持续在 Support Library 中修复 bug 或公布新性能;
  2. 更好的包治理: 独立版本、独立命名以及更高频率的更新。以上长处,AndroidX 开箱既得;
  3. 目前曾经有许多咱们耳熟能详的工具库曾经迁徙至 AndroidX,例如 Google Play 服务、Firebase、Butterknife、Mockito 2、SQL Delight,咱们前面会提到如何迁徙它们的依赖;
  4. 咱们正在致力推广 AndroidX 命名空间,将来所有新推出的组件库,例如 Jetpack Compose 和 CameraX,都将成为 AndroidX 的一员。

如何迁徙至 AndroidX

后期筹备

在开始迁徙之前,为了使接下来的工作能够更加顺畅平滑,咱们心愿您能够做到以下几点:

  • 首先,备份整个工程。大部分开发者都在应用 代码版本控制系统,但因为迁徙工作牵扯到大量的文件批改,建议您备份整个工程;
  • 其次,咱们心愿您尽量减少同时进行的性能开发;
  • 最初还是建议您: 在独自的分支进行迁徙工作。

开始迁徙

在整个迁徙步骤中,咱们将着重于解决谬误,使您的利用编译并通过所有测试。

上面是迁徙工作的流程示意图,尽管步骤不少,然而本文会对其中的每一步都做出阐明:

第一步: 将 Support Library 降级至 28

首先,咱们心愿您把以后的 Support Library 依赖降级至版本 28。如果您从晚期版本的 Support Library 进行迁徙,可能会在须要批改命名空间的同时遭逢 API 不兼容的问题; 而 Support Library 28 的 API 与 AndroidX 之间只有命名空间上的不同。所以咱们倡议,先尝试将 Support Library 降级至版本 28,解决过所有 API 变更,并且确保编译通过后,再进行下一步,这样所做的批改是起码的。

第二步: 开启 Jetifier

接下来须要做的是开启 Jetifier。Jetifier 能够帮忙您迁徙第三方依赖库的依赖至 AndroidX。正如字面意思所说,Jetifier 会批改这些第三方依赖库的代码,从而使其与应用 AndroidX 的工程兼容。不过 Jetifier 不会批改您的源码和主动生成的代码,因而不必放心它会造成额定的不良影响。

开启 Jetifier 非常的简略,您只须要在 gradle.properties 文件中退出 “android.useAndroidX = true” 和 “android.enableJetifier = true” 即可。”useAndroidX” 设置用于开启 AndroidX 库的主动导入,当您主动补全或导入依赖库时,会主动导入 AndroidX 库。

第三步: 查看第三方库版本的兼容性

当您开启 Jetifier 之后,就要着手降级第三方依赖库到兼容的版本。在您真的开始迁徙之前,最好把所有依赖降级到最新。

为什么要这么做? 其实咱们本人就在这方面 “ 栽过跟头 ”,咱们有一个演示利用: Plaid,它依赖了图片加载库 Glide,咱们原本打算应用 Plaid 来演示如何迁徙利用至 AndroidX,但当咱们在没有查看 Glide 依赖库版本就开始迁徙时,咱们遭逢了一堆编译谬误。查看后才发现,过后依赖的那个版本的 Glide 无奈兼容 AndroidX。

而当咱们把 Glide 和其余依赖库版本都降级后,再做迁徙工作,就没有再呈现雷同的谬误。所以,倡议在开始迁徙前,先检查和降级利用的第三方依赖,新版本的第三方库可能曾经兼容 AndroidX。因为 Jetifier 不会帮您迁徙主动生成代码的依赖库,所以您还是须要本人查看这类依赖是否兼容 AndroidX。

如果跳过了后面两步,您可能会遇到一些问题:

  • 如果您以后应用的第三方库不兼容 AndroidX,您将会看到它仍然在尝试拉取旧版本的 Support Library;
  • 而如果您的工程被局部迁徙,可能还会遇到类型反复的谬误,这是因为工程正在尝试从 Support Library 和 AndroidX 拉取雷同的代码。

第四步: 将 Support 库依赖转换为 AndroidX

这一步开始前,您应该实现了后面三个步骤: 降级 Support Library 到 28 版; 开启 Jetifier; 降级和查看第三方依赖库。确定这些都没问题后,咱们终于能够开始真正的迁徙工作了。这一步有以下三个办法供您参考:

  1. 应用 Android studio 主动迁徙工具

咱们在 Android 3.2 稳定版中退出了 “Migrate to AndroidX” 选项,不便大家迁徙。您能够在 “Refactor” 菜单中找到 “Migrate to AndroidX” 选项:

这个按钮的性能,就是迁徙源码中的依赖到 AndroidX,现实状况下,它会帮您实现绝大部分工作。

  1. 应用主动迁徙脚本

咱们也意识到有些团队应用的不是 Android Studio,而且也会有一些利用的构造过于简单,使咱们的工具无奈失效。

所以还有两种抉择,其中之一便是应用 bash 脚本中的 grep 和 sed 命令。在介绍如何应用脚本进行迁徙之前,咱们要特别感谢 Dan Lew 为咱们提供了这个工具。

您能够通过短链接: goo.gle/androidx-migration-script 去到脚本源码的 GitHub 页面,在那里您也能够找到更多的社区奉献内容。

脚本的工作原理并不简单,如下所示,您须要手动做的是配置好类型映射表 “androidx-class-mapping.csv” 和工程门路地址,而脚本中真正无效的局部,就只是 grep 命令后跟着一个 sed 命令来替换工程中导入的包名:

因为脚本的解决非常简略粗犷,所以可能会在某些状况下造成一些谬误。应用这种形式肯定要本人心里有数。

  1. 人工迁徙

另一个抉择,是人工进行迁徙工作。在 迁徙到 AndroidX 中,您能看到前文提到过的 Support Library 与 AndroidX 的类型映射关系表。如下图,有了这个映射关系表,您就能够依据具体情况进行替换:

这一步做完之后,只有您从新编译工程,并且修复那些迁徙工作中损坏的测试,就能够取得一个基于 AndroidX 的工程。可喜可贺!

可能遇到的问题

当然,实在的状况往往不会那么一帆风顺。上面咱们收集了一些迁徙过程中常见的问题,心愿能帮到您。

常见的须要手动解决的状况

以下图为例,咱们看到这里依赖的依然是 Support Library,其中 drawerLayout 和 recyclerview 的版本是用一组变量设置的:

遇到这种状况时,主动迁徙不会理睬您之前的变量配置,它会间接把这些库替换成一个确定的 AndroidX 版,如果您依然想要应用变量治理这些库的版本号,就须要手动把 AndroidX 的依赖库版本改为应用变量设置。

主动迁徙工具也不会批改您的混同文件和构建脚本。如果这些文件中蕴含相干的包名,您须要手动去把它们改好。

抵触解决

咱们后面有提到,肯定要在一个新的分支中解决迁徙工作,对于这点还有一些和大家分享的内容。

因为迁徙工作会批改大量的文件,所以咱们倡议减缓或进行手头的开发工作。尽管要求整个开发团队复工听起来非常离谱,然而这样的确能够大大减少可能产生的合并抵触。

退而求其次的话,如果条件容许,最好能安顿一些人手在一个独自的分支上专一于迁徙的工作。与此同时,也要向团队中的其余成员预警行将到来的合并抵触。

在迁徙依赖时,要专一于谬误的批改,以编译胜利和通过所有测试为首要指标。不要在迁徙的同时进行重构或者引入新的性能。

查看主动迁徙工具导入的库版本

当您运行完主动迁徙性能后,您可能会发现新的依赖库中既有稳定版,又有 Alpha 版。这其实取决于咱们最新公布的版本。您须要手动批改这些依赖库的版本,以满足本人工程的特定须要。

文档资源

咱们总结了一些与本文相干的文档放在最初,来不便您回顾和查找。

AndroidX 概览 包含: AndroidX 总览、迁徙指南以及 Support Library 到 AndroidX 库稳定版和 Alpha 版的映射关系表。如果您想要应用脚本解决迁徙,这里也提供映射关系表的 CSV 文件。

咱们有一篇文章介绍 Kotlin & Jetpack 实际技巧: 把 “ 格子衫 ” 革新得更时尚,形容了示例工程 Plaid 迁徙至 AndroidX 的过程。在这篇文章中,咱们阐明了迁徙的步骤,遇到的问题和对应的解决方案。

咱们还提供了 问题追踪页,您能够在这个页面看到咱们正在解决的问题,也能够通过左上角的按钮建设新的问题给咱们。

祝大家都能顺畅地迁徙至 AndroidX!

您也能够通过视频回顾 2019 Android 开发者峰会演讲 —— 是时候迁徙至 AndroidX 了!

<iframe src=”//player.bilibili.com/player.html?aid=74729260&bvid=BV13E411i7jX&cid=127830935&page=1″ scrolling=”no” border=”0″ frameborder=”no” framespacing=”0″ allowfullscreen=”true”> </iframe>

正文完
 0