Jetpack是一组库,工具和指南,可帮助您更轻松地编写高质量的应用程序。Jetpack通过最佳实践,限制样板代码并简化复杂的任务,使编码变得更容易。所有这些目标都是使您能够专注于您真正关心的代码。

AndroidX是Jetpack中所有库的软件包名称。将AndroidX视为用于开发,测试,版本化和发布Jetpack库的开源项目。

在I / O 2018上,我们宣布将支持库重构为AndroidX命名空间,该名称空间已通过Support Library 28和AndroidX 1.0的发布完成。

为什么要迁移?

现在是时候从使用Android支持库迁移到AndroidX。这背后有四个原因:

  1. Android支持库已寿终正寝。28.0是Android支持名称空间的最新版本,并且不再维护该名称空间。因此,如果您想要以前在支持库中获得的错误修复或新功能,则需要迁移到AndroidX。
  2. 更好的包裹管理。使用AndroidX,您可以获得标准化和独立的版本控制,以及更好的标准化命名和更频繁的发行。
  3. 其他库已迁移为使用AndroidX名称空间库,包括Google Play服务,Firebase,Butterknife,Mockito 2和SQLDelight等。
  4. 所有新的Jetpack库都将在AndroidX名称空间中发布。因此,例如,要利用Jetpack ComposeCameraX,您需要迁移到AndroidX命名空间。

准备迁移

在开始迁移到AndroidX之前,您应该:

  • 备份您的项目。如果您使用的是源代码控制工具,仍然建议您进行备份,因为迁移会更改项目中的许多文件。
  • 创建一个新分支,在该分支上进行迁移更改。
  • 如果可能的话,请在迁移期间暂停或最小化开发(至少不要尝试进行重构或引入新功能),因为这将有助于减少可能发生的合并冲突。

迁移

在整个迁移步骤中,着重于解决错误,使您的应用编译并通过所有测试。

步骤1:更新到支持库版本28

不建议从支持库的旧版本(例如26或27)直接迁移到AndroidX:不仅需要解决名称空间更改,还需要解决旧版本和AndroidX之间的API更改。

因此,建议您更新到版本28,解决所有API更改,并确保您的应用使用版本28进行编译。

支持库版本28和AndroidX 1.0是等效的二进制文件,这意味着在这两个版本之间只有程序包名称更改:所有API都相同。这意味着从28迁移到AndroidX时,您几乎不需要修复。

步骤2:启用Jetifier

Jetifier帮助迁移第三方依赖项以使用AndroidX。Jetifier将更改这些依赖项的字节码,以使其与使用AndroidX的项目兼容。但是,Jetifier不会更改您的源代码或迁移您生成的代码。

要在您的应用中启用Jetifier,请在gradle.properties文件中添加以下内容:

android.useAndroidX = true android.enableJetifier = true

现在,当代码自动完成导入库时,您将导入该库的AndroidX版本,而不是旧的支持库版本。

步骤3.更新依赖关系

在开始迁移之前,您应该将每个第三方库(例如Butterknife,Glide,Mockito 2和SqlDelight)更新到该库的最新版本。否则可能导致无法解释的编译错误。

如果您使用的是代码生成库,则Jetifier不会修改它们。因此,您需要检查代码生成库是否与AndroidX兼容。

如果您考虑跳过步骤2和3,则可能会遇到一些错误:

  • 您使用的第三方代码与AndroidX不兼容。在这种情况下,类似于下面的堆栈跟踪将向您显示它正在尝试获取旧版本的支持库:
… 错误:程序类型已存在:android.support.v4.app.INotificationSideChannel $ Stub $ Proxy | 原因:程序类型已经存在:android.support.v4.app.INotificationSideChannel $ Stub $ Proxy …
  • 如果您有部分迁移的项目,则可能会遇到重复的类错误,该错误试图从支持库和AndroidX提取相同的代码。堆栈跟踪将显示如下内容:
