Catatan: Ada batasan umum dalam menggunakan Bazel untuk membangun aplikasi Android. Buka daftar masalah mendesak tim Android di GitHub untuk melihat daftar masalah umum. Meskipun tim Bazel dan kontributor Software Open Source (OSS) bekerja secara aktif untuk mengatasi masalah yang diketahui, pengguna harus menyadari bahwa Android Studio tidak secara resmi mendukung project Bazel.
Tutorial ini membahas cara membuat 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:
- Siapkan lingkungan Anda dengan menginstal Bazel dan Android Studio, serta mendownload project contoh.
- Siapkan ruang kerja Bazel yang berisi kode sumber
untuk aplikasi dan file
MODULE.bazel
yang mengidentifikasi tingkat teratas direktori ruang kerja. - Perbarui file
MODULE.bazel
agar berisi referensi ke dependensi eksternal yang diperlukan, seperti Android SDK. - Buat file
BUILD
. - Bangun aplikasi dengan Bazel.
- Deploy dan jalankan 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
git
untuk mendownload project aplikasi Android.
Mendapatkan project contoh
Untuk project contoh, gunakan project aplikasi Android dasar di repositori contoh Bazel.
Aplikasi ini memiliki satu tombol yang mencetak ucapan saat diklik:
Gambar 1. Sapaan tombol aplikasi Android.
Buat clone repositori dengan git
(atau download file ZIP
secara langsung):
git clone https://github.com/bazelbuild/examples
Project contoh untuk tutorial ini ada di examples/android/tutorial
. Selama sisa tutorial, 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 utamanya 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/ |
Membangun dengan Bazel
Menyiapkan ruang kerja
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 membangun 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 workspace
Jika 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.bazel
agar Bazel tahu tempat menemukannya.
Tambahkan baris berikut ke file MODULE.bazel
Anda:
bazel_dep(name = "rules_android", version = "0.5.1")
Tindakan ini akan menggunakan Android SDK di jalur yang dirujuk oleh variabel lingkungan ANDROID_HOME
, dan otomatis mendeteksi level API tertinggi dan versi terbaru alat build yang diinstal di 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 menetapkan variabel hanya untuk sesi shell saat ini. Untuk menjadikannya 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 Anda 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.2")
Untuk mengetahui informasi selengkapnya, baca Menggunakan Android Native Development Kit dengan Bazel.
Anda tidak perlu menyetel 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 melapisi struktur direktori di ruang kerja Anda. Setiap paket adalah
direktori (dan subdirektorinya) yang berisi sekumpulan file sumber terkait
dan file BUILD
. Paket ini juga mencakup semua subdirektori, 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 di direktori Aplikasi Android 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 untuk Bazel. Jenis yang paling penting adalah aturan build, yang memberi tahu Bazel cara membuat output software akhir atau perantara 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 membangun 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
:
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 serangkaian atribut yang menentukan
informasi yang diperlukan Bazel untuk membangun 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
membuat
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
:
android_binary(
name = "app",
manifest = "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 membangun output aturan ini, Bazel akan memeriksa terlebih dahulu untuk melihat apakah output aturan library greeter_activity
telah dibangun dan terbaru. Jika tidak, Bazel akan membangunnya, lalu menggunakan output tersebut untuk membangun file paket aplikasi.
Sekarang, simpan dan tutup file tersebut.
Membangun aplikasi
Coba buat aplikasi. Jalankan perintah berikut untuk mem-build target
android_binary
:
bazel build //src/main:app
Subperintah build
menginstruksikan Bazel untuk membangun
target yang mengikutinya. Target ditentukan sebagai nama aturan build di dalam
file BUILD
, beserta jalur paket yang terkait dengan direktori
ruang kerja Anda. Untuk contoh ini, targetnya adalah app
dan jalur paketnya adalah
//src/main/
.
Perhatikan bahwa terkadang Anda dapat menghilangkan 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
Temukan output build
Bazel menempatkan output operasi build perantara dan akhir dalam serangkaian direktori output per pengguna, per ruang kerja. Direktori ini ditautkan secara simbolis
dari lokasi berikut di tingkat teratas direktori project, tempat
file MODULE.bazel
berada:
bazel-bin
menyimpan file biner yang dapat dieksekusi dan output build yang dapat dijalankan lainnyabazel-genfiles
menyimpan file sumber perantara yang dihasilkan oleh aturan Bazelbazel-out
menyimpan 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, buat daftar 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 emulator atau perangkat Android yang terhubung dari
command line menggunakan perintah 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
Selanjutnya, temukan dan luncurkan "Bazel Tutorial App":
Gambar 2. Aplikasi tutorial Bazel.
Selamat! Anda baru saja menginstal aplikasi Android pertama yang dibangun dengan Bazel.
Perhatikan bahwa subperintah mobile-install
juga mendukung flag
--incremental
yang dapat digunakan untuk
men-deploy hanya bagian aplikasi yang telah berubah sejak deployment terakhir.
Aplikasi ini juga mendukung tanda --start_app
untuk memulai aplikasi segera setelah
menginstalnya.
Bacaan lebih lanjut
Untuk mengetahui detail selengkapnya, lihat halaman berikut:
- Masalah terbuka di GitHub
- Informasi selengkapnya tentang mobile-install
- Mengintegrasikan dependensi eksternal seperti AppCompat, Guava, dan JUnit dari repositori Maven menggunakan rules_jvm_external
- Jalankan pengujian Robolectric dengan integrasi robolectric-bazel.
- Menguji aplikasi Anda dengan uji instrumentasi Android
- Mengintegrasikan kode C dan C++ ke dalam aplikasi Android Anda dengan NDK
- Lihat contoh project Bazel lainnya:
Selamat membangun!