Memecahkan masalah performa build dengan Build Analyzer

Anda dapat menggunakan Build Analyzer untuk memeriksa performa build project Anda. Performa build mungkin dipengaruhi oleh beberapa faktor yang dapat berubah di antara build. Untuk setiap build yang Anda jalankan, Build Analyzer mencoba menyajikan informasi terpenting sehingga Anda dapat dengan cepat mengidentifikasi dan mengatasi regresi dalam performa build.

Halaman ini menyediakan ringkasan Build Analyzer dan beberapa panduan cara menggunakan alat ini untuk meningkatkan performa build project Anda. Untuk strategi tambahan dalam meningkatkan performa build, baca Mengoptimalkan kecepatan build.

Data yang disajikan analyzer berubah berdasarkan setiap build. Khususnya dengan build yang besar dan kompleks, banyak faktor dapat berubah antar-build, sehingga mengubah data yang ditampilkan analyzer kepada Anda sebagai faktor penting dalam durasi build. Jadi, sebaiknya build project beberapa kali dan bandingkan data dalam analyzer untuk mengidentifikasi pola.

Memulai

Setiap kali Anda mem-build aplikasi, Build Analyzer akan membuat laporan dan menampilkan data dari laporan terbaru di jendela Build.

Untuk memulai, ikuti langkah berikut:

  1. Jika Anda belum melakukannya, build aplikasi dengan salah satu cara berikut:
    • Klik Build > Make Project dari panel menu.
    • Untuk mem-build Android App Bundle atau APK, klik Build > Build Bundle(s) / APK(s) > Build Bundle(s) atau Build > Build Bundle(s) / APK > Build APK(s) dari panel menu.
  2. Untuk membuka jendela Build, pilih View > Tool Windows > Build dari panel menu.
  3. Untuk melihat laporan build di Build Analyzer, klik tab Build Analyzer di jendela Build.

Melihat plugin dengan tugas yang menentukan durasi build

Saat Anda pertama kali membuka Build Analyzer setelah menyelesaikan build, jendela akan menampilkan ringkasan analisis build, seperti yang ditunjukkan pada gambar 1.

Gambar 1. Halaman ringkasan Build Analyzer memberikan ringkasan temuan.

Untuk melihat pengelompokkan plugin dengan tugas yang menentukan durasi build, klik Plugin dengan tugas yang memengaruhi durasi build di halaman ringkasan. Anda juga dapat memilih Tasks dari dropdown dan mengonfirmasi bahwa Group by plugin dipilih.

Gambar 2. Build Analyzer menyediakan pengelompokan plugin yang paling andal terhadap durasi build.

Panel tugas menampilkan tugas yang berkontribusi pada durasi build. Setiap tugas yang mengalami masalah akan menampilkan ikon peringatan di sampingnya.

Grafik ini menunjukkan seberapa besar kontribusi tugas terhadap keseluruhan durasi build.

Panel detail menampilkan informasi selengkapnya tentang masalah yang terdeteksi untuk tugas yang dipilih.

Setiap node menampilkan total waktu yang dibutuhkan untuk menjalankan turunan langsung dari node. Durasi ini dapat membantu Anda fokus pada pemeriksaan tugas yang paling berpengaruh terhadap durasi build.

Melihat tugas yang menentukan durasi build

Untuk melihat pengelompokkan tugas yang berkontribusi pada durasi build, klik Tasks impacting build duration di halaman ringkasan. Anda juga dapat memilih Tasks dari dropdown dan mengonfirmasi bahwa Group by plugin tidak dipilih.

Gambar 3. Build Analyzer menyediakan pengelompokan tugas yang paling andal terhadap durasi build.

Gradle menentukan eksekusi tugas dengan interdependensi tugas, struktur project, dan beban CPU, serta menjalankan tugas secara berurutan atau paralel. Untuk build tertentu, Build Analyzer menandai kumpulan tugas yang dijalankan secara berurutan yang menentukan durasi build saat ini. Mengatasi inefisiensi pada tugas yang ditandai ini merupakan langkah awal paling baik untuk mengurangi waktu build secara keseluruhan.

