Catatan: Ada batasan umum tentang penggunaan Bazel untuk membuat aplikasi Android. Kunjungi hotlist tim-Android GitHub untuk melihat daftar masalah umum. Meskipun tim Bazel dan kontributor Open Source Software (OSS) bekerja secara aktif untuk mengatasi masalah umum, pengguna harus mengetahui bahwa Android Studio tidak mendukung project Bazel secara resmi.
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 pengembangan aplikasi Android atau Bazel. Anda tidak perlu menulis kode Android dalam tutorial ini.
Yang akan Anda pelajari
Dalam tutorial ini, Anda akan mempelajari cara:
- Menyiapkan lingkungan Anda dengan menginstal Bazel dan Android Studio, serta mendownload contoh project.
- Menyiapkan ruang kerja Bazel yang berisi kode sumber
untuk aplikasi dan file
MODULE.bazel
yang mengidentifikasi tingkat atas Workspace. - Perbarui file
MODULE.bazel
agar berisi referensi ke yang diperlukan dependensi eksternal, 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 ucapan saat diklik:
Gambar 1. Sambutan 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
. Sebagai
sisa tutorial, Anda akan mengeksekusi
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 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/ |
Membangun dengan Bazel
Menyiapkan ruang kerja
Ruang kerja adalah direktori yang berisi
untuk satu atau beberapa project software, dan memiliki file MODULE.bazel
di
di {i>root<i}.
File MODULE.bazel
mungkin kosong atau berisi referensi ke file eksternal
dependensi 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 |
Bazel Lari
Sekarang Anda dapat memeriksa apakah Bazel berjalan dengan benar menggunakan perintah:
bazel info workspace
Jika Bazel mencetak jalur direktori
saat ini, Anda siap! Jika
File MODULE.bazel
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 Android SDK
alat build
untuk membangun aplikasi. Ini berarti Anda perlu menambahkan beberapa informasi ke
MODULE.bazel
sehingga Bazel tahu di mana 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 ANDROID_HOME
variabel lingkungan, dan otomatis mendeteksi API level tertinggi dan
versi terbaru yang diinstal di lokasi tersebut.
Anda dapat menetapkan variabel ANDROID_HOME
ke lokasi Android SDK. Find (Menemukan)
jalur ke SDK yang diinstal menggunakan SDK Android Studio
Pengelola.
Dengan asumsi bahwa SDK diinstal ke lokasi default, Anda dapat menggunakan
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 membuat secara 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 aplikasi Android, Anda
Anda juga perlu mengunduh paket Android
NDK
dan gunakan rules_android_ndk
dengan menambahkan baris berikut ke file MODULE.bazel
Anda:
bazel_dep(name = "rules_android_ndk", version = "0.1.2")
Untuk informasi selengkapnya, baca Menggunakan Android Native Development Kit dengan Bazel.
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
di antara serangkaian output build, seperti kompilasi resource Android dari aapt
atau
dari javac
, dan dependensinya. Ketergantungan ini mungkin
(Java, C++) di ruang kerja Anda atau output build lainnya. BUILD
file
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 direktori
di ruang kerja Anda. Setiap paket adalah
direktori (dan subdirektorinya) yang berisi kumpulan file sumber terkait
dan file BUILD
. Paket ini juga menyertakan subdirektori
apa pun, kecuali
yang berisi file BUILD
-nya sendiri. package name adalah jalur ke
File BUILD
relatif terhadap file MODULE.bazel
.
Perhatikan, hierarki paket Bazel secara konseptual berbeda dari paket Java
hierarki paket direktori Aplikasi Android tempat file BUILD
berada
terletak, meskipun direktori
mungkin diatur secara identik.
Untuk aplikasi Android sederhana dalam tutorial ini, file sumber di src/main/
terdiri dari satu paket Bazel. Proyek yang lebih kompleks
mungkin memiliki banyak
paket.
Menambahkan aturan android_library
File BUILD
berisi beberapa jenis deklarasi yang berbeda untuk Bazel. Tujuan
jenis data yang paling penting adalah
aturan build, yang memberi tahu
Bazel cara membangun {i>output<i} perangkat lunak menengah atau akhir dari satu set sumber
file atau dependensi lainnya. Bazel menyediakan dua aturan build,
android_library
dan
android_binary
, yang dapat Anda gunakan untuk
membuat aplikasi Android.
Untuk tutorial ini, pertama-tama Anda akan menggunakan
Aturan android_library
untuk memberi tahu Bazel agar membuat library Android
modul
dari kode sumber aplikasi dan file resource. Anda kemudian akan menggunakan
Aturan android_binary
untuk memberi tahu Bazel cara membuat paket aplikasi Android.
Buat file BUILD
baru di direktori src/main/java/com/example/bazel
,
dan mendeklarasikan 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 dibutuhkan Bazel untuk
membangun modul {i>library<i} dari file sumber.
Perhatikan juga bahwa nama aturannya adalah greeter_activity
. Anda akan mereferensikan
menggunakan nama ini sebagai dependensi dalam aturan android_binary
.
Menambahkan aturan android_binary
Aturan android_binary
dibuat
paket aplikasi Android (file .apk
) untuk aplikasi Anda.
Buat file BUILD
baru di direktori src/main/
,
dan mendeklarasikan 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. Ini berarti bahwa ketika Bazel membuat
{i>output<i} dari aturan ini akan memeriksa terlebih
dahulu untuk melihat apakah {i>output<i} dari
Aturan library greeter_activity
telah dibuat dan terbaru. Jika tidak, Bazel
membangunnya dan kemudian menggunakan {i>output<i} tersebut
untuk membangun file paket aplikasi.
Sekarang, simpan dan tutup {i>file<i}.
Membangun aplikasi
Coba buat aplikasi Jalankan perintah berikut untuk membuat
Target android_binary
:
bazel build //src/main:app
Subperintah build
menginstruksikan Bazel untuk membangun
target yang mengikutinya. Target ditetapkan sebagai nama aturan build di dalam
file BUILD
, beserta jalur paket yang terkait dengan ruang kerja Anda
saat ini. 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 pada baris perintah dan nama target. Untuk detail selengkapnya tentang label dan jalur target, lihat Label.
Bazel akan mulai membangun aplikasi contoh. Selama proses build, output-nya akan tampak seperti 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 satu set
direktori {i>output<i} per pengguna dan per ruang kerja. Direktori ini di-symlink
dari lokasi berikut di tingkat teratas direktori proyek, di mana
file MODULE.bazel
menjadi:
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.
Di command prompt, tampilkan isi direktori ini dan temukan app.apk
file:
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 perangkat Android atau emulator 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 Anda untuk menggunakan adb
dengan mengikuti petunjuk di Android Debug
Hubungkan sebelum deployment. Anda
juga dapat memilih untuk menginstal aplikasi pada emulator Android yang disertakan dalam Android
di Studio. Pastikan emulator berjalan sebelum menjalankan perintah di bawah.
Masukkan:
bazel mobile-install //src/main:app
Selanjutnya, cari dan luncurkan "Aplikasi Tutorial Bazel":
Gambar 2. Aplikasi tutorial Bazel.
Selamat! Anda baru saja menginstal aplikasi Android pertama yang dibuat oleh Bazel.
Perhatikan bahwa subperintah mobile-install
juga mendukung
Flag --incremental
yang dapat digunakan untuk
hanya deploy bagian aplikasi yang telah berubah sejak deployment terakhir.
Ini juga mendukung flag --start_app
untuk memulai aplikasi langsung setelah
menginstalnya.
Bacaan lebih lanjut
Untuk detail selengkapnya, lihat halaman ini:
- Buka masalah di GitHub
- Informasi selengkapnya tentang penginstalan seluler
- Mengintegrasikan dependensi eksternal seperti AppCompat, Guava, dan JUnit dari Maven repositori menggunakan rules_jvm_external
- Menjalankan uji Robolectric dengan robolectric-bazel integrasi.
- Menguji aplikasi Anda dengan uji instrumentasi Android
- Mengintegrasikan kode C dan C++ ke dalam aplikasi Android dengan NDK
- Lihat contoh proyek Bazel lainnya untuk:
Selamat membangun!