Dependensi build adalah komponen eksternal yang diperlukan agar berhasil membangun 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, langkah ini tidak menimbulkan masalah karena banyak library mengikuti skema yang dikenal sebagai Pembuatan Versi Semantik. Library ini membatasi jenis perubahan yang dilakukan untuk memberikan 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 mengalami
perubahan yang dapat menyebabkan gangguan pada 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 memperhatikan perubahan tersebut, dan beberapa Alat upgrade dependensi dapat membantu.
Hubungan dalam build
Build Android berisi hubungan antara:
- Kode sumber - kode dan sumber daya yang dapat Anda kontrol
- Dependensi library - library atau modul eksternal yang disertakan project dan subproject Anda saat membangun
- 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 menulis kode Jetpack Compose, Anda menambahkan anotasi seperti @Composable
yang perlu diproses oleh plugin compiler
Compose Kotlin. 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 Java JAR, 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 mengubah data dalam database. Jetpack Compose memerlukan plugin compiler Compose untuk mengubah fungsi anotasi untuk mengelola cara dan waktu fungsi tersebut dijalankan ulang.
Alat
Gradle |
Gradle adalah alat build yang membaca file build dan membuat aplikasi atau library Anda, serta menampilkan API untuk plugin guna memperluas kemampuannya. Gradle menjalankan beberapa proses pada satu atau beberapa mesin virtual 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 memungkinkan 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, membangun 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 pada versi Android yang lebih lama. |
JDK |
Java Development Kit, yang berisi library 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 di build Android untuk 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 akan 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 di blok dependencies
file build, 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 }