Android Road Map Part 1

Mungkin dari teman-teman masih bingung apa saja yang diperlukan untuk memulai perjalanan menjadi Android Developer. Sayangnya perjalanan itu sangat jauh, perlu bekal seperti latihan dan proses yang panjang. Namun, sebelum Anda memulai perjalan itu Anda harus tahu tujuan, kenapa memilih mengikuti perjalanan ini? Kalau Anda sedang mencari kerja atau belajar silakan ikuti. Tapi Anda harus ingat dalam setiap perjalanan bahwa setiap langkah atau proses memerlukan konsistensi. Apabila Anda enggan melakukannya jangan harap bisa memperoleh hasilnya yang maksimal. Saya akan membuat tahapan belajar Android development, ini opini saya pribadi, referensi dari pengembangan Ios, dan inspirasi saya dari Mindork. Karena tulisan ini begitu panjang, tentu saya akan pisah menjadi dua tulisan. Perlu diperhatikan bahwa yang saya tuliskan diini berdasarkan pengalaman saya, dan beberapa referensi tulisan yang ada.

Tulisan ini akan terus diperbaiki dan ditambahkan berdasarkan teknologi yang berkembang saat ini.

Perjalanan ini ditujukan bagi:

  • Android Developer yang menjadi lebih ahli dan berkembang
  • Android Developer yang menyiapkan interview dan pengetahuan tambahan

Syarat utama:

  • Jangan mudah putus asa.
  • Berani mengambil resiko dan bersiap untuk gagal.
  • Mampu berbahasa Inggris.

Problem Solving

Coba perhatikan data berikut yang saya ambil dari laman Hackerrank. Nah berdasarkan data diatas jelas Problem solving merupakan prioritas utama untuk suatu pekerjaan terkhusus pekerjaan yang berkaitan dengan Pemrograman. Selama Anda memegang Problem solving dengan baik Anda mampu untuk menyelesaikan masalah secara efektif dan efisien. Meski semua orang akan memperoleh problem solving yang berbeda-beda tapi indikator problem solving tetap berdasarkan pada asas efektif dan efisien.

Kuasai Bahasa pemrograman terlebih dahulu

Paradigma merupakan kunci untuk mengusai alur bahasa yang digunakan. Selain OOP, ada juga yang terus berkembang dan mulai banyak digunakan yakni paradigma functional programming dan reactive programming. Ketika Anda sudah mengusai paradigma dengan baik maka selama bahasa pemrograman yang Anda gunakan berganti-ganti Anda tidak akan kesulitan untuk mengimplementasikanya. Berbedaan diantara bahasa pemrograman yang ada terletak pada keyword, API, sintaksis, Flow, dan compiler. Anda bisa belajar bahasa dengan mudah di tutorial point. Banyak bahasa tersedia disana dan dapat diakses secara gratis baik online maupun offline bisa juga di Kotlin, Kotlin Blog, atau Kotlin indonesia. Bagi yang mau referensi bisa nge-blog di Dzone, Baeldung, Kotlin AntonioLeiva khusus bahasa indonesia di Codepolitan. Bagi yang memerlukan pdf bisa mampir di GoalKicker, Packtpub.

Kenali Kotlin

Kotlin sendiri menjadi bahasa resmi Android pada Google I/O tahun 2017 kemarin. Karena kenyamanan fitur-fitur yang diberikan oleh kotlin, maka banyak developer mulai migrasi dari Java ke Kotlin, sehingga perkembangan dari segi projek Android, Kotlin semakin meningkat pesat.

Kenali Android Studio IDE

Kenali Version Control GIT

