Tutorial Bazel: Mem-build Aplikasi Android

Laporkan masalah Lihat sumber Nightly · 7.4 . 7.3 · 7.2 · 7.1 · 7.0 · 6.5

Catatan: Ada batasan umum terkait penggunaan Bazel untuk mem-build aplikasi Android. Buka hotlist tim Android 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 mem-build aplikasi Android sederhana menggunakan Bazel.

Bazel mendukung pembuatan aplikasi Android menggunakan aturan Android.

Tutorial ini ditujukan untuk pengguna Windows, macOS, dan Linux dan tidak memerlukan pengalaman dengan Bazel atau pengembangan aplikasi Android. Anda tidak perlu menulis kode Android 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.
  • Update file MODULE.bazel 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

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:

Sambutan tombol

Gambar 1. Ucapan 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 di examples/android/tutorial. Untuk sisa tutorial, Anda akan mengeksekusi 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/

Mem-build 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 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 dengan perintah:

bazel info workspace

Jika Bazel mencetak jalur direktori saat ini, Anda siap melanjutkan. 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 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 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 harus 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 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 menempatkan struktur direktori di ruang kerja Anda. Setiap paket adalah direktori (dan subdirektorinya) yang berisi kumpulan file sumber dan file BUILD yang terkait. Paket ini juga menyertakan subdirektori apa pun, kecuali subdirektori yang berisi file BUILD-nya sendiri. Nama paket adalah jalur ke file BUILD yang relatif terhadap file MODULE.bazel.

Perhatikan bahwa hierarki paket Bazel secara konseptual berbeda dengan hierarki paket Java dari 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 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, 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:

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 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:

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 Bazel mem-build output aturan ini, Bazel akan memeriksa terlebih dahulu untuk melihat apakah output aturan library greeter_activity telah di-build dan sudah yang terbaru. Jika tidak, Bazel akan mem-buildnya, lalu menggunakan output tersebut untuk mem-build file paket aplikasi.

Sekarang, simpan dan tutup {i>file<i}.

Membangun aplikasi

Coba buat aplikasi Jalankan perintah berikut untuk mem-build target android_binary:

bazel build //src/main:app

Subperintah build menginstruksikan Bazel untuk mem-build target yang mengikuti. 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 saat ini di command line dan nama target. Untuk mengetahui detail selengkapnya tentang label dan jalur target, lihat Label.

Bazel akan mulai membangun aplikasi contoh. Selama proses build, outputnya akan tampak 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 menengah dan akhir dalam sekumpulan direktori output per pengguna dan per ruang kerja. Direktori ini memiliki symlink dari lokasi berikut di tingkat teratas direktori project, tempat file MODULE.bazel berada:

  • bazel-bin menyimpan file biner yang dapat dieksekusi dan output build lainnya yang dapat dijalankan
  • bazel-genfiles menyimpan file sumber perantara yang dihasilkan oleh aturan Bazel
  • bazel-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, 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 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 "Aplikasi Tutorial Bazel":

Aplikasi tutorial Bazel

Gambar 2. Aplikasi tutorial Bazel.

Selamat! Anda baru saja menginstal aplikasi Android buatan Bazel pertama Anda.

Perhatikan bahwa subperintah mobile-install juga mendukung flag --incremental yang dapat digunakan untuk men-deploy hanya bagian-bagian aplikasi yang telah berubah sejak deployment terakhir.

Kode ini juga mendukung flag --start_app untuk langsung memulai aplikasi setelah menginstal.

Bacaan lebih lanjut

Untuk mengetahui detail selengkapnya, lihat halaman berikut:

Selamat membangun!