Selamat pagi Kami mulai Senin dengan materi, terjemahan yang disiapkan khusus untuk siswa kursus 
"Android-developer. Kursus Lanjutan . 
"
Baru-baru ini saya memigrasi basis kode Android ke 
Kure di AndroidX. Tampak bagi saya bahwa ini adalah kesempatan besar untuk bekerja pada kecepatan perakitan proyek. Gradle selalu memiliki reputasi buruk karena kelambatan dan konsumsi sumber daya, tetapi saya sangat terkejut bahwa perubahan kecil pada konfigurasi perakitan dapat meningkatkan kecepatannya secara signifikan.
Lihatlah metrik pemindaian perakitan sebelum / setelah optimisasi
 sebelum optimasi
sebelum optimasi setelah optimasi ️️
setelah optimasi ️️Menurun dari 5,5 menit menjadi 
17 detik ?? Gila!Tidak terlalu sulit untuk melakukan optimasi secara berlebihan untuk mengurangi waktu perakitan. Tetapi untuk membuat pos tersebut dapat dipahami oleh para pemula, saya akan dengan sengaja fokus pada langkah-langkah kecil dan tidak menyakitkan yang telah saya ambil untuk lebih dekat dengan indikator ini.
Pertama-tama!
Sebelum Anda memulai optimasi, penting untuk menguji proyek kami untuk mengetahui berapa lama waktu yang dibutuhkan untuk membangunnya. Gradle memiliki opsi pemindaian yang mudah digunakan yang dapat Anda gunakan untuk menganalisis kinerja tugas Anda. Buka terminal di Android Studio dan jalankan perintah berikut:
./gradlew assembleDebug --scan 
Setelah berhasil menyelesaikan perakitan, Anda akan diminta untuk menerima persyaratan layanan untuk mengunduh hasil pemindaian. Masukkan 
ya untuk melanjutkan. Setelah publikasi selesai, Anda akan menerima tautan ke terminal untuk memeriksa pemindaian. Buka itu.
Ada beberapa opsi di situs ini, tetapi untuk singkatnya kami hanya akan mempertimbangkan apa yang paling penting.Ringkasan menampilkan informasi ringkasan tentang tugas yang diselesaikan dan waktu penyelesaiannya. Tetapi yang menarik bagi kami di sini adalah bagian 
Kinerja . Itu rincian lebih rinci dari total waktu membangun, seperti yang ditunjukkan di bawah ini.

Di bagian Kinerja, ada tab 
Pengaturan dan saran yang memberikan rekomendasi untuk meningkatkan kecepatan build. Mari lihat mereka.

Di bagian ini, kita dapat menemukan beberapa perbaikan sederhana untuk meningkatkan kecepatan. Jadi, mari kita lanjutkan dan terapkan koreksi ini di proyek kami.
Langkah # 1: Tingkatkan Alat
Tim Android terus meningkatkan dan mengembangkan sistem pembangunan. Dengan demikian, dalam kebanyakan kasus, Anda bisa mendapatkan peningkatan yang signifikan dengan hanya menginstal versi terbaru dari toolkit ini.
Selama refactoring ini, proyek kami berada pada 
versi 3.2.1 dari plugin Gradle untuk Android Studio ( 
beberapa versi lebih tua dari rilis terakhir ).
Anda dapat mengikuti 
tautan ini untuk mendapatkan versi terbaru dari Plugin Gradle. Pada saat penulisan ini, yang terbaru adalah 
versi 3.4.0.Tapi ada tangkapan di sini yang harus kita ingat:
 ( Catatan: Saat menggunakan Gradle versi 5.0 atau lebih tinggi, ukuran default daemon Gradle berkurang dari 1 GB menjadi 512 MB. Ini dapat menyebabkan kinerja pembangunan yang buruk. Untuk mengganti pengaturan default ini, tentukan ukuran memori untuk daemon Gradle di gradle.properties proyek Anda.)https://developer.android.com/studio/releases/gradle-pluginSaat menggunakan Gradle 5.0 dan di atasnya, kita perlu meningkatkan ukuran memori secara eksplisit agar kecepatan build kita tidak memburuk. Kami akan kembali ke sini sebentar lagi.
