Jetifier nedir?


101

Jetifier nedir? Örneğin, androidx paketli bağımlılıkları kullanarak yeni bir proje oluşturmak için, bu yeni projenin gradle.properties dosyasına aşağıdaki satırı eklemesi gerekir :

android.enableJetifier=true

Peki bu ne anlama geliyor - "jetifier'ı etkinleştir"?


30
IIRC, Jetifier, geçişli bağımlılıkları otomatik olarak AndroidX kitaplıklarını kullanacak şekilde dönüştürmesi beklenen, belgelenmemiş bir Googly teknolojisidir. Örneğin, implementation "com.commonsware.cwac:document:0.3.0"içinde dependencies. Bu kütüphane sürümü, üzerinde geçişli bir bağımlılığa sahiptir com.android.support:support-annotations:27.0.2. Ancak, androidx.annotation:annotationdiğer AndroidX bağımlılıklarını kullanmanın bir parçası olarak kullanmak istiyorsunuz . Jetifier bir şekilde com.commonsware.cwac:documentkullanmak için güncellenir androidx.annotation:annotation.
CommonsWare

Yanıtlar:


74

Bu yılki Google I / O (18), Google, geliştiricinin hayatını kolaylaştırmak için kitaplık seti / koleksiyonu olan Jetpack'i duyurdu.

Jetpack, daha önce tanıtılan Android mimari bileşenlerini (ViewModel, Room, Paging, LiveData vb.) Ve WorkManager, Navigasyon gibi yeni tanıtılan mimari bileşenlerini içerir. Bunun dışında Jetpack ayrıca AndroidX, AndroidKTX vb. Gibi başka kitaplık setlerine de sahiptir.

AndroidX, destek, veri bağlama, tasarım vb. Gibi Android destek kitaplıkları için yeni bir paket yapısıdır.

Örneğin artık servislerde geliştiriciler androidx.databinding kullanacak. android.databinding yerine . projelerimizdeki kütüphaneleri içe aktarırken

Bu, Google'ın buradaki kitaplık paketlerine SemVer veya Anlamsal Sürümlendirme eklemesini sağlar . Geliştiriciler için bu, tüm destek kitaplıkları için aynı destek kitaplığı sürümünü kullanmak zorunda olmadığımız anlamına gelir. Her destek veya daha iyisi, AndroidX kitaplığının kendi sürümlemesini koruyacağını söyler.

Geliştiriciler için bir başka avantaj da, projemizdeki tüm destek kitaplığı için aynı sürümü korumayı önemsemememizdir.

Jetifier hakkında, derleme zamanında tüm destek bağımlılık paketlerini dönüştürür. Jetifier'ın resmi belgelerine göre

Jetifier aracı, bunun yerine eşdeğer AndroidX paketlerine güvenmek için destek kitaplığına bağımlı kitaplıkları taşır. Araç, Android Studio ile birlikte verilen Android gradle eklentisini kullanmak yerine tek bir kitaplığı doğrudan taşımanıza olanak tanır.

Biz bizim proje için targetSdkVersion ayarlamak zorunda bir projede AndroidX kullanmak için 28 ve 2 çizgileri aşağıdakileri ekleyin gradle.properties dosyası.

android.useAndroidX=true

android.enableJetifier=true

Umarım bu, sorgunuza cevap verir.

DÜZENLE

Bu bağlantı , tüm destek kitaplığı bileşenlerinin AndroidX sayaç bölümüyle eşlemesini içerir.

Ayrıca AndroidX hakkında ayrıntılı açıklama için lütfen bu bloga bakın


35
"Jetifier nedir?" Sorusuna gerçekten cevap vermiyorsunuz, sadece AndroidX ve Jetpack hakkında konuşuyorsunuz.
David Miguel

2
@DavidMiguel Sorulan ana soruya yanıt verdim, bunun anlamı nedir - "jetifier etkinleştirilsin" ?. Cevabımın kısmi olduğunu düşünüyorsanız, cevabımı buna göre güncelleyeceğim.
silwar

79

Aşina olduğunuzu varsayarsak AndroidX. Değilse, lütfen bu gönderiye bakın .

Jetifiersupport librariestüm bağımlılıklarınızı AndroidXotomatik olarak dönüştürür , eğer bunu ayarlamazsanız trueprojeniz hem desteğe ( 28.0.0 sürümünden sonra kullanımdan kaldırıldı ) hem de artık AndroidX paketine sahip olur.

Örneğin

Eğer varsa PhotoView.javasizin bağımlılık içinde. Destek kitaplığını kullanır AppCompatImageView.

import android.support.v7.widget.AppCompatImageView;

Bu sınıf şimdi androidxpakete taşındı , PhotoViewpeki androidx nasıl olacak AppCompatImageView? Ve uygulama hala cihazda çalışıyor.

