Jetifier是什么?

144
什么是Jetifier?例如,要使用androidx打包的依赖项创建新项目,该新项目需要将以下行添加到gradle.properties文件中:

什么是Jetifier?例如,为了使用AndroidX打包的依赖项创建新项目,该新项目需要将以下行添加到gradle.properties文件中:

android.enableJetifier=true

“启用Jetifier”是什么意思?


48
Jetifier是Google的一个未公开技术,旨在自动将传递依赖项转换为使用AndroidX库。例如,假设您的依赖项中有implementation "com.commonsware.cwac:document:0.3.0"。该库版本具有对com.android.support:support-annotations:27.0.2的传递依赖项。但是,作为使用其他AndroidX依赖项的一部分,您希望使用androidx.annotation:annotation。Jetifier将以某种方式更新com.commonsware.cwac:document以使用androidx.annotation:annotation - CommonsWare
6个回答

110

假设您熟悉 AndroidX 的使用。如果不熟悉,请参见 @此帖子

Jetifier 会自动将所有依赖项的 support libraries 转换为 AndroidX,如果您不将其设置为 true,那么您的项目将同时包含已经在 28.0.0 版本之后停止更新的支持库(deprecated) 和 AndroidX 库,这是多余的。

例如

如果您的依赖项中有 PhotoView.java,它使用支持库 AppCompatImageView

import android.support.v7.widget.AppCompatImageView;

这个类现在移动到了 androidx 包中,那么如何使 PhotoView 获取到 androidx 的 AppCompatImageView?并且应用仍然在设备中运行。

是谁让它正常运行的?

Jetifier ,它会在构建项目时将所有依赖的支持包转换为 AndroidX 支持包。

Jetifier会将android.support.v7.widget.AppCompatImageView 转换为 androidx.appcompat.widget.AppCompatImageView

结论

启用 Jetifier 在从 Support Libraries 迁移到 AndroidX 时很重要。

请查看此帖子以了解有关 AndroidX 的更多信息。

信息

在使用依赖类时启用 Jetifier 后,您的代码可能会显示编译时错误, 您可以通过删除 .idea.gradle 并重新同步项目来删除这些错误。

image2

image1


11
您可以通过删除.idea/libraries并重新同步Gradle来消除编译时的错误。 - Clo Knibbe
1
我认为Jetifier只在构建时而非运行时起作用,正如此处所述。您可以在Gradle中使用android.enableJetifier=true,或者使用独立的Jetifier工具https://developer.android.com/studio/command-line/jetifier进行迁移并转换为Androix。这两个选项都会在构建时替换软件包名称,因此旧的支持库甚至不会成为打包的一部分。 - Nishanth
这是最好的答案。+1 - user10186832

88

谷歌在今年的 Google I/O (18) 中宣布了 Jetpack,这是一组库,旨在使开发人员的生活更加轻松。Jetpack 包括之前介绍过的 Android 架构组件 (ViewModel、Room、Paging、LiveData 等),以及新引入的架构组件,如 WorkManager 和 Navigation。除此之外,Jetpack 还有其他一些库,例如 AndroidX、AndroidKTX 等。

AndroidX 是 Android 支持库的新程序包结构,例如 support、databinding、design 等支持库。例如,现在开发人员将使用 androidx.databinding. 而不是 android.databinding. 导入我们项目中的库。

这使得谷歌能够为他们的库包添加语义化版本控制。对于开发人员来说,这意味着我们不必在所有支持库上使用相同的支持库版本。每个支持或 AndroidX 库将保持其自己的版本控制。

另一个开发人员的优势是我们不必关心在项目中维护相同版本的所有支持库。

关于 Jetifier,它可以在构建时将所有依赖的支持包转换为 AndroidX 包。根据 Jetifier 的官方文档:

Jetifier 工具将依赖于支持库的库迁移到依赖于相应的 AndroidX 包。该工具让你直接迁移单个库,而不是使用随 Android Studio 捆绑的 Android Gradle 插件。

要在项目中使用 AndroidX,我们需要将项目的 targetSdkVersion 设置为 28 并在gradle.properties 文件中添加以下 2 行。

android.useAndroidX=true

android.enableJetifier=true

我希望这能解答您的疑问。

编辑

这个链接包含所有支持库组件与它们的AndroidX对应关系映射。

此外,请参考这篇博客,详细了解AndroidX。


40
您的问题是“什么是Jetifier?”,但目前您所提供的内容只涉及AndroidX和Jetpack,没有直接回答您的问题。我理解您希望得到有关Jetifier的信息。Jetifier是一个工具,用于在使用旧版Android Support库的项目中兼容AndroidX。简而言之,它将旧版支持库的代码转换为与AndroidX兼容的代码。 - David Miguel
4
我已回答主要问题,即“启用Jetifier”是什么意思。如果您认为我的答案是不完整的,我将相应地更新我的答案。 - silwar

14

Jetifier有助于将安卓项目迁移到AndroidX

Jetifier有助于使第三方库与您的AndroidX项目兼容

如果您的android项目中没有使用任何第三方库,则不需要使用Jetifier,因为Jetifier只有在您迁移到AndroidX并且需要让项目使用第三方库时才会发挥作用。要让项目使用Jetifier,您需要在gradle.properties中编写以下代码。

android.enableJetifier=true
android.useAndroidX=true

如果您不迁移到AndroidX并使用以前的方式使用Android库(例如:com.android.support),则这些第三方库无需进行兼容处理,因为这些第三方库已与以前的Android库使用方式兼容。在这种情况下,您不需要使用Jetifier。现在,您不需要编写上面给出的代码行,或者您可以简单地按照以下方式编写代码以在将来更改值以移动到AndroidX:

android.enableJetifier=false
android.useAndroidX=false

7

Jetifier

根据官方文档,当设置该标志为true时,Android插件会自动将现有的第三方库迁移到使用AndroidX依赖项,通过重写其二进制文件来实现。如果未指定,则默认情况下该标志为false。

这对于兼容性是很有用的。例如,当消费者使用androidX,而生产者使用support时。例如,当您的项目在AndroidX上想要使用使用support library而不是AndroidX的依赖项时,就可以使用该工具。[示例]


5

Jetifier

Jetifier是一款方便的工具,可在构建时自动将您的dependencies迁移到AndroidX。如果没有它,您需要使用的每个依赖项都必须有一个AndroidX版本,然后才能进行迁移,这可能需要一些时间。

请注意,有一个重要的限制:Jetifier仅适用于打包的构件。它不适用于您的源代码,您需要自己更新源代码。

要启用AndroidX,您需要向gradle.properties文件添加2个标志。第一个标志告诉Android插件使用AndroidX软件包而不是AppCompat,第二个标志将启用Jetifier

android.useAndroidX=true
android.enableJetifier=true

请查看这个这篇文章以了解更多关于AndroidX的内容。


-3
将这两行代码添加到 buid.gradle 文件中。
android.useAndroidX=true
android.enableJetifier=true

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接