什么是Jetifier?例如,为了使用AndroidX打包的依赖项创建新项目,该新项目需要将以下行添加到gradle.properties文件中:
android.enableJetifier=true
“启用Jetifier”是什么意思?
假设您熟悉 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
并重新同步项目来删除这些错误。
谷歌在今年的 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。
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
Jetifier
Jetifier是一款方便的工具,可在构建时自动将您的dependencies
迁移到AndroidX
。如果没有它,您需要使用的每个依赖项都必须有一个AndroidX版本,然后才能进行迁移,这可能需要一些时间。
请注意,有一个重要的限制:Jetifier仅适用于打包的构件。它不适用于您的源代码,您需要自己更新源代码。
要启用AndroidX,您需要向gradle.properties
文件添加2个标志。第一个标志告诉Android插件使用AndroidX
软件包而不是AppCompat
,第二个标志将启用Jetifier
:
android.useAndroidX=true
android.enableJetifier=true
buid.gradle
文件中。android.useAndroidX=true
android.enableJetifier=true
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