Kenali Komponen Utama Pengembangan Android

  • Memahami dan mengetahui Fragment, khususnya Fragment Lifecycle fragment. Meski sama dengan Activity namun fragment ini lebih dinamis dibandingkan dengan Activity. Banyak yang bertanya pada saya perbedaan Fragment dengan Activity. Sederhananya Fragment itu adalah ruang, sedangkan Activity adalah rumahnya. Jadi dalam rumah itu bisa ada banyak ruang, bisa Anda perbesar, ganti, atau bahkan hilangkan ruangan dari dalam rumah. Artinya fragment tidak dapat ditampilkan tanpa adanya Activity, Fragment bersifat dinamis, bisa diperbesar diperbanyak asal resource mencukupi ataupun diganti dengan fragment lain. Namun Fragment ini terkadang lebih susah mengimplementasikannya dan mengatur urutan/stack. Oleh karena itu Google merilis library khusus yakni Navigation library yang merupakan salah satu dari komponen Android Jetpack.
  • Debugging, Debugging ini yang paling krusial, kadang banyak yang bertanya soal masalah debugging, contoh paling banyak adalah kenapa tidak menampilkan sesuatu. Debugging bisa dilakukan dengan menelusuri kode yang dieksekusi bisa dari Method atapun class, apabila debugging diandroid, Anda biasanya akan berurusan dengan debugging lifecycle. Debugging bisa dilakukan dengan membuat perintah Log.e(" track isi data adalah ${}"),Buatlah Log tersebut dengan memperhatikan eksekusi Kode, kode dieksekusi secara interpreter sehingga dibaca dari atas kebawah. Anda bisa saja men-debug menggunakan Timber. Konsep timber kurang lebih sama, namun lebih efektif karena tidak perlu mendefinisikan nama log. Debugging bisa dicek pada logcat pada Android Studio bila sembari menjalankan Aplikas sedangkan apabila debugging pada generate misal generate module Anda bisa mengecek pada Build gradle. Debugging juga bisa dilakukan menggunakan library pihak ketiga seperti Stetho.
  • Context, Anda setidaknya mengetahui apa itu context pada Android, baik context Android activity maupun context application. Context berguna untuk mengambil segala resource yang ada pada Lingkungan Android. Context juga wajib dikelola, apabila Anda tidak mengelola Context dengan baik maka aplikasi Anda akan bermasalah seperti out of memory dll. Anda juga harus mampu membedakan level context, kesalaha penggunaan level context dapat mengakibatkan force close, seperti penggunaan application context dalam setiap Activity, nah application context sangatlah mahal, dan jangan sering-sering digunakan, gunakan hanya waktu pembuatan database atau komputasi utama yang melibatkan resource aplikasi secara keseluruhan, ada baiknya Anda membaca ini, atau ini.
  • Configuration Change, terkadang komponen ini tidak selalu diperhatikan dan selalu di matikan. apa itu configuration change? secara sederhananya perubahan konfigurasi saat Android dijalankan seperti perubahan rotasi layar. Nah, perubahan rotasi layar ini biasanya dimatikan oleh para pengembang Android, kenapa? karena saat layar berotasi baik desain mapun data juga akan berubah, Android akan berada pada state onCreate lagi, jadi tahapan saat layar berotasi pada lifecycle adalah onPause -> onSaveStateInstance -> onStop -> onDestroy -> onCreate -> onStart -> onResume. Desain juga berubah yang tadinya ditampilkan secara protrait lalu landscape, perilaku ini mirip responsive desain pada web, apabila tidak responsive maka hasil tampilan akan berantakan. Data juga akan berubah, sebaiknya apabila data terakhir mau ditampilkan kembali saat rotasi berlangsung bisa disimpan terlebih dahulu pada onSaveStateInstance().
  • Database Sqlite dan SharedPreferences, Apabila membutuhkan penyimpanan dalam Android Anda dapat menggunakan Database Sqlite. Database Sqlite menyimpan data secara ERD dan kompleks sedangkan SharedPreferences merupakan data yang hanya mampu menyimpan satu jenis tipe data saja seperti String, tipe data primitif(int, short, long, byte, boolean, float, double ). Apabila Anda membutuhkan penyimpanan yang kompleks seperti sistem informasi maka Sqlite menjadi solusinya sedangkan untuk penyimpanan yang sederhana bisa menggunakan SharedPreferences seperti penyimpanan Cookies, Password, username, dll, tentunya sebelum menyimpan pastikan dienkripsi terlebih dahulu. Pengembangan Android tidak hanya terpatok pada Sqlite saja ada beberapa database yang dapat digunakan selain Sqlite, seperti Realm, Object Box, Room. dll. Apabila ingin tetap Sqlite dan mendukung ORM silakan coba GreenDao, DBFlow, ORMlite, dan SugarORM.
  • Rest dan HTTP, Nah untuk pertukaran data ke Web diperlukan alat pendukung. secara konvensional tanpa library pun dapat dilakukan dengan memparsing json secara manual, namun tindakan ini sudah ditinggalkan karena membuat boilerplate atau kode makin banyak. Ada library khusus yang mampu menangani pertukaran data tersebut, yang paling terkenal adalah Retrofit dan Fast Android Networking (FAN). Sedangkan yang lain seperti Volley, okHttp juga masih dapat digunakan.
  • Thread, siapapun yang pernah mengembangankan aplikasi secara paralel dengan java pasti sudah mengenal Thread. Thread digunakan untuk mengelola proses, bisa digunakan secara paralel ataupun seri, asynchronous, ataupun synchronous. Kenapa Perlu ada thread? secara sederhana Thread dapat mempercepat banyak pekerjaan dalam satu waktu secara bersamaan, mirip model pipelining, multitask, dll. Namun, Anda harus benar-benar mengalokasikan thread dengan tepat, kesalahan pengelolaan bisa mengakibatkan out of memory. Khusus Android Thread utama untuk mengelola tampilan atau disebut MainThread. Thread ini sebaiknya tidak diusik oleh thread lain. seperti pemanggilan API, pemrosesan yang membutuhkan waktu lama, dll.
  • Service dan IntentService, Coba kenali Service dan intentService untuk membuat proses yang berjalan dilatar belakang/background process. contoh kasus adalah pembuatan alarm, music, network transaction, interaction content provider, dll. background service ini tidak memerlukan tampilan yang patut diperhatikan adalah reseouce yang digunakan untuk menjalankan dibelakang, usahakn untuk menggunakan resouce yang efektif dan mengoptimasi komputasi proses karena ini akan mempengaruhi kinerja baterai.
  • Kenali library-library pihak ketiga untuk mempercepat pengembangan Androidmu. Apabila ingin membuat library sendiri, usahakan untuk meriset dan memiliki perbedaan yang cukup signifikan. Jangan membuat library yang sudah ada, karena hanya membuang waktu Anda, kecuali Anda ingin meriset dan tentunya ada keunikan tersendiri.

