Tutorial ini membahas cara membangun 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 dalam pengembangan aplikasi Bazel atau 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, lalu mendownload project contoh.
- Siapkan workspace Bazel yang berisi kode sumber
untuk aplikasi dan file
WORKSPACE
yang mengidentifikasi tingkat teratas direktori ruang kerja. - Update file
WORKSPACE
agar berisi referensi ke dependensi eksternal yang diperlukan, seperti Android SDK. - Buat file
BUILD
. - Bangun aplikasi dengan Bazel.
- Men-deploy dan menjalankan aplikasi di emulator Android atau perangkat fisik.
Sebelum memulai
Instal 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 contoh project
Untuk project contoh, gunakan project aplikasi Android dasar di repositori contoh Bazel.
Aplikasi ini memiliki satu tombol yang mencetak salam saat diklik:
Gambar 1. Salam tombol aplikasi Android.
Clone repositori dengan git
(atau download file ZIP
secara langsung):
git clone https://github.com/bazelbuild/examples
Project contoh untuk tutorial ini ada dalam examples/android/tutorial
. Untuk sisa tutorial, Anda akan menjalankan perintah dalam 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
Siapkan ruang kerja
Ruang kerja adalah direktori yang berisi
file sumber untuk satu atau beberapa project software, dan memiliki file WORKSPACE
di
root-nya.
File WORKSPACE
mungkin kosong atau mungkin berisi referensi ke dependensi eksternal yang diperlukan untuk membuat project.
Pertama, jalankan perintah berikut untuk membuat file WORKSPACE
kosong:
OS | Perintah |
---|---|
Linux, macOS | touch WORKSPACE |
Windows (Command Prompt) | type nul > WORKSPACE |
Windows (PowerShell) | New-Item WORKSPACE -ItemType file |
Bazel untuk Lari
Sekarang Anda dapat memeriksa apakah Bazel berjalan dengan benar dengan perintah:
bazel info workspace
Jika Bazel mencetak jalur direktori saat ini, Anda sudah siap! Jika
file WORKSPACE
tidak ada, Anda mungkin 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 WORKSPACE
agar Bazel mengetahui tempat untuk menemukannya.
Tambahkan baris berikut ke file WORKSPACE
Anda:
android_sdk_repository(name = "androidsdk")
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 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 menetapkan variabel hanya 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) |
Anda juga dapat menentukan secara eksplisit jalur absolut Android SDK,
API level, dan versi alat build yang digunakan dengan menyertakan atribut path
,
api_level
, dan build_tools_version
. Jika api_level
dan
build_tools_version
tidak ditentukan, aturan android_sdk_repository
akan
menggunakan versi terbaru masing-masing yang tersedia di SDK. Anda dapat menentukan kombinasi apa pun dari atribut ini, selama atribut tersebut ada di SDK, misalnya:
android_sdk_repository(
name = "androidsdk",
path = "/path/to/Android/sdk",
api_level = 25,
build_tools_version = "30.0.3"
)
Di Windows, perhatikan bahwa atribut path
harus menggunakan jalur bergaya campuran,
yaitu jalur Windows dengan garis miring ke depan:
android_sdk_repository(
name = "androidsdk",
path = "c:/path/to/Android/sdk",
)
Opsional: Jika ingin mengompilasi kode native ke dalam aplikasi Android, Anda
juga harus mendownload Android
NDK
dan memberi tahu Bazel tempat menemukannya dengan menambahkan baris berikut ke file WORKSPACE
:
android_ndk_repository(name = "androidndk")
Serupa dengan android_sdk_repository
, jalur ke Android NDK disimpulkan
dari variabel lingkungan ANDROID_NDK_HOME
secara default. Jalur tersebut juga
dapat ditentukan secara eksplisit dengan atribut path
pada android_ndk_repository
.
Untuk mengetahui informasi selengkapnya, baca Menggunakan Android Native Development Kit dengan Bazel.
api_level
adalah versi Android API yang ditargetkan oleh SDK dan
NDK - misalnya, 23 untuk Android 6.0 dan 25 untuk Android 7.1. Jika tidak
ditetapkan secara eksplisit, api_level
akan ditetapkan secara default ke API level tertinggi yang tersedia untuk
android_sdk_repository
dan android_ndk_repository
.
Anda tidak perlu menyetel API level ke nilai yang sama untuk SDK dan NDK. Halaman ini berisi peta dari rilis Android ke API level yang didukung NDK.
Membuat file BUILD
File BUILD
menjelaskan hubungan
antara serangkaian 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 menempatkan struktur direktori di ruang kerja Anda. Setiap paket adalah
direktori (dan subdirektorinya) yang berisi kumpulan file sumber
terkait dan file BUILD
. Paket ini juga menyertakan semua subdirektori, tidak termasuk
yang berisi file BUILD
-nya sendiri. Nama paket adalah jalur ke
file BUILD
yang relatif terhadap WORKSPACE
.
Perlu diperhatikan bahwa hierarki paket Bazel secara konsep berbeda dengan hierarki paket Java
direktori Aplikasi Android tempat file BUILD
berada, meskipun direktori tersebut 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 berbagai jenis deklarasi untuk Bazel. Jenis
yang paling penting adalah
aturan build, yang memberi tahu
Bazel cara mem-build output software perantara atau akhir dari kumpulan 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, pertama-tama Anda akan menggunakan
aturan android_library
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
:
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 kumpulan atribut yang menentukan
informasi yang diperlukan Bazel untuk mem-build modul library dari file sumber.
Perhatikan juga bahwa nama aturannya 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 mem-build
output aturan ini, Bazel akan memeriksa terlebih dahulu untuk melihat apakah output
aturan library greeter_activity
telah di-build dan merupakan yang terbaru. Jika belum, Bazel
akan membuatnya, lalu menggunakan output tersebut untuk mem-build file paket aplikasi.
Sekarang, simpan dan tutup {i>file<i} tersebut.
Membangun aplikasi
Coba bangun aplikasi! Jalankan perintah berikut untuk membuat target android_binary
:
bazel build //src/main:app
Subperintah build
menginstruksikan Bazel untuk membuat
target yang mengikutinya. Target ditentukan sebagai nama aturan build di dalam file BUILD
, beserta 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 menghilangkan jalur paket atau nama target, bergantung pada direktori kerja Anda saat ini di command line dan nama target. Untuk detail selengkapnya tentang label dan jalur target, lihat Label.
Bazel akan mulai mem-build aplikasi contoh. Selama proses build, output-nya akan terlihat seperti berikut:
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 satu set
direktori output per pengguna dan per ruang kerja. Direktori ini di-symlink dari lokasi berikut di tingkat teratas direktori project, tempat WORKSPACE
berada:
bazel-bin
menyimpan file biner yang dapat dieksekusi dan output build lainnya yang dapat dijalankanbazel-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
berasal dari nama paket Bazel.
Pada command prompt, cantumkan isi direktori ini dan cari 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
Kini 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
Berikutnya, temukan dan luncurkan "Aplikasi Tutorial Bazel":
Gambar 2. Aplikasi tutorial Bazel.
Selamat! Anda baru saja menginstal aplikasi Android pertama yang dibuat oleh Bazel.
Perlu diperhatikan bahwa subperintah mobile-install
juga mendukung tanda --incremental
yang dapat digunakan untuk men-deploy hanya bagian aplikasi yang telah berubah sejak deployment terakhir.
Class ini juga mendukung flag --start_app
untuk memulai aplikasi segera setelah
diinstal.
Bacaan lebih lanjut
Untuk detail selengkapnya, lihat halaman ini:
- Buka masalah di GitHub
- Informasi selengkapnya tentang penginstalan seluler
- Integrasikan dependensi eksternal seperti AppCompat, Guava, dan JUnit dari repositori Maven menggunakan rules_jvm_external
- Jalankan pengujian Robolectric dengan integrasi robolectric-bazel.
- Menguji aplikasi dengan uji instrumentasi Android
- Mengintegrasikan kode C dan C++ ke dalam aplikasi Android dengan NDK
- Lihat contoh project Bazel lainnya dari:
Selamat membangun!