Mem-build Android

Ikuti petunjuk di halaman ini untuk mem-build Android.

Menyiapkan lingkungan build

Dari dalam direktori kerja Anda, sumberkan skrip envsetup.sh untuk menyiapkan lingkungan build:

source build/envsetup.sh

Skrip ini mengimpor beberapa perintah yang memungkinkan Anda menggunakan kode sumber Android, termasuk perintah yang digunakan di halaman ini. Untuk melihat sumber skrip, lihat platform/build/envsetup.sh. Untuk melihat bantuan bawaan, ketik hmm.

Memilih target

Sebelum mem-build Android, Anda harus mengidentifikasi target yang akan di-build. Target mencerminkan platform target yang Anda build. Untuk mengidentifikasi target yang akan di-build, gunakan perintah lunch yang diikuti dengan string yang mewakili target. Contoh:

lunch aosp_cf_x86_64_only_phone-aosp_current-userdebug

Anda akan melihat sinopsis target dan lingkungan build:

============================================
PLATFORM_VERSION_CODENAME=Baklava
PLATFORM_VERSION=Baklava
TARGET_PRODUCT=aosp_cf_x86_64_only_phone
TARGET_BUILD_VARIANT=userdebug
TARGET_ARCH=x86_64
TARGET_ARCH_VARIANT=silvermont
HOST_OS=linux
HOST_OS_EXTRA=Linux-6.10.11-1rodete2-amd64-x86_64-Debian-GNU/Linux-rodete
HOST_CROSS_OS=windows
BUILD_ID=BP1A.250305.020
OUT_DIR=out
============================================

String yang mewakili target memiliki format berikut:

lunch product_name-release_config-build_variant

Komponen string ini adalah:

  • product_name adalah nama produk yang ingin Anda build, seperti aosp_cf_x86_64_only_phone atau aosp_husky. product_name spesifik Anda dapat mengikuti format Anda sendiri untuk perangkat Anda, tetapi format yang digunakan Google untuk perangkatnya memiliki komponen berikut:

    • aosp mengacu pada Project Open Source Android.
    • Secara opsional, cf disertakan jika target dimaksudkan untuk dijalankan dalam emulator Cuttlefish.
    • Nama kode arsitektur dan hardware, seperti x86_64_only_phone atau husky, yang merupakan nama kode untuk Pixel 8 Pro. Untuk mengetahui daftar nama kode untuk perangkat Google, lihat Nama kode perangkat.
  • release_config ditetapkan ke konfigurasi rilis, seperti konfigurasi rilis pengembangan yang disebut aosp_current. Konfigurasi rilis mengidentifikasi fitur dan kode tertentu yang berada di balik flag peluncuran fitur dan diaktifkan atau dinonaktifkan untuk build. Untuk mengetahui informasi selengkapnya tentang konfigurasi rilis, lihat Menetapkan nilai peluncuran tombol fitur.

  • Bagian build_variant dari string dapat berupa salah satu dari tiga nilai dalam tabel berikut:

    build_variant Deskripsi
    user Varian build ini memberikan akses keamanan terbatas dan cocok untuk produksi.
    userdebug Varian build ini membantu developer perangkat memahami performa dan daya rilis dalam pengembangan. Saat mengembangkan dengan build userdebug, ikuti Panduan untuk userdebug.
    eng Varian build ini memiliki waktu build yang lebih cepat dan paling cocok untuk lingkungan pengembangan sehari-hari (dengan performa dan daya yang kurang penting).

Jika Anda menjalankan lunch tanpa argumen apa pun, lunch akan memberikan daftar target umum. Untuk membuat string target kustom, gabungkan elemen string target dengan nama kode hardware. Untuk mengetahui daftar nama kode, lihat Nama kode perangkat.

Melihat target saat ini

Untuk melihat setelan lunch saat ini, jalankan:

$ echo "$TARGET_PRODUCT-$TARGET_BUILD_VARIANT"

Mem-build kode

Jalankan perintah berikut untuk mem-build target Anda. Bergantung pada spesifikasi workstation Anda, build pertama dapat memerlukan waktu kurang dari satu jam hingga beberapa jam. Build berikutnya memerlukan waktu yang jauh lebih singkat.

m

Output build Anda akan muncul di $OUT_DIR. Jika Anda mem-build target yang berbeda, setiap build target akan muncul di $OUT_DIR.

Perintah m mem-build dari bagian atas hierarki, sehingga Anda dapat menjalankan m dari dalam subdirektori. Jika Anda menetapkan variabel lingkungan TOP, perintah m akan menggunakannya. Jika TOP tidak ditetapkan, perintah m akan mencari hierarki dari direktori saat ini, mencoba menemukan bagian atas hierarki.

Perintah m dapat menangani tugas paralel dengan argumen -jN. Jika Anda tidak memberikan argumen -j, sistem build akan otomatis memilih jumlah tugas paralel yang dianggap optimal untuk sistem Anda.

Anda dapat mem-build modul tertentu, bukan image perangkat lengkap, dengan mencantumkan nama modul di command line m. Selain itu, perintah m menyediakan beberapa target semu, yang disebut sasaran. Misalnya, m nothing tidak mem-build apa pun, tetapi mengurai dan memvalidasi struktur build. Untuk mengetahui daftar sasaran yang valid, ketik m help.

Memecahkan masalah error build

Bagian ini berisi petunjuk untuk menangani error build.

Error sistem file hanya baca (Android 17 dan yang lebih baru)

Selama build, hierarki sumber AOSP bersifat hanya baca. Jika build yang Anda jalankan mencoba mengubah hierarki sumber selama konfigurasi produk atau bagian build lainnya, build mungkin gagal dan melaporkan error sistem file hanya baca. Anda dapat menggunakan opsi ini untuk mengubah hierarki sumber menjadi baca-tulis untuk sementara:

  • Untuk mengubah seluruh hierarki sumber menjadi baca-tulis selama build, tambahkan BUILD_BROKEN_SRC_DIR_IS_WRITABLE=true ke lingkungan build.

  • Untuk mengubah sebagian hierarki menjadi baca-tulis selama build, gunakan BUILD_BROKEN_SRC_DIR_RW_ALLOWLIST="path1, path2, ...". Jalur harus berupa jalur direktori tempat penulisan harus diizinkan, relatif terhadap bagian atas ruang kerja.

Versi Java yang salah (Android 8.0 dan yang lebih lama)

Jika Anda mem-build Android 8.0 (API level 26) dan yang lebih lama, m mungkin akan dibatalkan saat menemukan masalah dengan versi Java Anda. Misalnya, Anda mungkin mendapatkan pesan ini:

************************************************************
You are attempting to build with the incorrect version of java.

Your version is: WRONG_VERSION.
The correct version is: RIGHT_VERSION.

Please follow the machine setup instructions at
https://source.android.com/source/initializing.html
************************************************************

Berikut adalah kemungkinan penyebab dan solusinya:

  • JDK yang benar tidak diinstal. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan pengembangan AOSP (2.3-8.0).
  • Ada JDK lain yang sebelumnya diinstal dan muncul di jalur Anda. Tambahkan JDK yang benar ke awal jalur Anda atau hapus JDK yang bermasalah.