什么是Jetifier?


97

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

android.enableJetifier=true

那是什么意思-“启用喷射器”?


29
IIRC,Jetifier是Googly技术的未记录部分,该技术应该自动将传递依赖项转换为使用AndroidX库。例如,假设你有implementation "com.commonsware.cwac:document:0.3.0"你的dependencies。该库版本对具有传递依赖com.android.support:support-annotations:27.0.2。但是,您希望将其androidx.annotation:annotation用作使用其他AndroidX依赖项的一部分。Jetifier将以某种方式进行更新com.commonsware.cwac:document以使用androidx.annotation:annotation
CommonsWare

Answers:


67

在今年的Google I / O(18)中,Google宣布了Jetpack,它设置/收集了许多库,以简化开发人员的生活。

Jetpack包括以前引入的Android体系结构组件(ViewModel,Room,Paging,LiveData等),以及新引入的体系结构组件(如WorkManager,Navigation)。除此以外,Jetpack还具有其他库集,例如AndroidX,AndroidKTX等。

AndroidX是Android支持库(如支持,数据绑定,设计等)的新包结构。

例如,现在在病房中,开发人员将使用androidx.databinding。而不是android.databinding。在我们的项目中导入库

这使Google可以在其中的库包中添加SemVer语义版本控制。对于开发人员,这意味着我们不必为所有支持库使用相同的支持库版本。每种支持或更佳的说法是AndroidX库都会维护自己的版本。

对于开发人员来说,另一个优势是我们不必为项目中的所有支持库维护相同的版本。

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

Jetifier工具会迁移依赖于支持库的库,以改为依赖等效的AndroidX软件包。该工具可让您直接迁移单个库,而无需使用与Android Studio捆绑在一起的Android gradle插件。

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

android.useAndroidX=true

android.enableJetifier=true

我希望这能回答您的查询。

编辑

此链接具有所有支持库组件及其AndroidX计数器部分的映射。

另请参阅博客以获取有关AndroidX的详细说明


34
您并没有真正回答“什么是Jetifier?”这个问题,仅是考虑了AndroidX和Jetpack。
大卫·米格尔

2
@DavidMiguel我已回答了主要问题,即“启用喷射器”是什么意思?尽管如果您认为我的答案是不完整的,我将相应地更新我的答案。
silwar

71

假设您熟悉AndroidX。如果没有,请参阅@ this post

Jetifier会自动将support libraries所有依赖项转换为依赖项AndroidX,如果您未将其设置为,true则您的项目将同时具有支持(在28.0.0版本之后弃用)和AndroidX软件包,这是多余的。

例如

如果您有PhotoView.java依赖关系。那使用了支持库AppCompatImageView

import android.support.v7.widget.AppCompatImageView;

该类现在移至androidxpackage,那么如何PhotoView获取androidx AppCompatImageView?应用仍在设备中运行。

谁参加了这次比赛?

Jetifier,它在构建时转换所有依赖项支持包。

Jetifier将在构建项目时转换android.support.v7.widget.AppCompatImageViewandroidx.appcompat.widget.AppCompatImageView

结论

支持库迁移到AndroidX时,启用Jetifier很重要

请参阅这篇文章,以了解有关AndroidX的更多信息。

信息

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

image2

图片1


10
您可以删除.idea / libraries并重新同步Gradle,从而摆脱编译时错误。
克洛妮贝

1
我认为Jetifier是在构建时工作的,而不是在此处提到的运行时工作的。您可以在gradle上使用android.enableJetifier = true,也可以使用独立的jetifier工具developer.android.com/studio/command-line/jetifier迁移到androidx。这两个选项在构建时都会替换软件包名称,因此旧的支持库甚至都不是软件包的一部分。
Nishanth

6

Jetifier有助于将android项目迁移到AndroidX

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

如果您在android项目中未使用任何第三方库,则无需使用Jetifier,因为在迁移到AndroidX的情况下,Jetifier仅有助于“使第三方库”与您的项目兼容。因此,要使您的项目使用Jetifier,请在gradle.properties中编写以下代码。

android.enableJetifier=true
android.useAndroidX=true

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

android.enableJetifier=false
android.useAndroidX=false

4

喷射器

jetifier是一个方便的工具,可以自动迁移你dependenciesAndroidX在构建时。没有它,您将需要拥有AndroidX版本的所有依赖项才能迁移,而这种依赖可能会在一段时间内消失。

有一个重要的限制要注意:过滤器仅适用于打包的工件。它不适用于您的源代码,您应自行更新

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

android.useAndroidX=true
android.enableJetifier=true

看到这个这篇文章了解更多关于AndroidX的信息


3

来自官方文件

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

这对于兼容性很有用。当消费者使用androidX而生产者使用时support。例如,当您的项目AndroidX要使用依赖项而support library不是AndroidX[Example]时


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.