Tutorial ini membahas cara mem-build aplikasi Android sederhana menggunakan Bazel.
Bazel mendukung pembuatan aplikasi Android menggunakan aturan Android.
Tutorial ini ditujukan untuk pengguna Windows, macOS, dan Linux, serta tidak memerlukan pengalaman dengan Bazel atau pengembangan aplikasi Android. Anda tidak perlu menulis kode Android apa pun dalam tutorial ini.
Yang akan Anda pelajari
Dalam tutorial ini, Anda akan mempelajari cara:
- Menyiapkan lingkungan dengan menginstal Bazel dan Android Studio, serta mendownload project contoh.
- Menyiapkan ruang kerja Bazel yang berisi kode sumber untuk aplikasi dan file
MODULE.bazelyang mengidentifikasi tingkat teratas direktori ruang kerja. - Memperbarui file
MODULE.bazelagar berisi referensi ke dependensi eksternal yang diperlukan, seperti Android SDK. - Membuat file
BUILD. - Mem-build aplikasi dengan Bazel.
- Men-deploy dan menjalankan aplikasi di emulator Android atau perangkat fisik.
Sebelum memulai
Menginstal Bazel
Sebelum memulai tutorial, instal software berikut:
- Bazel. Untuk menginstal, ikuti petunjuk penginstalan.
- Android Studio. Untuk menginstal, ikuti langkah-langkah untuk mendownload Android Studio. Jalankan wizard penyiapan untuk mendownload SDK dan mengonfigurasi lingkungan Anda.
- (Opsional) Git. Gunakan
gituntuk mendownload project aplikasi Android.
Mendapatkan project contoh
Untuk project contoh, gunakan project aplikasi Android tutorial di repositori contoh Bazel.
Aplikasi ini memiliki satu tombol yang mencetak ucapan saat diklik:

