Apa itu Jetifier?

97

Apa itu Jetifier? Misalnya, untuk membuat proyek baru menggunakan dependensi paket androidx, proyek baru ini perlu menambahkan baris berikut ke file gradle.properties :

android.enableJetifier=true

Jadi apa artinya - "aktifkan jetifier"?

Ksenia
sumber
29
IIRC, Jetifier adalah teknologi Googly yang tidak terdokumentasi yang seharusnya secara otomatis mengonversi dependensi transitif untuk menggunakan pustaka AndroidX. Misalnya, Anda memiliki implementation "com.commonsware.cwac:document:0.3.0"file dependencies. Versi pustaka tersebut memiliki ketergantungan transitif pada com.android.support:support-annotations:27.0.2. Namun, Anda ingin menggunakan androidx.annotation:annotationsebagai bagian dari penggunaan dependensi AndroidX lainnya. Jetifier entah bagaimana akan memperbarui com.commonsware.cwac:documentuntuk digunakan androidx.annotation:annotation.
CommonsWare

Jawaban:

68

Google I / O (18) tahun ini, Google telah mengumumkan Jetpack yang merupakan set / kumpulan perpustakaan untuk membuat hidup pengembang lebih mudah.

Jetpack menyertakan komponen arsitektur Android yang diperkenalkan sebelumnya (ViewModel, Room, Paging, LiveData, dll.) Serta komponen arsitektur yang baru diperkenalkan seperti WorkManager, Navigasi. Selain dari Jetpack ini juga memiliki kumpulan pustaka lain seperti AndroidX, AndroidKTX dll.

AndroidX adalah struktur paket baru untuk pustaka dukungan Android seperti dukungan, penyatuan data, desain, dll.

misalnya sekarang di lingkungan pengembang akan menggunakan androidx.databinding. alih-alih android.databinding.sambil mengimpor perpustakaan dalam proyek kami

Ini memungkinkan Google untuk menambahkan SemVer atau Semantic Versioning dalam paket library yang ada. Untuk pengembang, ini berarti kami tidak harus menggunakan versi pustaka dukungan yang sama untuk semua pustaka dukungan. Setiap dukungan atau lebih baik mengatakan pustaka AndroidX akan mempertahankan versinya sendiri.

Keuntungan lain bagi pengembang adalah kami tidak perlu peduli tentang mempertahankan versi yang sama untuk semua pustaka dukungan dalam proyek kami.

Tentang Jetifier, ini mengubah semua paket dukungan ketergantungan pada waktu pembuatan. Sesuai dokumentasi resmi Jetifier

Alat Jetifier memigrasikan pustaka yang bergantung pada pustaka dukungan untuk mengandalkan paket AndroidX yang setara. Alat ini memungkinkan Anda memigrasi pustaka individual secara langsung, daripada menggunakan plugin gradle Android yang dipaketkan dengan Android Studio.

Untuk menggunakan AndroidX dalam sebuah proyek, kita harus menyetel targetSdkVersion untuk proyek kita ke 28 dan menambahkan 2 baris berikut di file gradle.properties .

android.useAndroidX=true

android.enableJetifier=true

Saya harap ini akan menjawab pertanyaan Anda.

EDIT

Tautan ini memiliki pemetaan semua komponen pustaka dukungan dengan bagian penghitung AndroidX mereka.

Juga silakan lihat blog ini untuk penjelasan rinci tentang AndroidX

silwar
sumber
34
Anda tidak benar-benar menjawab pertanyaan "Apa itu Jetifier?", Hanya membahas tentang AndroidX dan Jetpack.
David Miguel
2
@DavidMiguel Saya telah memberikan jawaban untuk pertanyaan utama yang diajukan, apa artinya - "aktifkan jetifier" ?. Meskipun jika menurut Anda jawaban saya sebagian, saya akan memperbarui jawaban saya sesuai dengan itu.
silwar
72

Dengan asumsi bahwa Anda sudah familiar dengan AndroidX. Jika tidak, silakan lihat @ posting ini .

Jetifierakan mengonversi support librariessemua dependensi Anda menjadi AndroidXotomatis, jika Anda tidak menyetelnya ke truemaka proyek Anda akan memiliki keduanya, dukungan ( tidak berlaku lagi setelah versi 28.0.0 ) dan paket AndroidX , yang redundan.

Sebagai contoh

Jika Anda memiliki PhotoView.javaketergantungan Anda. Itu menggunakan pustaka dukungan AppCompatImageView.

import android.support.v7.widget.AppCompatImageView;

Kelas ini sekarang dipindahkan ke androidxpaket, jadi bagaimana cara PhotoViewmendapatkan androidx AppCompatImageView? Dan aplikasi masih berjalan di perangkat.