( Catatan: Saat menggunakan Gradle versi 5.0 atau lebih tinggi, ukuran default daemon Gradle berkurang dari 1 GB menjadi 512 MB. Ini dapat menyebabkan kinerja pembangunan yang buruk. Untuk mengganti pengaturan default ini, tentukan ukuran memori untuk daemon Gradle di gradle.properties proyek Anda.)https://developer.android.com/studio/releases/gradle-pluginSaat menggunakan Gradle 5.0 dan di atasnya, kita perlu meningkatkan ukuran memori secara eksplisit agar kecepatan build kita tidak memburuk. Kami akan kembali ke sini sebentar lagi.Buka file 
build.gradle tingkat 
atas , yang akan Anda temukan di root proyek Anda, dan tambahkan baris berikut ke 
bagian dependensi :
classpath 'com.android.tools.build:gradle:3.4.0'Anda juga perlu memperbarui 
URL distribusi di file properti Gradle Wrapper yang terletak di 
gradle/wrapper/gradle-wrapper.properties . Perbarui URL sebagai berikut.
( 
Tautan ini akan tersedia di halaman plugin Android Gradle . )
distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zipAnda akan menemukan kesalahan saat menggunakan Kotlin jika versi plugin Kotlin Gradle kurang dari 
1.3.0. Jika demikian, gunakan tooltip IDE untuk memperbarui plugin Gradle untuk Kotlin ke versi terbaru (pada saat penulisan ini, ini adalah 
versi 1.3.31 ).
Ok, mari kita jalankan build lagi dari terminal untuk melihat apakah kita telah melakukan perbaikan.

Langkah # 2: Perbarui Konfigurasi
Jadi, kami dapat memotong sekitar 2,5 menit dari waktu pembuatan, tetapi ini masih belum cukup baik. Setelah mempelajari build log di terminal, saya menemukan satu baris yang menarik bagi kami:
 (> Tugas: aplikasi: compileDevelopDebugJavawithJavac
(> Tugas: aplikasi: compileDevelopDebugJavawithJavac 
Gradle dapat menonaktifkan kompilasi inkremental karena prosesor anotasi berikut tidak inkremental: butterknife-compiler-10.1.0.jar (com.jakewharton: butterknife-compiler: 10.1.0), dagger-compiler-2.9.jar (com.google. belati: belati-kompiler: 2.9). 
Pertimbangkan untuk menyetel flag android.enableSeparateAnnotationProcessing-true eksperimental dalam file gradle.properties untuk memulai pemrosesan anotasi dalam tugas yang terpisah dan melakukan kompilasi tambahan.)Kompilasi tambahan pada dasarnya mencegah kompilasi boros dari seluruh set file sumber dan sebaliknya hanya mengkompilasi file-file yang telah dimodifikasi. Dari log jelas bahwa kita tidak menggunakan fungsi ini. Dia menyarankan agar kita menggunakan 
android.enableSeparateAnnotationProcessing=true , tetapi, dalam hal apa pun, kita tidak boleh menggunakan konfigurasi 
“annotationProcessor” karena Kotlin digunakan dalam proyek kami.
Untungnya, 
versi 1.3.30 Kotlin menambahkan dukungan untuk pemrosesan anotasi langkah-demi-langkah.
 https://kotlinlang.org/docs/reference/kapt.html
https://kotlinlang.org/docs/reference/kapt.html(Pemrosesan anotasi tambahan (mulai 1.3.30)
Dimulai dengan versi 1.3.30, 
kapt mendukung pemrosesan anotasi tambahan sebagai fungsi eksperimental. Saat ini, pemrosesan anotasi dapat dilakukan secara bertahap hanya jika semua prosesor anotasi yang digunakan bersifat inkremental.
Untuk mengaktifkan pemrosesan anotasi tambahan, tambahkan baris ini ke file 
gradle.properties :
kapt.incremental.apt=truePerhatikan bahwa pemrosesan anotasi tambahan mengharuskan 
kompilasi tambahan juga diaktifkan.)
Jadi, mari kita mulai:
- 1. Ubah konfigurasi AnnotationProcessor ke kapt
- 2. Aktifkan flag pemrosesan anotasi inkremental eksperimental
Buka file 
build.gradle modul Anda dan tambahkan baris berikut ke bagian atas file:
apply plugin: 'kotlin-kapt'Kemudian, ubah semua konfigurasi anotasiProcessor di bagian dependensi untuk menggunakan kapt. Sebagai contoh:
//
annotationProcessor 'com.google.dagger:dagger-compiler:2.9'
//
kapt 'com.google.dagger:dagger-compiler:2.9'Sekarang buka file 
gradle.properties yang terletak di root proyek Anda dan tambahkan baris berikut:
kapt.incremental.apt=trueMari kita jalankan build lagi.

