Migrasi ke AndroidX, Era Baru Support Library Android

Diposting pada 21st May 2020

Apakah AndroidX itu ?

AndroidX merupakan cara baru Google dalam menyusun ulang support libraries-nya. Jadi bila sebelumnya kita sering melihat atau mendengar support libraries dengan berbagai macam nama package-nya dengan notasi seperti v4, v7, v12, v13, dan seterusnya maka pada rilis terbaru sekarang Google tidak lagi memaintain keseluruhan libraries tersebut melainkan semuanya akan dialihkan ke era baru yang mereka namakan AndroidX, kata tersebut diambil dari Android EXtension library yang kemudian mereka sebut dengan AndroidX. AndroidX ini merupakan penamaan atau istilah yang dipakai Jetpack untuk nama package yang menampung seluruh library yang ada di Jetpack. Kemudian apa itu Jetpack ? Jetpack sendiri adalah sekumpulan libraries, tools, dan petunjuk atau instruksi yang digunakan untuk mensimplifikasi serangkaian task yang kompleks untuk memudahkan para developer dalam membangun aplikasi Androidnya yang tidak terpaket di dalam platform API. Oleh karena itu Jetpack ini mampu menawarkan kompatibilitas mundur ke API sebelumnya dan lebih sering diupdate daripada platform Android itu sendiri.


Mengapa Migrasi ke AndroidX ?

Kemudian selanjutnya akan muncul pertanyaan, mengapa saya harus migrasi ke AndroidX ? dan apa keuntungan saya menggunakannya ? dan bagaimana bila saya belum migrasi ke AndroidX tersebut ? Semua pertanyaan tersebut akan saya jelaskan lebih detail pada pembahasan di bawah ini agar kita semua menjadi lebih aware terhadap perubahan ini mengingat ini akan berpengaruh terhadap development Android ke depannya.

AndroidX menawarkan keuntungan atau manfaat lebih dibandingkan dengan Support Library, diantaranya:

    1. Dengan menggunakan AndroidX maka kita akan terus mendapatkan fitur-fitur terbaru yang dikembangkan Google Android dan juga perbaikan terhadap bug-bug yang ada. Karena selepas final support library 28.0.0, seluruh pengembangan API support library dialihkan ke AndroidX.

    2. Sebagian besar libraries populer yang biasa digunakan para developer Android sudah mulai dimigrasikan untuk menggunakan AndroidX namespace libraries, diantaranya adalah Google Play services, Firebase, Butterknife, Mockito 2, dan beberapa yang lainnya.

    3. Tidak seperti halnya Support Library, package-package AndroidX dimaintain dan diupdate secara terpisah sehingga libraries AndroidX dapat diupdate secara terpisah dari project Androidnya.

    4. Pada AndroidX, management package jauh lebih baik dan konsisten terutama dari segi naming convention-nya. Jika pada Support Library ada banyak varian notasi mulai dari v4, v7, v8, v13, hingga v17 maka dengan beralih ke AndroidX maka kita bisa cukup dengan menambahkan package awal  androidx.* sehingga kita tidak lagi perlu memikirkan notasi pada namespace-nya apakah itu v4, v7, ataupun notasi lainnya untuk memanggil fitur-fitur tertentu karena semuanya telah tercover di dalam AndroidX, jadi AndroidX lah yang nantinya akan memikirkannya. Kita hanya perlu menspesifikasikan library tersebut tanpa perlu lagi menyertakan notasinya, berikut contohnya :

    com.android.support:appcompact-v7                 androidx.appcompat:appcompat
    com.android.support:recyclerview-v7             androidx.recycler:recyclerview


Bagaimana Migrasi ke AndroidX ?

Step 1: Update Project Androidnya ke Support Library versi 28

Sebelum melakukan proses migrasi, ada prasyarat yang harus dilewati diantaranya kita perlu mengupdate project Android kita menggunakan versi final support library: versi 28.0.0. Ini karena artefak AndroidX versi 1.0.0 adalah biner yang setara dengan artefak Support Library 28.0.0. Selanjutnya upgrade Android Studio ke versi 3.2 atau ke atas, agar kita bisa me-refactor project kita ke AndroidX.

Step 2: Enable Jetifier

Jetifier ini membantu dalam memigrasikan third-party dependencies ke AndroidX. Jetifier mengubah byte code pada dependencies tersebut untuk menjadikannya kompatibel dengan project yang menggunakan AndroidX. Bagaimanapun, Jetifier ini tidak kemudian mengubah source code atau memigrasikan kode yang digenerate. Untuk enable Jetifier tersebut, tambahkan parameter berikut pada file gradle.properties :

Step 3: Update Dependencies

Sebelum memulai migrasi, pastikan seluruh third-party libraries --seperti Glide, SqlDelight, dan Butterknife-- yang digunakan pada project Android kita untuk diupdate ke versi library-nya yang paling baru. Jika tidak demikian maka akan ada potensi terjadinya unexplained error selama proses kompilasi. Kemudian jika pada project Android kita menggunakan code generation library, Jetifier tidak turut memodifikasi ini. Jadi kita perlu mengeceknya sendiri apakah code generation library tersebut kompatibel dengan AndroidX atau tidak. Jika memutuskan untuk melewatkan step 2 dan 3, berikut beberapa error yang mungkin akan kita jumpai :

 Kode third-party yang digunakan tidak kompatibel dengan AndroidX. Berikut pesan yang akan dimunculkan.

 Jika kita migrasikan project Android kita secara parsial, kita mungkin akan menjumpai error semacam duplicate class yang mengindikasikan bahwa error tersebut terjadi karena memproses kode yang sama baik pada Support Library maupun pada AndroidX. Berikut pesan yang akan dimunculkan.


Step 4: Update Source Code Project Android

Untuk update source code ke AndroidX, kita bisa menggunakan 3 pilihan, yaitu:

 Android Studio

 Update manual

 Bash script

Bila kita sudah mengupgrade Android Studio kita ke versi 3.2 ke atas, kita dapat mengupdate source code kita menggunakan opsi Migrate to AndroidX pada menu Refactor. Cara ini sangat direkomendasikan mengingat Android Studio lah yang nantinya akan menginspeksi satu persatu source code kita dan akan melakukan keputusan atau pilihan yang tepat selama proses refactor.

Jika kita tidak menggunakan Android Studio dikarenakan aplikasi kita yang kompleks, maka kita bisa menjalankannya dengan bash script melalui perintah find dan replace dengan terlebih dahulu menyiapkan file csv yang berisi class mapping. Script ini harus mengexplore seluruh instance source code dari class-class android.support dan kemudian me-replace dengan yang setara di AndroidX, silahkan akses link Developer Google berikut sebagai referensi: class mapping. Bagaimanapun dikarenakan proses ini termasuk brute force pada proses migrasi, pendekatan ini bisa menimbulkan ketidak sempurnaan selama proses migrasi ke AndroidX. Sebagai tambahan, kita masih bisa melakukannya pula melalui proses update secara manual. Jika memilih proses ini, harap diperhatikan agar melihat pada referensi Google Developer terkait Artifact Mapping pada link berikut: artifact mapping yang mana akan menjabarkan package-package Support Library yang ekuivalen dengan AndroidX. Demikian akhir dari posting ini, setelah seluruh proses selesai maka project kita sudah meng-compile dan menggunakan AndroidX.