什么是 Jetifier?

What is Jetifier?

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

android.enableJetifier=true

那是什么意思 - "enable jetifier"?

今年的 Google I/O (18),Google 宣布了 Jetpack,它是 set/collection 库,可以让开发人员的生活更轻松。

Jetpack 包括之前引入的 Android 架构组件(ViewModel、Room、Paging、LiveData 等)以及新引入的架构组件,如 WorkManager、Navigation。除了这个 Jetpack 还有其他库集,如 AndroidX、AndroidKTX 等

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

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

这使 Google 可以在库包中添加 SemVerSemantic Versioning。对于开发人员,这意味着我们不必为所有支持库使用相同的支持库版本。每个支持或更好地说 AndroidX 库都将维护自己的版本控制。

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

关于Jetifier,它会在构建时转换所有依赖的支持包。 根据 Jetifier

的官方文档

Jetifier tool migrates support-library-dependent libraries to rely on the equivalent AndroidX packages instead. The tool lets you migrate an individual library directly, instead of using the Android gradle plugin bundled with Android Studio.

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

android.useAndroidX=true

android.enableJetifier=true

希望这能回答您的问题。

编辑

This link 具有所有支持库组件与其 AndroidX 对应部分的映射。

另请参阅 This 博客以了解有关 AndroidX

的详细说明

假设您熟悉 AndroidX。如果没有,请看@.

Jetifier will convert support libraries of all your dependencies to AndroidX automatically, if you don't set it to true then your project will have both, the support (got deprecated after 28.0.0 version) and AndroidX package, which is redundant.

例如

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

import android.support.v7.widget.AppCompatImageView;

这个class现在被移动到androidx包中,那么PhotoView如何得到androidxAppCompatImageView?应用程序仍在设备中 运行s。

这是谁做的运行?

Jetifier, which converts all support package of dependency at build time.

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

结论

Support Libraries to AndroidX.

迁移时启用 Jetifier 很重要

请参阅 以了解有关 AndroidX 的更多信息。

信息

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

Jetifier

jetifier 是一个方便的工具,可以在构建时自动将您的 dependencies 迁移到 AndroidX。没有它,在迁移之前,您需要使用的每个依赖项都具有 AndroidX 版本,这可能在一段时间内不会发生。

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

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

android.useAndroidX=true
android.enableJetifier=true

请参阅 , this post 以了解有关 AndroidX

的更多信息

Jetifier 帮助将 android 项目迁移到 AndroidX.

Jetifier 帮助 第三方与您的 Android 兼容 X项目。

如果您在 android 项目中没有使用任何第三方库,则不需要使用 Jetifier,因为 Jetifier 仅在 "making 3rd party library" 与您的项目兼容方面有帮助,以防万一正在迁移到 AndroidX。因此,要使您的项目使用 Jetifier,请在 gradle.properties.

中编写以下代码
android.enableJetifier=true
android.useAndroidX=true

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

android.enableJetifier=false
android.useAndroidX=false

Jetifier

来自official doc

When this flag is set to true, the Android plugin automatically migrates existing third-party libraries to use AndroidX dependencies by rewriting their binaries. The flag is false by default if it is not specified.

对兼容性很有用。当消费者使用 androidX 而生产者使用 support 时。例如,当您在 AndroidX 上的项目想要使用使用 support library 而不是 AndroidX

的依赖项时

添加这两行 android.useAndroidX=真

android.enableJetifier=真

在buid.gradle 它对我有用