Yah, sepertinya kami telah membuat beberapa kemajuan.
Langkah # 3: Gradle Properties
Kami berada pada tahap terakhir. Ingat trik yang kami temui saat memperbarui versi plugin Gradle? Ternyata versi Gradle yang lebih baru mengurangi ukuran memori yang digunakan menjadi 512 MB. Ini untuk memastikan bahwa mesin yang lemah tidak mengkonsumsi terlalu banyak memori. Saya memiliki komputer dengan 16 gigabytes RAM, jadi saya dapat memberi makan sekitar 2-3 gigs ke daemon Gradle, tetapi angka Anda dapat bervariasi.
Buka file 
gradle.properties yang terletak di root proyek Anda dan tambahkan baris berikut. Pastikan untuk memilih ukuran yang sesuai dengan kebutuhan dan spesifikasi komputer Anda.
org.gradle.jvmargs=-Xmx3072m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8Sementara kita melakukan ini, mari kita juga mengaktifkan majelis paralel dan penyetelan sesuai permintaan di properti.
Ini adalah versi final file 
gradle.properties :
 org.gradle.jvmargs=-Xmx3072m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 org.gradle.parallel=true org.gradle.configureondemand=true kapt.incremental.apt=true 
- org.gradle.parallel- flag ini memungkinkan Gradle untuk merakit modul dalam suatu proyek secara paralel, bukan secara berurutan. Ini hanya berguna untuk proyek multi-modul.
- org.gradle.configureondemand- flag ini hanya mengonfigurasi modul-modul yang diperlukan untuk proyek, dan tidak mengumpulkan semuanya.
Setelah melakukan ini, mari kita lihat apa yang sekarang kita miliki indikator kecepatan perakitan:


Itu dia!
Pengamatan penutup
Ini tidak berarti cakupan yang luas dari semua cara untuk mengoptimalkan kecepatan perakitan. Ada banyak hal lain yang belum saya bahas dalam posting ini, seperti menggunakan minSdk 21 saat menggunakan MultiDex, pustaka pra-pengindeksan, menonaktifkan kompresi PNG, dll., Hanyalah beberapa di antaranya.
Tetapi sebagian besar konfigurasi ini membutuhkan pemahaman yang lebih dalam tentang sistem build Android dan pengalaman bekerja dengan proyek multi-modul besar (di mana manfaatnya paling jelas). Langkah-langkah yang saya sebutkan di atas mudah diterapkan bahkan oleh pengembang junior dan memiliki manfaat yang signifikan. Saya harap ini membantu Anda meningkatkan kecepatan build!
Sampai jumpa lagi, damai sejahtera untukmu!