Что такое Jetifier?

100

Что такое Jetifier? Например, чтобы создать новый проект с использованием зависимостей из пакета androidx, этот новый проект должен добавить следующую строку в файл gradle.properties :

android.enableJetifier=true

Так что это значит - «включить jetifier»?

Ксения
источник
30
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

Ответы:

70

В этом году на 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 или Semantic Versioning . Для разработчиков это означает, что нам не нужно использовать одну и ту же версию библиотеки поддержки для всех библиотек поддержки. Каждая поддержка или, лучше сказать, библиотека AndroidX будет поддерживать собственное управление версиями.

Еще одним преимуществом для разработчиков является то, что нам не нужно заботиться о поддержании одной и той же версии для всей библиотеки поддержки в нашем проекте.

Что касается Jetifier, он преобразует весь пакет поддержки зависимостей во время сборки. Согласно официальной документации Jetifier

Инструмент Jetifier переносит библиотеки, зависящие от поддерживаемой библиотеки, на эквивалентные пакеты AndroidX. Этот инструмент позволяет напрямую переносить отдельную библиотеку, вместо того, чтобы использовать плагин Android Gradle, поставляемый с Android Studio.

Чтобы использовать AndroidX в проекте, мы должны установить targetSdkVersion для нашего проекта на 28 и добавить следующие 2 строки в файл gradle.properties .

android.useAndroidX=true

android.enableJetifier=true

Надеюсь, это ответит на ваш вопрос.

РЕДАКТИРОВАТЬ

В этой ссылке есть сопоставление всех компонентов библиотеки поддержки с их аналогом AndroidX.

Также обратитесь к этому блогу для получения подробных сведений об AndroidX.

Silwar
источник
35
На самом деле вы не отвечаете на вопрос «Что такое Jetifier?», Только про AndroidX и Jetpack.
Дэвид Мигель
2
@DavidMiguel Я дал ответ на главный заданный вопрос: что это означает - «включить jetifier» ?. Хотя, если вы считаете, что мой ответ частичный, я соответствующим образом обновлю свой ответ.
Silwar
74

Предполагая, что вы знакомы с AndroidX. Если нет, см. @ Этот пост .

Jetifierпреобразует support librariesвсе ваши зависимости в AndroidXавтоматически, если вы не установите его, trueтогда ваш проект будет иметь как поддержку ( устарел после версии 28.0.0 ), так и пакет AndroidX , который является избыточным.

Например

Если у вас есть PhotoView.javaфайл dependency. Это использует библиотеку поддержки AppCompatImageView.

import android.support.v7.widget.AppCompatImageView;

Этот класс теперь перемещен в androidxпакет, так как же PhotoViewполучить androidx AppCompatImageView? И приложение все еще работает на устройстве.

Кто совершил этот пробег?

Jetifier , который преобразует весь пакет поддержки зависимостей во время сборки.

Jetifier преобразуется android.support.v7.widget.AppCompatImageViewв androidx.appcompat.widget.AppCompatImageViewпри создании проекта.

Вывод

Включение Jetifier важно при переходе с библиотек поддержки на AndroidX .

Смотрите этот пост более понять о AndroidX.

Информация

Ваш код может показывать ошибки времени компиляции после включения Jetifier при использовании классов зависимостей. которую вы можете удалить, удалив .idea, .gradleи проект повторной синхронизации.

image2

image1

Хемрадж
источник
10
Вы можете избавиться от ошибок времени компиляции, удалив .idea / libraries и повторно синхронизируя Gradle.
Clo Knibbe 05
1
Я думаю, что Jetifier работает во время сборки, а не во время выполнения, как упоминалось здесь. Вы можете использовать android.enableJetifier = true в gradle или использовать автономный инструмент jetifier developer.android.com/studio/command-line/jetifier для перехода на androidx. Оба этих параметра заменяют имена пакетов во время сборки, поэтому старые библиотеки поддержки даже не являются частью пакета.
Nishanth 01
6

Jetifier помогает перенести проект Android на 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
Абхишек Кумар
источник
4

Jetifier

Jetifier представляет собой удобный инструмент , который автоматически переносит свой dependenciesTo AndroidXво время сборки. Без него вам потребовались бы все зависимости, которые вы используете, чтобы иметь версию AndroidX, прежде чем вы сможете мигрировать, а этого, вероятно, не произойдет в течение некоторого времени.

Следует отметить важное ограничение: средство проверки работает только с упакованными артефактами. Он не работает с вашим исходным кодом, который вы должны обновить самостоятельно.

для включения AndroidX вам нужно добавить в gradle.propertiesфайл 2 флага . Первый флаг указывает подключаемому модулю Android использовать AndroidXпакеты вместо AppCompat, а второй флаг включает Jetifier:

android.useAndroidX=true
android.enableJetifier=true

Смотрите это , это сообщение , чтобы понять больше о AndroidX

Basi
источник
3

Из официального документа

Если для этого флага установлено значение true, плагин Android автоматически переносит существующие сторонние библиотеки на использование зависимостей AndroidX, переписывая их двоичные файлы. По умолчанию флаг ложен, если он не указан.

Это полезно для совместимости. Когда Потребитель использует, androidXа Производитель использует support. Например, когда ваш проект AndroidXхочет использовать зависимость, которая использует support libraryвместо AndroidX[Пример]

yoAlex5
источник
0

Добавьте эти две строки android.useAndroidX = true

android.enableJetifier = true

в buid.gradle Это сработало для меня

Апурва Аггарвал
источник