Plugin Dependency Analysis Gradle (DAGP, née Dependency Analysis Android Gradle Plugin) mendeteksi hal berikut:
Dependensi yang tidak digunakan.
Ketergantungan transitif yang digunakan (yang mungkin ingin Anda deklarasikan secara langsung).
Ketergantungan dinyatakan pada konfigurasi yang salah ( api
vs implementation
vs compileOnly
, dll.).
Sebagai efek sampingnya, plugin juga dapat memberi tahu Anda ABI proyek Anda, dan menghasilkan file graphviz yang mewakili berbagai tampilan grafik ketergantungan Anda, antara lain. Efek samping ini saat ini sebagian besar merupakan perilaku internal yang tidak terdokumentasikan, namun mungkin menarik bagi beberapa pengguna tingkat lanjut.
Selain saran terkait ketergantungan (lihat di atas), DAGP memberikan saran lain untuk membantu menjaga "kesehatan" Anda. Ini termasuk deteksi:
Plugin yang tidak diperlukan (saat ini hanya kapt
).
Subproyek ("modul") yang tidak perlu menggunakan plugin Android, dan dapat menggunakan pustaka JVM "normal".
Silakan lihat wiki untuk informasi tentang versi Gradle, Plugin Android Gradle, dll., yang kompatibel dengan plugin ini.
Untuk petunjuk rinci, lihat wiki.
Pendekatan paling sederhana adalah dengan menambahkan yang berikut ini:
plugins {
id( " com.autonomousapps.build-health " ) version " <<latest_version>> "
}
Penting | Jika proyek Anda menggunakan Kotlin atau Android (atau keduanya), maka plugin tersebut juga harus dimuat di skrip pengaturan classloader (atau induknya). Lihat wiki untuk informasi lebih lanjut |
Untuk memulai dengan cepat, jalankan saja yang berikut ini:
./gradlew buildHealth
Anda mungkin akan melihat keluaran seperti berikut:
> Tugas :buildHealth GAGAL KEGAGALAN: Pembangunan gagal dengan pengecualian. * Apa yang salah: Eksekusi gagal untuk tugas ':buildHealth'. > Ada pelanggaran ketergantungan. Lihat laporan di file:///path/to/project/build/reports/dependency-lysis/build-health-report.txt
Jika Anda ingin laporan ini (yang mungkin sangat panjang) dicetak ke konsol, tambahkan ini ke file gradle.properties
Anda:
dependency.analysis.print.build.health=true
Anda tidak harus menerapkan plugin ini ke semua proyek melalui skrip pengaturan. Hal ini juga dapat diterapkan hanya pada subproyek tertentu. Dalam hal ini, ini juga harus diterapkan pada skrip root build.
plugins {
id( " com.autonomousapps.dependency-analysis " ) version " <<latest_version>> "
}
plugins {
id( " com.autonomousapps.dependency-analysis " )
}
Penting | Jika proyek Anda menggunakan Kotlin atau Android (atau keduanya), maka plugin tersebut juga harus dimuat di classloader skrip build root (atau induknya). Lihat wiki untuk informasi lebih lanjut |
Analisis dapat dijalankan terhadap modul individual dengan tugas projectHealth
. Misalnya:
./aplikasi gradlew:projectHealth
Plugin biasanya melaporkan banyak masalah dengan deklarasi ketergantungan proyek Anda. Karena memperbaiki secara manual bisa jadi membosankan, plugin juga menyediakan tugas untuk memperbaiki semua masalah secara otomatis.
./gradlew fixDependensi
Tugas fixDependencies
didaftarkan pada setiap proyek tempat plugin diterapkan. Menjalankannya seperti di atas akan menjalankan tugas di setiap subproyek. Lihat juga Perbaikan ketergantungan satu klik .
Dalam beberapa keadaan, mungkin dianggap tidak mungkin untuk menyelesaikan semua masalah dalam satu kesempatan. Mungkin Anda mempunyai proyek yang sangat besar, atau Anda menerbitkan perpustakaan dan Anda tahu bahwa mengubah deklarasi ketergantungan juga akan mengubah metadata perpustakaan Anda, yang mungkin merugikan konsumen. Untuk mendukung kasus penggunaan ini, tugas fixDependencies
mengambil tanda opsional untuk memerintahkannya, pada dasarnya, hanya membuat perubahan "aman".
./gradlew fixDependencies --upgrade
Dengan adanya tanda ini, tugas fixDependencies
tidak akan menghapus atau "menurunkan" deklarasi ketergantungan apa pun. Itu hanya akan menambah atau "meningkatkan" deklarasi (misalnya, dari implementation
ke api
).
Dalam skenario peluncuran bertahap, kita dapat membayangkan menggunakan tanda --upgrade
, lalu memperbarui semua konsumen, lalu akhirnya menghapus tanda tersebut dan menghapus semua dependensi yang tidak digunakan.
Jika analisis memiliki bug, memperbaiki deklarasi ketergantungan akan merusak build Anda (tetapi hal ini juga terjadi pada perbaikan manual). Jika Anda mengalami hal ini, harap ajukan masalah.
Selain itu, fungsi penulisan ulang didasarkan pada tata bahasa DSL Gradle Groovy/Kotlin yang disederhanakan, yang akan gagal jika terdapat skrip build yang rumit. Kami berencana untuk segera menyempurnakan tata bahasa Gradle Kotlin DSL, karena ini adalah bahasa skrip build default, namun saat ini kami tidak memiliki rencana untuk melakukan hal yang sama untuk Gradle Groovy DSL.
Anda mungkin penasaran mengapa plugin mengeluarkan (atau tidak mengeluarkan) saran mengenai beberapa ketergantungan. Anda dapat menanyakan alasannya:
./gradlew lib:reason --id com.squareup.okio:okio:2.2.2 (1) > Tugas :lib:alasan ---------------------------------------- Anda bertanya tentang ketergantungan 'com.squareup.okio:okio:2.2.2'. Tidak ada saran mengenai ketergantungan ini. ---------------------------------------- Jalur terpendek dari :lib ke com.squareup.okio:okio:2.2.2: :lib --- com.squareup.okio:okio:2.2.2 Sumber: utama ------------ * Mengekspos kelas okio.BufferedSource (menyiratkan api).
String versi bersifat opsional.
Untuk informasi rinci tentang cara mengkonfigurasi plugin, lihat wiki.
Untuk mengonfigurasi plugin, gunakan ekstensi dependencyAnalysis
.
dependencyAnalysis {
// configuration goes here
}
Berikut daftar artikel/postingan blog yang pernah dipublikasikan membahas plugin ini:
Perawatan dan pemberian makan yang tepat pada bangunan Gradle Anda
Plugin Gradle Analisis Ketergantungan: Menggunakan analisis bytecode untuk menemukan dependensi yang tidak digunakan
Plugin Gradle Analisis Ketergantungan: Apa itu ABI?
Mengurangi dampak plugin Gradle saya pada waktu konfigurasi: Sebuah perjalanan
Perbaikan ketergantungan sekali klik
…dengan lebih banyak lagi yang akan datang :)
Plugin ini juga telah ditampilkan dalam buletin berikut:
Gradle, Oktober 2024
Gradle, Mei 2022
Gradle, September 2020
Gradle, Agustus 2020
Android Mingguan, Edisi #423
Gradle, Juli 2020
Gradle, Juni 2020
Episode podcast tentang plugin ini dapat ditemukan di sini:
Toko Roti Pengembang, Episode #31
Video Youtube tentang plugin ini:
Memahami Gradle #28 – Bersihkan Kompilasi Classpath dengan Plugin Analisis Ketergantungan