Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Taming a Large Android Project

Taming a Large Android Project

Dicoding Indonesia

March 18, 2023
Tweet

More Decks by Dicoding Indonesia

Other Decks in Programming

Transcript

  1. Halo! Esa adalah seorang software engineer yang fokus utamanya adalah

    pengemabangan aplikasi Android dan memiliki pengalaman lebih dari 10 tahun di bidang tersebut. Saat ini, ia bekerja di Gojek pada tim Developer Experience, mengurus proses development dan memastikan para developer memiliki pengalaman yang menyenangkan saat mengembangkan aplikasi.
  2. Agenda • Projek Android yang besar? • Kenapa hal ini

    penting? • Mempersingkat waktu development • Pemeliharaan dan pembenahan • Selanjutnya apa?
  3. Proyek Android yang besar? • ~2,5 juta baris kode •

    ~1.7 juta diantaranya adalah Kotlin • Belum termasuk generated code, scripts, dan juga build system • 300+ modul • 700+ dependencies pada compile classpath
  4. Proyek Android yang besar? • ~2,5 juta baris kode •

    ~1.7 juta diantaranya adalah Kotlin • Belum termasuk generated code, scripts, dan juga build system • 300+ modul • 700+ dependencies pada compile classpath • Build time median ~30s • Build time p95 ~6m
  5. Kenapa hal ini penting? • Menambah produktifitas developer • Mengurangi

    biaya development dan maintenance • Proses development yang lambat adalah tech debt dengan ROI (return of investment) yang instan
  6. Kenapa hal ini penting? • Menambah produktifitas developer • Mengurangi

    biaya development dan maintenance • Proses development yang lambat adalah tech debt dengan ROI (return of investment) yang instan
  7. Gradle Refresher • Initialization time: Evaluasi pada settings.gradle • Configuration

    time: Evaluasi pada build.gradle pada setiap modul. Konfigurasi dan task graph dibuat • Execution time: Eksekusi tasks yang ingin dijalak
  8. Tips Performa pada Software • Jangan dilakukan • Lakukan nanti/lain

    waktu • Lakukan lebih cepat (mengacu pada O notation)
  9. Build Configuration • Aktifkan fitur build cache pada Gradle •

    Non-aktifkan build features Android secara default • Migrasi ke non-transitive R org.gradle.caching=true android.defaults.buildfeatures.buildconfig=false android.defaults.buildfeatures.resvalues=false android.defaults.buildfeatures.aidl=false … android.nonTransitiveRClass=true
  10. Build Configuration (cont’d) • Update tooling (AGP, KGP, Gradle) •

    Non-aktifkan jetifier ◦ checkJetifier pada AGP versi baru ◦ android.enableJetifier=false
  11. Mencari Setelan Konfigurasi Memori • Menghindari waktu GC yang berlebih

    • Kotlin dan Gradle dapat memiliki konfigurasi yang berbeda org.gradle.jvmargs=-Xmx6g -XX:MaxMetaspaceSize=1g kotlin.daemon.jvmargs=-Xmx3g
  12. Prebuilt Artifact • Menggunakan kode yang sudah dikompilasi sebelumya dalam

    bentuk artifact (AAR/JAR) untuk mempersingkat waktu iterasi • Mengurangi configuration dan execution time • Meningkatkan performa IDE • Menggunakan properties file untuk konfigurasi
  13. Selective Run • Menjalankan eksekusi seperlunya pada modul yang berubah

    dan atau berhubungan • Mengurangi waktu eksekusi pada CI pipeline, contohnya pada test & lint
  14. Plugins! • Android cache fix plugin: mengatasi masalah seputar cache

    tanpa harus menunggu versi baru dari AGP • Gradle test retry plugin: mengatasi flaky test dengan mengulang test yang bermasalah • Affected module detector plugin: eksekusi task pada modul yang berubah dan berhubungan dengan itu • Gradle doctor plugin: mendiagnosa konfigurasi build
  15. Gradle Enterprise • Melihat tren waktu kompilasi • Identifikasi masalah

    pada kompilasi • Identifikasi kompilasi lambat
  16. Codebase Analysis Pipeline • Menghitung besar modul • Menghitung besar

    dead code pada modul • Menganalisa dependencies dan plugin yang tidak terpakai • Menganalisa modul yang bisa disederhanakan (pure JVM) • Scoring sistem untuk module https://github.com/autonomousapps/dependency-analysis-android-gradle-plugin
  17. Rangkuman • Mempersingkat waktu development mempunyai ROI yang instan dengan

    dampak di berbagai area • Sama seperti software lainnya, devtools juga memerlukan optimasi dan arsitektur yang tepat untuk dapat scale up • Automasi dapat mempermudah pemeliharaan dan pembenahan projek • Hindari optimasi prematur. YMMV