Anda mungkin melihat kumpulan tugas yang berbeda yang menentukan durasi build dengan setiap build yang Anda eksekusi. Misalnya, jika Anda membuat perubahan pada konfigurasi build, jalankan build dengan kumpulan tugas yang berbeda—seperti build inkremental—atau jalankan build dalam batasan yang berbeda, jendela Build Speed mungkin akan menandai kumpulan tugas berbeda yang paling memengaruhi durasi build. Karena variabilitas ini, sebaiknya gunakan jendela Build Speed di beberapa build untuk mengurangi durasi build secara konsisten.

Setiap tugas yang tercantum diberi kode warna sebagai berikut:

  • Biru muda: Tugas termasuk dalam plugin Android Gradle, plugin Java Gradle, atau plugin Kotlin Gradle.
  • Biru: Tugas ini adalah milik plugin pihak ketiga atau kustom, seperti plugin yang Anda terapkan setelah membuat project baru menggunakan Android Studio.
  • Ungu: Tugas tidak termasuk dalam plugin, tetapi digunakan untuk mengubah properti project secara dinamis pada runtime. Misalnya, tugas yang mungkin Anda tentukan dalam file build.gradle.
  • Abu-abu: Bergantung pada tugas lain yang ditandai oleh analyzer, tugas ini tidak begitu memengaruhi durasi build.

Anda dapat mengklik setiap tugas turunan untuk mempelajari eksekusinya lebih lanjut. Misalnya, analyzer memberikan detail tambahan seperti plugin induk, jenis tugas, tugas lain yang menyebabkan tugas ini berjalan, dan apakah tugas dijalankan secara inkremental, seperti yang ditunjukkan pada gambar 2. Analyzer juga akan menampilkan peringatan yang dapat membantu Anda mengonfigurasi tugas untuk berjalan secara lebih efisien.

Memeriksa peringatan

Jika Build Analyzer mendeteksi bahwa beberapa tugas dapat dikonfigurasi untuk dijalankan secara lebih efisien, fitur ini akan memberikan peringatan.

Misalnya, tugas yang tidak menggunakan Gradle API yang sesuai untuk menentukan input dan outputnya tidak dapat memanfaatkan build inkremental. Jika build Anda menyertakan tugas tersebut, Build Analyzer mungkin menandainya dengan peringatan Always-run, karena harus dijalankan dengan setiap build, terlepas dari berubah atau tidak inputnya.

Untuk melihat semua peringatan yang telah diidentifikasi analyzer pada build Anda, klik All warnings pada halaman ringkasan, atau pilih Warnings dari menu dropdown. Tampilan Peringatan memperlihatkan peringatan yang dikelompokkan menurut kategori. Misalnya, node Always-run mengelompokkan tugas yang menurut analyzer tidak dikonfigurasi dengan benar untuk build inkremental.

Saat Anda mengklik node turunan, analyzer menjelaskan sifat peringatan dan kemungkinan langkah yang dapat Anda ambil untuk menyelesaikan masalah. Selain itu, jika tugas termasuk dalam plugin yang Anda terapkan ke project, analyzer memberikan link Generate report, seperti yang ditunjukkan pada gambar 4.

Gambar 4. Informasi lengkap tentang peringatan Build Analyzer.

Saat Anda mengklik link Generate report, sebuah dialog akan muncul dengan informasi tambahan yang mungkin membantu developer plugin menyelesaikan masalah dalam plugin versi baru. Klik Copy untuk menyimpan teks ke papan klip agar lebih mudah menempelkan informasi ke dalam laporan bug untuk developer plugin.

Jenis peringatan

