Що таке Jetifier?


97

Що таке Jetifier? Наприклад, щоб створити новий проект із використанням залежностей, упакованих в androidx, цей новий проект повинен додати наступний рядок у файл gradle.properties :

android.enableJetifier=true

То що це означає - «включити jetifier»?


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

Відповіді:


68

Цього року 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


34
Ви насправді не відповідаєте на запитання "Що таке Jetifier?", А лише про AndroidX та Jetpack.
Девід Мігель,

2
@DavidMiguel Я дав відповідь на основне запитання, що це означає - "включити jetifier" ?. Хоча, якщо ви вважаєте, що моя відповідь часткова, я оновлю відповідь відповідно.
silwar

72

Якщо припустити, що ви знайомі AndroidX. Якщо ні, перегляньте @ цю публікацію .

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

Наприклад

Якщо у вас є PhotoView.javaзалежність. Для цього використовується бібліотека підтримки 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

1
Я думаю, що Jetifier працює під час збірки, а не під час виконання, як згадано тут. Ви можете використовувати android.enableJetifier = true на gradle або використовувати самостійний інструмент jetifier developer.android.com/studio/command-line/jetifier для переходу на androidx. Обидва ці варіанти замінюють імена пакунків під час побудови, тому старі бібліотеки підтримки навіть не є частиною упаковки.
Нішант

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 є зручним інструментом , який автоматично переносить ваш dependenciesToAndroidX в процесі побудови. Без нього вам знадобиться кожна залежність, яку ви використовуєте для того, щоб мати версію AndroidX, перш ніж ви зможете мігрувати, і це, ймовірно, не станеться деякий час.

Існує важливе обмеження, на яке слід звернути увагу: єтифікатор працює лише на упакованих артефактах. Він не працює з вашим вихідним кодом, який ви повинні оновити самостійно

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

android.useAndroidX=true
android.enableJetifier=true

Дивіться це , цей пост, щоб зрозуміти більше про AndroidX


3

З офіційного док

Якщо для цього прапора встановлено значення true, плагін Android автоматично мігрує існуючі сторонні бібліотеки для використання залежностей AndroidX, переписуючи їх двійкові файли. За замовчуванням прапор є хибним, якщо він не вказаний.

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


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.