Dependensi build adalah komponen eksternal yang diperlukan agar berhasil mem-build project Anda. Build dapat bergantung pada library, plugin, subproject, Android SDK, alat seperti compiler Kotlin dan Java, lingkungan pengembangan seperti Android Studio, dan Gradle itu sendiri.
Setiap dependensi itu sendiri dapat memerlukan dependensi lain. Kami menyebutnya dependensi transitif, dan dapat dengan cepat meningkatkan keseluruhan dependensi yang digunakan oleh aplikasi Anda. Saat Anda ingin mengupgrade dependensi, baik library, alat, maupun Android SDK, upgrade tersebut dapat beruntun, yang mengupgrade banyak dependensi lainnya.
Sering kali, hal ini tidak akan menimbulkan masalah, karena banyak library mengikuti skema yang dikenal sebagai Pembuatan Versi Semantik. Library ini membatasi jenis perubahan yang dibuat untuk menyediakan kompatibilitas dengan versi yang lebih rendah.
Pembuatan versi semantik mengikuti format major.minor.patch
. Misalnya, dalam
nomor versi 4.8.3, 4 adalah versi major
, 8 adalah versi minor
, dan 3
adalah nomor patch
. Saat bagian major
berubah, library mungkin memiliki
perubahan yang merusak API atau perilaku. Hal ini dapat memengaruhi perilaku build atau aplikasi Anda.
Saat bagian minor
(fitur baru) atau patch
(perbaikan bug) berubah, developer
library memberi tahu Anda bahwa library masih kompatibel dan tidak akan
memengaruhi aplikasi Anda.
Penting untuk memantau perubahan tersebut, dan beberapa Alat upgrade dependensi dapat membantu.
Hubungan dalam build
Build Android berisi hubungan antara:
- Kode sumber - kode dan resource yang Anda kontrol
- Dependensi library - library atau modul eksternal yang disertakan project dan subproject Anda saat mem-build
- Alat - compiler, plugin, dan SDK yang menerjemahkan sumber Anda menjadi aplikasi atau library
Kode sumber
Kode sumber Anda adalah kode Kotlin atau Java yang Anda tulis di aplikasi atau library. (Untuk mengetahui detail tentang penggunaan C++, lihat Android NDK.)
Kode sumber bergantung pada library (termasuk library runtime Kotlin dan Java) serta Android SDK, dan memerlukan compiler Kotlin atau Java yang sesuai.
Beberapa kode sumber menyertakan anotasi yang memerlukan pemrosesan tambahan. Misalnya, jika Anda menulis kode Jetpack Compose, Anda menambahkan anotasi seperti
@Composable
yang perlu diproses oleh plugin compiler Kotlin
Compose. Anotasi lain dapat diproses oleh Pemroses Simbol
Kotlin (KSP) atau alat pemrosesan anotasi terpisah.
Dependensi library
Library berisi bytecode yang diambil sebagai bagian dari aplikasi Anda. Ini dapat berupa JAR Java, library Android (AAR), atau subproject dalam build Anda. Banyak library mengikuti Pembuatan Versi Semantik, yang dapat membantu Anda memahami kapan library tersebut tetap kompatibel (atau tidak) saat diupgrade.
Library dapat bergantung pada library lain untuk digunakan kembali, yang disebut dependensi transitif. Hal ini mengurangi dependensi yang harus Anda kelola secara eksplisit; Anda menentukan dependensi yang Anda gunakan secara langsung, dan Gradle menariknya bersama dengan dependensi transitif tersebut. Perhatikan bahwa saat Anda mengupgrade dependensi langsung, dependensi tersebut dapat mengupgrade dependensi transitif tersebut.
Terkadang library mungkin memerlukan versi minimum Android SDK saat runtime
(minSdk
) atau waktu kompilasi (compileSdk
). Hal ini diperlukan saat
library menggunakan fungsi yang disertakan dalam Android SDK atau API JDK yang disediakannya. minSdk
yang efektif dari aplikasi Anda adalah minSdk
tertinggi yang diminta oleh
aplikasi Anda dan semua dependensi library langsung dan transitifnya.
Penggunaan beberapa library mungkin memerlukan penggunaan plugin Gradle tertentu. Plugin bantuan ini sering menginstal Pemroses Simbol Kotlin atau pemroses anotasi lainnya yang menghasilkan kode atau mengubah kompilasi sumber untuk mendukung penggunaan fitur library Anda. Misalnya, Jetpack Room menyertakan anotasi dan KSP yang mengubahnya menjadi kode yang dihasilkan untuk mengambil dan memodifikasi data dalam database. Jetpack Compose memerlukan plugin compiler Compose untuk mengubah fungsi yang dianotasi guna mengelola cara dan waktu fungsi tersebut dijalankan kembali.
Alat
Gradle |
Gradle adalah alat build yang membaca file build dan membuat aplikasi atau library, serta mengekspos API untuk plugin guna memperluas kemampuannya. Gradle menjalankan beberapa proses di satu atau beberapa virtual machine Java, dan plugin Java-nya memanggil alat Java di dalam JDK. |
Plugin Gradle |
Plugin Gradle memperluas Gradle dengan menentukan tugas dan konfigurasi baru. Menerapkan plugin ke build akan mengaktifkan kemampuan build tertentu, yang dikonfigurasi sebagai data dalam skrip build Anda. Untuk build Android, plugin Gradle yang paling penting adalah Plugin Android Gradle (AGP). |
Penyusun |
Compiler Kotlin atau Java mengubah kode sumber Anda menjadi bytecode yang dapat dieksekusi. Compiler Kotlin mengekspos API plugin yang memungkinkan analisis eksternal dan pembuatan kode dijalankan langsung di dalam compiler, yang mengakses struktur kode yang diuraikan. |
Plugin compiler |
Plugin compiler melakukan analisis dan pembuatan kode di dalam compiler Kotlin saat compiler Kotlin menganalisis kode Anda, dan diinstal saat Anda menerapkan plugin Gradle-nya ke build. |
Android SDK |
Android SDK berisi Platform Android dan API Java untuk versi Android tertentu, beserta alat yang terkait. Alat ini membantu Anda mengelola SDK, mem-build aplikasi, serta berkomunikasi dengan dan mengemulasi perangkat Android. Setiap versi Android SDK menyediakan API Java tertentu yang dapat diakses oleh kode sumber Anda, dan dukungan desugaring untuk menggunakan API tersebut di versi Android sebelumnya. |
JDK |
Java Development Kit, yang berisi pustaka Java dan file yang dapat dieksekusi untuk mengompilasi sumber Java dan menjalankan aplikasi Java. Ada beberapa JDK yang digunakan dalam build Android. Lihat Versi Java dalam build Android untuk mengetahui detail selengkapnya. |
Cakupan Gradle
Gradle mengelompokkan dependensi library ke dalam cakupan yang berbeda (disebut konfigurasi di Gradle API), yang memungkinkan Anda menentukan kumpulan dependensi library yang berbeda untuk digunakan di berbagai bagian build. Misalnya, Anda mungkin tidak ingin menyertakan library pengujian seperti JUnit dalam aplikasi atau library yang dipublikasikan, tetapi Anda menginginkannya saat mem-build dan menjalankan pengujian unit. Anda juga menggunakan cakupan untuk menambahkan pemroses simbol atau anotasi untuk menganalisis kode Anda.
Misalnya, AGP menentukan cakupan implementation
dan api
, cara Anda
menentukan apakah dependensi harus diekspos kepada pengguna subproject Anda.
Lihat Mengonfigurasi dependensi untuk deskripsi cakupan ini dan cakupan lainnya yang digunakan
dalam build Android.
Tambahkan dependensi library dalam blok dependencies
file build Anda, baik sebagai
string group:artifact:version
:
Kotlin
// In a module-level build script // explicit dependency strings ("group:artifact:version") dependencies { implementation("com.example:library1:1.2.3") api("com.example:library2:1.1.1") }
Groovy
// In a module-level build script // explicit dependency strings ("group:artifact:version") dependencies { implementation 'com.example:library1:1.2.3' api 'com.example:library2:1.1.1' }
atau di Katalog Versi:
# Version catalog - gradle/libs.versions.toml
[versions]
exampleLib = "1.2.3"
examplePlugin = "2.3.4"
[libraries]
example-library = { group = "com.example", name = "library", version.ref = "exampleLib" }
[plugins]
example-plugin = { id = "com.example.plugin", version.ref = "examplePlugin" }
dan tentukan variabel yang dihasilkan dalam file build Anda:
Kotlin
// In a module-level build script // Using a version catalog plugins { alias(libs.plugins.example.plugin) } dependencies { implementation(libs.example.library) }
Groovy
// In a module-level build script // Using a version catalog plugins { alias(libs.plugins.example.plugin) } dependencies { implementation libs.example.library }