Build Analyzer melaporkan jenis peringatan berikut:

  • Always run tasks: Tugas yang selalu berjalan akan membuat tugas lain berjalan di setiap build, yang sebenarnya tidak diperlukan. Ada dua alasan utama mengapa Anda melihat peringatan ini:

    • (Lebih umum) Anda tidak mendeklarasikan input dan output tugas dengan benar. Jika demikian, Anda harus mendeklarasikan input dan output tugas Anda dengan benar. Artinya, Anda harus mendeklarasikan input dan output sendiri, atau mengubah versi plugin jika tugas yang memicu peringatan berasal dari plugin pihak ketiga.

    • (Kurang umum) Tugas memiliki upToDateWhen yang disetel ke salah (false), yang seharusnya dihindari. Mungkin ada beberapa logika yang bernilai salah (false) atau upToDateWhen di-hardcode agar menjadi salah (false). Jika ada logika yang bernilai salah (false), hasil ini mungkin disengaja, dan Anda dapat memilih untuk mengabaikan peringatan tersebut. Jika upToDateWhen di-hardcode agar menjadi salah (false), Anda harus menghapus hardcode dari kode Anda.

  • Task setup issues: Peringatan ini dibuat untuk tugas yang mendeklarasikan direktori yang sama sebagai output. Artinya, output tugas tersebut kemungkinan besar tidak dipertahankan di antara build dan tugas tersebut selalu berjalan, meskipun tidak ada perubahan. Untuk mengatasi peringatan ini, Anda harus mendeklarasikan direktori output yang berbeda untuk tugas Anda. Artinya, Anda harus mendeklarasikan sendiri direktori output yang berbeda jika bisa atau mengubah versi plugin jika tugas yang memicu peringatan berasal dari plugin pihak ketiga.

  • Pemroses anotasi non-inkremental: Peringatan ini dibuat ketika pemroses anotasi bersifat non-inkremental dan menyebabkan tugas JavaCompile selalu berjalan secara non-inkremental. Untuk mengatasi peringatan ini, beralihlah ke pemroses anotasi inkremental.

  • Configuration cache: Peringatan ini ditampilkan jika proses cache konfigurasi tidak diaktifkan untuk project Anda. Build Analyzer mempelajari urutan build untuk memeriksa apakah project Anda kompatibel dengan proses cache konfigurasi. Jika pemeriksaan kompatibilitas berhasil, Anda dapat mengaktifkan proses konfigurasi cache dari Build Analyzer.

  • Check Jetifier: Peringatan ini ditampilkan jika tanda enableJetifier ada dan diaktifkan dalam project Anda; yaitu jika Anda memiliki android.enableJetifier=true dalam file gradle.properties. Build Analyzer dapat melakukan pemeriksaan untuk melihat apakah tanda tersebut dapat dihapus dengan aman agar project Anda memiliki performa build yang lebih baik dan bermigrasi dari Android Support library yang tidak dikelola.

Memeriksa dampak download

Build Analyzer memberikan ringkasan waktu yang dihabiskan untuk mendownload dependensi dan gambaran yang mendetail tentang download per repositori. Untuk memeriksa dampak download, pilih Downloads dari menu dropdown.

Anda dapat menggunakan informasi ini untuk menentukan apakah download dependensi yang tidak terduga berdampak negatif terhadap performa build Anda. Hal ini sangat penting selama build inkremental, yang seharusnya tidak mendownload artefak secara konsisten.

Secara khusus, Anda dapat menggunakan informasi ini untuk mengidentifikasi masalah konfigurasi, seperti penggunaan versi dinamis dependensi yang menyebabkan download yang tidak terduga. Selain itu, jika Anda melihat banyak permintaan yang gagal untuk repositori tertentu, hal ini dapat menunjukkan bahwa repositori harus dihapus atau dipindahkan lebih rendah dalam konfigurasi repositori Anda.

Gambar 5. Build Analyzer menunjukkan dampak download pada durasi build.