Improve performa Android

  • Menggunakan Caching
  • Mendeteksi kebocoran memory, Anda bisa menggunakan Leak Canary untuk mendeteksi kelas atau fungsi mana yang mengonsumsi banyak resource atau RAM sehingga mengakibatkan Out Of Memory(OOM).
  • Mengelola penggunaan baterai.
  • Mengelola seberapa lama aplikasi dibuka.
  • Mengurangi ukuran aplikasi supaya lebih efektif dan efisien. Anda dapat menggunakan Native code dan App Bundle.
  • Mengelola alokasi ukuran bitmap/image pada Android supaya tidak terlalu besar. Hal ini dapat mempengaruhi proses dan menimbulkan OOM. Biasanya dengan menggunakan library pihak ketiga seperti Glide, Picasso, dll dapat mengatasi hal tersebut. Namun tetap saja apabila kita memuat image data dari asset dengan ukuran yang belum dioptimasi akan menimbulkan masalah yang sama. Anda bisa saja mengkonversi Bitmap/image tersebut kedalam WebP supaya ukuran menjadi lebih kecil supaya ukuran image pada asset tidak terlalu besar.

Kenali Android Architecture Component

​ Di tahun 2018 AAC menjadi salah satu komponen Android Jetpack. Android Jetpack kaya akan library-library yang menunjang pengembangan Android. Bila Anda sudah selesai dalam pengenalan AAC Anda bisa mempelajari Android Jetpack secara keberlanjutan dikarenakan Android Jetpack sendiri memiliki banyak fitur-fitur, Anda harus benar-benar fokus untuk mempelajari beberapa fitur tersebut.

Membuat Test Android

Manual Testing

Contoh, jika Anda membuat aplikasi kalkulator, Anda diharuskan untuk memverifikasi hasil pengurangan apakah sudah sesuai atau belum. Karena tidak melibatkan tampilan otomati pengujian melalui unit testing tidak memerlukan emulator atau perangkat sungguhan. Berbeda dengan pengujian instrumen Android, Anda harus memvalidasi setiap alur interaksi/aktivitas user saat melakukan sesuatu dan memperoleh hasilnya hal ini melibatkan tampilan, sebagai contoh adalah menguji aplikasi berita, alur pertama user melihat pertama kali tampilan cardview, nah apakah cardview ini tertampil atau tidak, selanjutnya ada tampilan recyclerview, apakah recyclerview sudah sesuai tampilanny dan memiliki jumlah list yang sesuai pula.

Manual testing diatas dapat ditangani dengan memanfaatkan library yang tersedia, sebagai contoh untuk Unit Testing Anda dapat melakukannya dengan menggunakan JUnit, dan Mockito. Sedangkan pengujian Instrument Android dapat menggunakan Esspresso Android testing.

Automatic Testing

Anda juga dapat mengkustomasi instrument apa yang akan diuji, misal Anda sudah membuat file instrumen dari Android studio kemudian unggah file tersebut beserta aplikasinya. Perlu diketahui bahwa Automatic testing ini diperlukan biaya untuk menggunakannya, meski ada yang bersifat gratis namun hanya bersifat trial, diukur seberapa perangkat yang diuji dalam satu hari atau batas maksimal jumlah Android yang diemulasi. Anda bisa menggunakan automatic testing di Android Device Farm milik AWS, Testlab milik Google Firebase, dan Bitbar.

Mempelajari RxJava

Tentu yang paling mengesankan mengenai RxJava adalah kaya dengan operator untuk mengatur observable. Observable itu mirip kumpulan operan yang mengalir untuk dikelola atau diatur lebih lanjut hasil keluaran diatur oleh subscriber dan dikonsumsi oleh observer. Nah untuk lebih jelasnya soal observable dan subscriber Anda harus mengunjungi laman ini.

Android Developer and Learner.

Android Developer and Learner.