Tema transisi ke Androidx sekarang ada di udara. Sudah ada
artikel pendek dalam bahasa Inggris oleh Daniel Lew , ada
laporan . Tetapi mereka semua secara dangkal mempertimbangkan skenario transisi yang dijelaskan dalam
dokumentasi Google .
Saya ingin berbagi pengalaman. Proyek saya menggunakan Moxy dan Cicerone, saya menemukan pengalaman saya menarik, karena di saluran telegram resmi perpustakaan ini muncul pertanyaan secara berkala kapan mereka akan ditransfer ke Androidx.
Hanya Bermigrasi ke AndroidX ...
Untuk mentransfer proyek ke Androidx, Anda perlu mengikuti beberapa langkah sederhana:
1. Instal
compileSdkVersion 28 dan
targetSdkVersion 28 , perbarui semua perpustakaan dukungan ke versi terbaru.
2. Dalam file
gradle.properties tambahkan baris:
android.useAndroidX=true android.enableJetifier=true
3. Jika Anda sudah menggunakan Android Studio 3.2, maka gunakan refactoring:
Dia akan melakukan sebagian besar (atau kurang) pekerjaan untuk Anda.
Jika karena alasan tertentu Anda tidak menggunakan Git, atau sistem kontrol versi lain, maka pada tahap ini Anda akan memiliki kesempatan untuk membuat arsip proyek:
Klik tombol Migrasi, pilih tempat untuk menyimpan arsip, dan setelah beberapa saat, kami mendapatkan hasil dari pengecekan proyek sebelum refactoring:
Di sini kita melihat dependensi mana dalam build.gradle dan dalam arahan impor yang akan diganti. Dalam contoh kelas MainActivity, seperti yang dapat dilihat pada tangkapan layar di atas, satu ketergantungan akan diganti:
android.support.v4.view.GravityCompat , tetapi jika kita membuka kelas ini, kita akan melihat bahwa sebenarnya ada tiga dependensi yang perlu diganti:
Saya tidak mengerti alasan perilaku selektif tersebut, tetapi dependensi ini harus diperbaiki secara manual. Klik "Lakukan Refactor".
Jika Anda tidak menggunakan Android Studio 3.2, maka semua dependensi diperbaiki secara manualAkan diperlukan untuk mengubah dependensi di
build.gradle (untuk kejelasan, saya berkomentar dependensi lama):

Daftar lengkap penggantian dapat ditemukan di
sini .
Kemudian sinkronkan proyek dengan Gradle dan dapatkan banyak kesalahan. Ini adalah arahan impor di kelas Anda, mereka merujuk ke paket lama, Anda perlu mengubahnya sesuai dengan
tabel ini .
Jadi, karena studio tidak dapat mengganti semua dependensi (mungkin Anda bisa, maka Anda dapat diberi selamat), ketika Anda mencoba membangun sebuah proyek, Anda akan melihat daftar kesalahan yang serupa:
Membuka kelas dengan kesalahan, kita akan melihat sesuatu seperti ini:
Kami menghapus dependensi yang usang, dan dengan hotkey Alt + Enter, kami mengimpor kelas dari paket
androidxJadi kami memperbaiki semua kelas. Jika kesalahan tidak terkait dengan "impor", jangan memperhatikannya, kemungkinan besar itu karena masalah yang sama di kelas lain.
Sebagai contoh:
Kesalahan di sini terkait dengan fakta bahwa di kelas TimelineView Anda juga perlu menghilangkan masalah impor. Ketika semua kesalahan sudah diperbaiki, kami kembali menjalankan pembangunan proyek, dan mungkin lagi kami mendapatkan daftar kesalahan, hanya di kelas lain, kami melanjutkan proses berulang.
Untuk kesalahan dengan kelas yang dihasilkan (Belati atau Pengikat Data), jangan perhatikan pada tahap ini. Jika tidak ada kesalahan di kelas Anda, dan studio hanya bersumpah pada kode yang dihasilkan, maka Anda perlu menjalankan Proyek Bersih dan Membangun Kembali Proyek.
Jika ini tidak membantu, Anda dapat mencoba menghapus cache studio:
Anda harus menghapus cache setidaknya sekali, sehingga kelas yang menghasilkan DataBinding atau Room dibuat dengan benar.
Perpustakaan eksternal
Secara umum, kami mengatur flag
android.enableJetifier = true sehingga pada tahap pembangunan proyek, dependensi pustaka eksternal diganti dengan dependensi AndroidX yang sesuai secara otomatis, tetapi untuk beberapa alasan ini tidak terjadi.
Bagaimanapun, sebelum Anda melakukan apa yang dijelaskan di bawah ini, pastikan Anda memiliki masalah ini dan bahwa versi terbaru dari perpustakaan yang Anda gunakan belum diterjemahkan ke AndroidX.
Moksi
MainActivity dalam proyek saya diwarisi dari
MvpAppCompatActivity adalah kelas Moxy, yang, pada saat penulisan, belum diterjemahkan ke AndroidX. Untuk mengatasi masalah ini, saya menyalin kelas ke proyek saya, dalam paket
androidx terpisah, dan memperbaiki dependensi di dalamnya. Nama kelas lebih baik dibiarkan tidak berubah, sehingga akan lebih mudah untuk memperbarui dependensi.
Prosedur yang sama perlu dilakukan untuk fragmen, untuk kelas
MvpAppCompatFragment .
Harap perhatikan bahwa ada generik di kelas ini, di bidang
mMvpDelegate , jangan lupa untuk memperbaiki ketergantungan di dalamnya, mudah untuk tidak menyadarinya, karena ini adalah ketergantungan pada kelas Moxy, dan bukan pada kelas perpustakaan dukungan.
Cicerone
Untuk menyelesaikan masalah dengan Cicerone, saya harus membuat salinan kelas
SupportAppScreen dan
SupportAppNavigator di proyek saya. Perhatikan bahwa kelas SupportAppNavigator tergantung pada SupportAppScreen. Ingatlah untuk memperbaiki ketergantungan ini pada salinan Anda.
Kesimpulan
Beralih ke AndroidX adalah pengalaman yang menyenangkan, dan mungkin jika Anda tidak memiliki kebutuhan mendesak, Anda harus menunggu sedikit dengannya. Setelah semua, kemudian, ketika sebagian besar rake akan dihapus dari jalan Anda, akan lebih mudah dan lebih cepat untuk melakukannya. Tetapi secara pribadi, saya senang bahwa jalan ini telah berlalu, benjolan di dahi akan sembuh, dan pengalaman yang bermanfaat akan tetap bersama saya.