Bunu kim yaptı?

Derleme sırasında tüm destek bağımlılık paketini dönüştüren Jetifier .

Jetifier dönüştürecektir android.support.v7.widget.AppCompatImageViewiçin androidx.appcompat.widget.AppCompatImageViewprojeyi oluştururken.

Sonuç

Eğer geçirirken Jetifier etkinleştirilmesi önemlidir Destek Kütüphaneleri için AndroidX .

Bkz Bu yazı AndroidX daha iyi anlamak için.

Bilgi

Bağımlılık sınıflarını kullanırken Jetifier'ı etkinleştirdikten sonra kodunuz derleme zamanı hatalarını gösterebilir. hangi silerek kaldırabilirsiniz .idea, .gradleve yeniden senkronize projesi.

image2

image1


10
.İdea / libraries'i silerek ve Gradle'ı yeniden senkronize ederek derleme zamanı hatalarından kurtulabilirsiniz.
Clo Knibbe

1
Jetifier'ın burada belirtildiği gibi çalışma zamanında değil, derleme zamanında çalıştığını düşünüyorum. Android.enableJetifier = true üzerinde gradle'ı kullanabilir veya androidx'e geçmek için bağımsız jetifier tool developer.android.com/studio/command-line/jetifier'ı kullanabilirsiniz. Her iki seçenek de derleme sırasında paket adlarının yerini alır, böylece eski destek kitaplıkları paketin bir parçası bile olmaz.
Nishanth

7

Jetifier için bir android projesi göç yardımcı olur AndroidX .

Jetifier , 3. taraf kitaplığını AndroidX projenizle uyumlu hale getirmenize yardımcı olur .

Android projenizde herhangi bir 3. taraf kitaplığı kullanmıyorsanız, Jetifier'ı kullanmanıza gerek yoktur çünkü Jetifier, AndroidX'e geçmeniz durumunda projenizle uyumlu "3. taraf kitaplığı yapmanıza" yardımcı olur. Yani projenizin Jetifier'ı kullanması için aşağıdaki kodu gradle.properties dosyasında yazarsınız .

android.enableJetifier=true
android.useAndroidX=true

Eğer AndroidX göç ve Android kütüphaneleri kullanılarak önceki yolunu kullanmıyorsanız (örneğin: com.android.support ) Bu 3. taraf kitaplıkları zaten önceki yoldan uyumlu olarak, daha sonra bu 3. parti kütüphaneleri uyumlu hale getirilmesine gerek yoktur Android kitaplıklarını kullanarak. Bu durumda, Jetifier'ı kullanmanıza gerek yoktur, Yani şimdi, yukarıda verilen satırları yazmanıza gerek yoktur veya ileride androidx'e geçmek için değerleri değiştirmek için aşağıdaki gibi yazabilirsiniz: -

android.enableJetifier=false
android.useAndroidX=false

4

Jetifier

Jetifier otomatik göç ettiğini kullanışlı bir araçtır dependenciesTo AndroidXyapı anda. Bu olmadan, geçiş yapmadan önce bir AndroidX sürümüne sahip olmak için kullandığınız her bağımlılığa ihtiyacınız olacak ve bu muhtemelen bir süre olmayacak.

Dikkat edilmesi gereken önemli bir sınırlama vardır: jetifier yalnızca paketlenmiş eserler üzerinde çalışır. Kendinizin güncellemeniz beklenen kaynak kodunuz üzerinde çalışmıyor

AndroidX'i etkinleştirmek için gradle.propertiesdosyanıza 2 bayrak eklemeniz gerekir . İlk bayrak, Android Eklentisine AndroidXbunun yerine paketleri kullanmasını söyler AppCompatve ikinci bayrak şunları etkinleştirir Jetifier:

android.useAndroidX=true
android.enableJetifier=true

Bkz bu , bu Mesaja AndroidX hakkında daha fazla anlamak için


3

Gönderen resmi doc

Bu bayrak true olarak ayarlandığında, Android eklentisi mevcut üçüncü taraf kitaplıklarını, ikili dosyalarını yeniden yazarak AndroidX bağımlılıklarını kullanacak şekilde otomatik olarak taşır. Belirtilmemişse bayrak varsayılan olarak yanlıştır.

Uyumluluk açısından kullanışlıdır. Tüketici kullandığında androidXve Üretici kullandığında support. Örneğin, üzerindeki projeniz [Örnek] yerine AndroidXkullanan bir bağımlılık kullanmak istediğindesupport libraryAndroidX


0

Bu iki satırı ekleyin android.useAndroidX = true

android.enableJetifier = true

in buid.gradle Benim için çalıştı

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.