Gambar 1. Ucapan tombol aplikasi Android.
Clone repositori dengan git (atau download file ZIP
secara langsung):
git clone https://github.com/bazelbuild/examplesProject contoh untuk tutorial ini ada di examples/android/tutorial. Untuk bagian tutorial lainnya, Anda akan menjalankan perintah di direktori ini.
Meninjau file sumber
Lihat file sumber untuk aplikasi.
.
├── README.md
└── src
└── main
├── AndroidManifest.xml
└── java
└── com
└── example
└── bazel
├── AndroidManifest.xml
├── Greeter.java
├── MainActivity.java
└── res
├── layout
│ └── activity_main.xml
└── values
├── colors.xml
└── strings.xml
File dan direktori utama adalah:
| Nama | Lokasi |
|---|---|
| File manifes Android | src/main/AndroidManifest.xml dan src/main/java/com/example/bazel/AndroidManifest.xml |
| File sumber Android | src/main/java/com/example/bazel/MainActivity.java dan Greeter.java |
| Direktori file resource | src/main/java/com/example/bazel/res/ |
Mem-build dengan Bazel
Menyiapkan ruang kerja
Sebuah ruang kerja adalah direktori yang berisi
file sumber untuk satu atau beberapa project software, dan memiliki file MODULE.bazel di
root-nya.
File MODULE.bazel mungkin kosong atau berisi referensi ke dependensi
eksternal yang diperlukan untuk mem-build project Anda.
Pertama, jalankan perintah berikut untuk membuat file MODULE.bazel kosong:
| OS | Perintah |
|---|---|
| Linux, macOS | touch MODULE.bazel |
| Windows (Command Prompt) | type nul > MODULE.bazel |
| Windows (PowerShell) | New-Item MODULE.bazel -ItemType file |
Menjalankan Bazel
Sekarang, Anda dapat memeriksa apakah Bazel berjalan dengan benar menggunakan perintah:
bazel info workspaceJika Bazel mencetak jalur direktori saat ini, Anda siap memulai. Jika file MODULE.bazel tidak ada, Anda mungkin akan melihat pesan error seperti:
ERROR: The 'info' command is only supported from within a workspace.
Mengintegrasikan dengan Android SDK
Bazel perlu menjalankan alat build Android SDK
untuk mem-build aplikasi. Artinya, Anda perlu menambahkan beberapa informasi ke file
MODULE.bazelagar Bazel mengetahui tempat menemukannya.
Tambahkan baris berikut ke file MODULE.bazel Anda:
bazel_dep(name = "rules_android", version = "0.6.6")
remote_android_extensions = use_extension(
"@rules_android//bzlmod_extensions:android_extensions.bzl",
"remote_android_tools_extensions")
use_repo(remote_android_extensions, "android_tools")
android_sdk_repository_extension = use_extension("@rules_android//rules/android_sdk_repository:rule.bzl", "android_sdk_repository_extension")
use_repo(android_sdk_repository_extension, "androidsdk")
Tindakan ini akan menggunakan Android SDK di jalur yang direferensikan oleh variabel lingkungan ANDROID_HOME, dan otomatis mendeteksi level API tertinggi serta alat build versi terbaru yang diinstal dalam lokasi tersebut.
Anda dapat menetapkan variabel ANDROID_HOME ke lokasi Android SDK. Temukan
jalur ke SDK yang diinstal menggunakan SDK
Manager Android Studio.
Dengan asumsi SDK diinstal ke lokasi default, Anda dapat menggunakan perintah berikut untuk menetapkan variabel ANDROID_HOME:
| OS | Perintah |
|---|---|
| Linux | export ANDROID_HOME=$HOME/Android/Sdk/ |
| macOS | export ANDROID_HOME=$HOME/Library/Android/sdk |
| Windows (Command Prompt) | set ANDROID_HOME=%LOCALAPPDATA%\Android\Sdk |
| Windows (PowerShell) | $env:ANDROID_HOME="$env:LOCALAPPDATA\Android\Sdk" |
Perintah di atas hanya menetapkan variabel untuk sesi shell saat ini. Untuk membuatnya permanen, jalankan perintah berikut:
| OS | Perintah |
|---|---|
| Linux | echo "export ANDROID_HOME=$HOME/Android/Sdk/" >> ~/.bashrc |
| macOS | echo "export ANDROID_HOME=$HOME/Library/Android/Sdk/" >> ~/.bashrc |
| Windows (Command Prompt) | setx ANDROID_HOME "%LOCALAPPDATA%\Android\Sdk" |
| Windows (PowerShell) | [System.Environment]::SetEnvironmentVariable('ANDROID_HOME', "$env:LOCALAPPDATA\Android\Sdk", [System.EnvironmentVariableTarget]::User) |
Opsional: Jika ingin mengompilasi kode native ke dalam aplikasi Android, Anda
juga perlu mendownload Android
NDK
dan menggunakan rules_android_ndk dengan menambahkan baris berikut ke file MODULE.bazel:
bazel_dep(name = "rules_android_ndk", version = "0.1.3")
Untuk mengetahui informasi selengkapnya, baca Menggunakan Android Native Development Kit dengan Bazel.
Anda tidak perlu menetapkan level API ke nilai yang sama untuk SDK dan NDK. Halaman ini berisi peta dari rilis Android ke level API yang didukung NDK.
Membuat file BUILD
File BUILD menjelaskan hubungan
antara sekumpulan output build, seperti resource Android yang dikompilasi dari aapt atau
file class dari javac, dan dependensinya. Dependensi ini dapat berupa file sumber (Java, C++) di ruang kerja Anda atau output build lainnya. File BUILD ditulis dalam bahasa yang disebut Starlark.
File BUILD adalah bagian dari konsep di Bazel yang dikenal sebagai hierarki paket.
Hierarki paket adalah struktur logis yang menimpa struktur direktori di ruang kerja Anda. Setiap paket adalah
direktori (dan subdirektorinya) yang berisi kumpulan file sumber terkait
dan file BUILD. Paket ini juga mencakup subdirektori apa pun, kecuali subdirektori yang berisi file BUILD-nya sendiri. Nama paket adalah jalur ke file BUILD relatif terhadap file MODULE.bazel.
Perhatikan bahwa hierarki paket Bazel secara konseptual berbeda dengan hierarki paket Java dari direktori Aplikasi Android Anda tempat file BUILD berada, meskipun direktori dapat diatur secara identik.
Untuk aplikasi Android sederhana dalam tutorial ini, file sumber di src/main/ terdiri dari satu paket Bazel. Project yang lebih kompleks mungkin memiliki banyak paket bertingkat.
Menambahkan aturan android_library
File BUILD berisi beberapa jenis deklarasi yang berbeda untuk Bazel. Jenis yang
paling penting adalah
aturan build, yang memberi tahu
Bazel cara mem-build output software perantara atau akhir dari sekumpulan file
sumber atau dependensi lainnya. Bazel menyediakan dua aturan build,
android_library dan
android_binary, yang dapat Anda gunakan untuk
mem-build aplikasi Android.
Untuk tutorial ini, Anda akan menggunakan aturan
android_library terlebih dahulu untuk memberi tahu Bazel agar mem-build modul library Android
dari kode sumber aplikasi dan file resource. Kemudian, Anda akan menggunakan aturan android_binary untuk memberi tahu Bazel cara mem-build paket aplikasi Android.
Buat file BUILD baru di direktori src/main/java/com/example/bazel, dan deklarasikan target android_library baru:
src/main/java/com/example/bazel/BUILD:
load("@rules_android//rules:rules.bzl", "android_library")
package(
default_visibility = ["//src:__subpackages__"],
)
android_library(
name = "greeter_activity",
srcs = [
"Greeter.java",
"MainActivity.java",
],
manifest = "AndroidManifest.xml",
resource_files = glob(["res/**"]),
)
Aturan build android_library berisi sekumpulan atribut yang menentukan informasi yang diperlukan Bazel untuk mem-build modul library dari file sumber.
Perhatikan juga bahwa nama aturan adalah greeter_activity. Anda akan mereferensikan aturan menggunakan nama ini sebagai dependensi dalam aturan android_binary.
Menambahkan aturan android_binary
Aturan android_binary mem-build
paket aplikasi Android (file .apk) untuk aplikasi Anda.
Buat file BUILD baru di direktori src/main/, dan deklarasikan target android_binary baru:
src/main/BUILD:
load("@rules_android//rules:rules.bzl", "android_binary")
android_binary(
name = "app",
manifest = "//src/main/java/com/example/bazel:AndroidManifest.xml",
deps = ["//src/main/java/com/example/bazel:greeter_activity"],
)
Di sini, atribut deps mereferensikan output aturan greeter_activity yang Anda tambahkan ke file BUILD di atas. Artinya, saat Bazel mem-build output aturan ini, Bazel akan memeriksa terlebih dahulu apakah output aturan library greeter_activity telah di-build dan terbaru. Jika tidak, Bazel akan mem-build-nya, lalu menggunakan output tersebut untuk mem-build file paket aplikasi.
Sekarang, simpan dan tutup file tersebut.
Mem-build aplikasi
Coba build aplikasi. Jalankan perintah berikut untuk mem-build target android_binary:
bazel build //src/main:appSubperintah build menginstruksikan Bazel untuk mem-build target yang mengikuti. Target ditentukan sebagai nama aturan build di dalam file BUILD, dengan jalur paket yang relatif terhadap direktori ruang kerja Anda. Untuk contoh ini, targetnya adalah app dan jalur paketnya adalah //src/main/.
Perhatikan bahwa terkadang Anda dapat menghapus jalur paket atau nama target, bergantung pada direktori kerja saat ini di command line dan nama target. Untuk mengetahui detail selengkapnya tentang jalur dan label target, lihat Label.
Bazel akan mulai mem-build aplikasi contoh. Selama proses build, outputnya akan terlihat mirip dengan berikut ini:
INFO: Analysed target //src/main:app (0 packages loaded, 0 targets configured).
INFO: Found 1 target...
Target //src/main:app up-to-date:
bazel-bin/src/main/app_deploy.jar
bazel-bin/src/main/app_unsigned.apk
bazel-bin/src/main/app.apk
Menemukan output build
Bazel menempatkan output operasi build perantara dan akhir dalam sekumpulan direktori output per pengguna dan per ruang kerja. Direktori ini di-symlink dari lokasi berikut di tingkat teratas direktori project, tempat file MODULE.bazel berada:
bazel-binmenyimpan executable biner dan output build lain yang dapat dijalankanbazel-genfilesmenyimpan file sumber perantara yang dihasilkan oleh aturan Bazelbazel-outmenyimpan jenis output build lainnya
Bazel menyimpan file .apk Android yang dihasilkan menggunakan aturan android_binary
di direktori bazel-bin/src/main, dengan nama subdirektori src/main yang
berasal dari nama paket Bazel.
Di command prompt, cantumkan konten direktori ini dan temukan file app.apk:
| OS | Perintah |
|---|---|
| Linux, macOS | ls bazel-bin/src/main |
| Windows (Command Prompt) | dir bazel-bin\src\main |
| Windows (PowerShell) | ls bazel-bin\src\main |
Menjalankan aplikasi
Sekarang, Anda dapat men-deploy aplikasi ke perangkat Android atau emulator yang terhubung dari command line menggunakan bazel mobile-install.
Perintah ini menggunakan Android Debug Bridge (adb) untuk berkomunikasi dengan perangkat. Anda harus menyiapkan perangkat untuk menggunakan adb dengan mengikuti petunjuk di
Android Debug Bridge
sebelum deployment. Anda juga dapat memilih untuk menginstal aplikasi di emulator Android yang disertakan dalam Android Studio. Pastikan emulator berjalan sebelum menjalankan perintah di bawah.
Masukkan:
bazel mobile-install //src/main:app \
--mode=skylark \
--mobile_install_aspect=@rules_android//mobile_install:mi.bzl \
--mobile_install_supported_rules=android_binary \
--java_runtime_version=17 \
--java_language_version=17 \
--tool_java_runtime_version=17 \
--tool_java_language_version=17Perhatikan bahwa flag tambahan yang diperlukan untuk mobile-install dapat ditambahkan ke file bazelrc project Anda. Flag khusus mobile-install (--mode, --mobile_install*) tidak akan diperlukan lagi mulai dari Bazel 8.4.0 dan seterusnya. Berbagai flag Java untuk versi bahasa dan runtime mungkin diperlukan, bergantung pada konfigurasi Java ruang kerja Anda.
Alat bantu mobile-install memerlukan tingkat bahasa dan runtime 17 atau yang lebih tinggi.
Sekarang, "Aplikasi Tutorial Bazel" akan diinstal dan diluncurkan secara otomatis:

Gambar 2. Aplikasi tutorial Bazel.
Selamat! Anda baru saja menginstal aplikasi Android pertama yang dibuat Bazel.
Bacaan lebih lanjut
Untuk mengetahui detail selengkapnya, lihat halaman berikut:
- Masalah terbuka di rules_android GitHub
- Informasi selengkapnya tentang mobile-install
- Mengintegrasikan dependensi eksternal seperti AppCompat, Guava, dan JUnit dari repositori Maven menggunakan rules_jvm_external
- Menjalankan pengujian Robolectric dengan integrasi robolectric-bazel.
- Mengintegrasikan kode C dan C++ ke dalam aplikasi Android dengan NDK
- Lihat project contoh Bazel lainnya dari:
Selamat mem-build.