… 在模块classes.jar(androidx.core:core:1.0.0)和classes.jar(com.android.support:support-compat:28.0.0)中找到重复的类android.support.v4.app.INotificationSideChannel …

步骤4:更新您的原始码

您有3个选项来更新源代码以使用AndroidX:

  • Android Studio
  • 手动更新
  • Bash脚本

如果您使用的是稳定的Android Studio 3.2或更高版本,则可以使用“ 重构”菜单上的“ 迁移到AndroidX”选项来更新源代码。这是推荐的方式,因为Android Studio可以在重构时检查您的源代码以做出正确的决定。

如果您不使用Android Studio或使用“迁移到AndroidX”选项无法涵盖的更复杂的应用程序体系结构,则应利用类映射csv文件来实现查找和替换bash脚本。此脚本应找到android.support类的所有源代码实例,然后将其替换为同等的AndroidX。

更具体地说,脚本应采用提供类映射的CSV文件,然后运行grep命令和sed命令以替换程序包名称。但是,由于这是一种蛮力的迁移方法,因此这种基本的查找和替换可能无法充分或正确地完成迁移。

此外,更新也可以手动完成。

如果您决定采用手动方法,请访问“迁移到AndroidX”页面,您可以在其中找到详细描述支持库软件包及其对应类映射为AndroidX 的工件映射。您也可以从此页面下载CSV文件。

就是这样,您现在应该拥有一个可编译并使用AndroidX的项目。

那些讨厌的例外

虽然我们在此讨论的工具和流程应能顺利指导大多数应用程序进行迁移,但我们发现在某些情况下您可能需要手动进行更改。

版本配置文件

您将需要手动重新应用定义库版本的变量。为了说明build.gradle这一点,在迁移之前,您的文件可能看起来像这样:

ext.versions = [     ''drawer':'28     .0.0 ','rview':'28 .0.0' ] 实现“ com.android.support:drawerlayout:${versions.drawer}” 实现“ com.android.support: recyclerview-v7:$ {versions.rview}”
ext.versions = [     'drawer':'28     .0.0 ','rview':'28 .0.0' ] 实现“ androidx.drawerlayout:drawerlayout:1.0.0” 实现“ androidx.recyclerview:recyclerview:1.0.0”

DrawerLayout和RecyclerView使用的是AndroidX软件包,但是版本号现在是内联的。此外,版本变量号尚未更改。因此,您需要对此进行手动更新:

ext.versions = [     ''drawer':'1.0.0',    'rview':'1.0.0' 
] 实现“ androidx.drawerlayout:drawerlayout:$ {versions.drawer}” 实现“ androidx.recyclerview:recyclerview:$ {版本.rview}”

ProGuard和构建脚本

迁移工具不会自动更新ProGuard和任何关联的内置脚本。因此,如果您正在使用它们,并且其中包含程序包名称,则需要手动编辑它们。

获取最新的稳定版本

迁移工具提取最新版本的AndroidX库。结果,您可能最终得到某些库的Alpha版本,而不是稳定版本。例如,迁移之前的支持库版本可能是:

实施'com.android.support:appcompat-v7:28.0.0'

迁移后,您将使用相应AndroidX库的Alpha版本:

实现'androidx.appcompat:appcompat:1.1.0-alpha01'

因此,如果您希望使用该库的稳定版本,则需要手动更新该版本:

实现'androidx.appcompat:appcompat:1.0.2'

更多帮助和资源

您可以在developer.android.com 迁移到AndroidX页面上找到有关此过程,工具以及可能遇到的问题的更多信息。该页面包括AndroidX项目的概述,迁移指南以及旧的支持库到新的稳定版和alpha AndroidX版本的映射表,以及您需要编写迁移脚本的CSV文件。

在其他地方,也有一篇文章详细介绍了在Plaid示例项目中向AndroidX迁移

分类: 未分类

bayshier

愿世间每个美好的灵魂都能被温柔以待

发表评论

电子邮件地址不会被公开。 必填项已用*标注