Siapa yang membuat ini lari?

Jetifier , yang mengonversi semua paket dukungan dependensi pada waktu pembuatan.

Jetifier akan dikonversi android.support.v7.widget.AppCompatImageViewmenjadi androidx.appcompat.widget.AppCompatImageViewsaat membangun proyek.

Kesimpulan

Mengaktifkan Jetifier penting saat Anda bermigrasi dari Pustaka Dukungan ke AndroidX .

Lihat posting ini untuk memahami lebih lanjut tentang AndroidX.

Info

Kode Anda mungkin menunjukkan kesalahan waktu kompilasi setelah mengaktifkan Jetifier saat menggunakan kelas dependensi. yang dapat Anda hapus dengan menghapus .idea, .gradledan menyinkronkan ulang proyek.

gambar2

gambar1

Khemraj
sumber
10
Anda dapat mengatasi error waktu kompilasi dengan menghapus .idea / libraries dan menyinkronkan ulang Gradle.
Clo Knibbe
1
Saya pikir Jetifier bekerja pada waktu pembuatan dan bukan pada waktu proses seperti yang disebutkan di sini. Anda bisa menggunakan android.enableJetifier = true pada Gradle atau menggunakan alat mandiri jetifier developer.android.com/studio/command-line/jetifier untuk bermigrasi ke androidx. Kedua opsi ini menggantikan nama paket pada waktu pembuatan sehingga pustaka dukungan lama bahkan bukan bagian dari pengemasan.
Nishanth
6

Jetifier membantu dalam memigrasi proyek android ke AndroidX .

Jetifier membantu dalam membuat perpustakaan pihak ke-3 kompatibel dengan proyek AndroidX Anda.

Jika Anda tidak menggunakan pustaka pihak ketiga dalam proyek android Anda, Anda tidak perlu menggunakan Jetifier karena Jetifier hanya membantu dalam "membuat pustaka pihak ketiga" yang kompatibel dengan proyek Anda jika Anda bermigrasi ke AndroidX. Jadi untuk membuat proyek Anda menggunakan Jetifier, Anda menulis kode di bawah ini di gradle.properties .

android.enableJetifier=true
android.useAndroidX=true

Jika Anda tidak bermigrasi ke AndroidX dan menggunakan cara sebelumnya menggunakan pustaka Android (misalnya: com.android.support ), pustaka pihak ketiga ini tidak perlu dibuat kompatibel karena pustaka pihak ketiga ini sudah kompatibel dengan cara sebelumnya dari menggunakan perpustakaan Android. Dalam hal ini, Anda tidak perlu menggunakan Jetifier, Jadi sekarang, Anda tidak perlu menulis baris yang diberikan di atas atau Anda cukup menulis seperti di bawah ini untuk mengubah nilai di masa mendatang untuk pindah ke androidx: -

android.enableJetifier=false
android.useAndroidX=false
Abhishek Kumar
sumber
4

Jetifier

The jetifier adalah alat yang berguna yang secara otomatis bermigrasi Anda dependenciesuntukAndroidX saat membangun. Tanpanya, Anda memerlukan setiap ketergantungan yang Anda gunakan untuk memiliki versi AndroidX sebelum Anda dapat bermigrasi, dan itu mungkin tidak akan terjadi untuk beberapa waktu.

Ada batasan penting untuk diperhatikan: jetifier hanya berfungsi pada artefak yang dikemas. Ini tidak berfungsi pada kode sumber Anda, yang diharapkan untuk Anda perbarui sendiri

untuk mengaktifkan AndroidX, Anda perlu menambahkan 2 tanda ke gradle.propertiesfile Anda . Bendera pertama memberi tahu Plugin Android untuk menggunakan AndroidXpaket sebagai ganti AppCompat, dan tanda kedua akan mengaktifkan Jetifier:

android.useAndroidX=true
android.enableJetifier=true

Lihat ini , posting ini untuk memahami lebih lanjut tentang AndroidX

Basi
sumber
3

Dari dokumen resmi

Jika tanda ini disetel ke true, plugin Android secara otomatis memigrasikan library pihak ketiga yang ada untuk menggunakan dependensi AndroidX dengan menulis ulang binernya. Bendera ini salah secara default jika tidak ditentukan.

Ini berguna untuk kompatibilitas. Saat Konsumen menggunakan androidXdan Produsen menggunakan support. Misalnya ketika proyek Anda di AndroidXingin menggunakan dependensi yang menggunakan support librarysebagai ganti AndroidX[Contoh]

yoAlex5
sumber
0

Tambahkan dua baris ini android.useAndroidX = true

android.enableJetifier = true

di buid.gradle Ini berhasil untuk saya

Apurva Aggarwal
sumber