Membangun Android

Ikuti petunjuk ini untuk mulai membuat Android.

Menyiapkan lingkungan

Inisialisasi lingkungan dengan skrip envsetup.sh :

source build/envsetup.sh

atau

. build/envsetup.sh

Lihat skrip di platform/build/envsetup.sh untuk deskripsi perintah terkait, termasuk makan siang untuk memilih target perangkat dan tapas untuk membuat aplikasi tanpa paket, seperti referensi TV app .

Anda perlu menerbitkan kembali perintah ini setelah setiap repo sync untuk mengambil perubahan apa pun pada skrip itu. Perhatikan bahwa mengganti source dengan . (satu titik) menyimpan beberapa karakter, dan bentuk pendek lebih umum digunakan dalam dokumentasi.

Skrip envsetup.sh mengimpor beberapa perintah yang memungkinkan Anda bekerja dengan kode sumber Android, termasuk perintah yang digunakan dalam latihan ini.

Untuk melihat daftar lengkap perintah yang tersedia, jalankan:

hmm

Memilih target

makan siang

Pilih target mana yang akan dibangun dengan lunch . lunch product_name - build_variant memilih product_name sebagai produk yang akan dibuat, dan build_variant sebagai varian yang akan dibuat, dan menyimpan pilihan tersebut di lingkungan untuk dibaca oleh pemanggilan selanjutnya dari m dan perintah serupa lainnya.

Konfigurasi yang tepat dapat diteruskan sebagai argumen. Misalnya, perintah berikut mengacu pada build lengkap untuk emulator, dengan semua proses debug diaktifkan:

lunch aosp_arm-eng

Jika dijalankan tanpa argumen, lunch meminta Anda untuk memilih target dari menu, tetapi perhatikan bahwa menu tidak menyertakan semua kemungkinan. Lihat Memilih build perangkat untuk konfigurasi build semua perangkat yang didukung di AOSP, atau bicarakan dengan orang di tim Anda tentang makan siang yang tepat untuk perangkat yang sedang Anda gunakan.

Semua target build berbentuk BUILD-BUILDTYPE , dengan BUILD adalah nama kode yang mengacu pada kombinasi fitur tertentu. BUILDTYPE adalah salah satu dari berikut ini.

Jenis bangunan Menggunakan
pengguna Akses terbatas; cocok untuk produksi
userdebug Seperti pengguna tetapi dengan akses root dan kemampuan debug; sangat dekat dengan kinerja produksi
eng Konfigurasi pengembangan dengan waktu pembuatan yang lebih cepat; paling cocok untuk pengembangan sehari-hari

Build userdebug harus berperilaku sama seperti build user , dengan kemampuan untuk mengaktifkan debugging tambahan yang biasanya melanggar model keamanan platform. Ini membuat build userdebug bagus untuk memahami kinerja dan daya yang digunakan oleh rilis. Saat mengembangkan dengan build userdebug , ikuti pedoman userdebug .

eng build memprioritaskan produktivitas engineering untuk engineer yang bekerja di platform. Build eng mematikan berbagai pengoptimalan yang digunakan untuk memaksimalkan kinerja runtime. Jika tidak, build eng sangat mirip dengan build user dan userdebug sehingga pengembang perangkat dapat melihat bagaimana perilaku kode di lingkungan tersebut.

Untuk melihat pengaturan makan siang saat ini, jalankan perintah:

echo "$TARGET_PRODUCT-$TARGET_BUILD_VARIANT"

Untuk informasi selengkapnya tentang membuat dan menjalankan perangkat keras sebenarnya, lihat Perangkat Berkedip .

tapas

Perintah tapas mengonfigurasi build aplikasi yang tidak dibundel. Itu memilih aplikasi individual untuk dibangun oleh sistem pembangunan Android. Tidak seperti lunch , tapas tidak meminta pembuatan gambar untuk perangkat.

Jalankan tapas help untuk informasi lebih lanjut tentang perintah.

Membangun kode

Bagian ini adalah ringkasan singkat untuk memastikan bahwa penyiapan telah selesai.

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

m

Seperti yang dijelaskan di atas, Anda dapat membuat modul khusus alih-alih gambar perangkat lengkap dengan mencantumkan namanya di baris perintah m Anda. Selain itu, m menyediakan beberapa pseudotarget untuk tujuan khusus. Beberapa contohnya adalah:

  • droid - m droid adalah build normal. Target ini ada di sini karena target default memerlukan nama.
  • all - m all membangun semua yang dilakukan m droid , ditambah semua yang tidak memiliki tag droid . Server build menjalankan ini untuk memastikan bahwa semua yang ada di pohon dan memiliki build file Android.mk .
  • m - Menjalankan build dari atas pohon. Ini berguna karena Anda dapat menjalankan make from dalam subdirektori. Jika Anda memiliki set variabel lingkungan TOP , ia menggunakannya. Jika tidak, ia mencari pohon dari direktori saat ini, mencoba menemukan bagian atas pohon. Anda dapat membangun seluruh pohon kode sumber dengan menjalankan m tanpa argumen atau membangun target spesifik dengan menentukan namanya.
  • mma - Membangun semua modul di direktori saat ini, dan dependensinya.
  • mmma - Membuat semua modul di direktori yang disediakan, dan dependensinya.
  • croot - cd ke atas pohon.
  • clean - m clean menghapus semua file keluaran dan perantara untuk konfigurasi ini. Ini sama dengan rm -rf out/ .

Jalankan m help untuk melihat apa yang disediakan pseudotargets m lainnya.

Menjalankan build

Anda dapat menjalankan build di emulator atau mem-flash-nya di perangkat. Karena Anda telah memilih target pembangunan Anda dengan lunch , itu tidak mungkin berjalan pada target yang berbeda dari tujuan pembuatannya.

Flashing dengan fastboot

Untuk mem-flash perangkat, gunakan fastboot , yang harus disertakan di jalur Anda setelah build berhasil. Lihat Mem-flash perangkat untuk petunjuk.

Meniru perangkat Android

Emulator ditambahkan ke jalur Anda secara otomatis melalui proses build. Untuk menjalankan emulator, ketik:

emulator

Memahami membangun sidik jari

Untuk melacak dan melaporkan masalah yang terkait dengan build Android tertentu, penting untuk memahami sidik jari build. Sidik jari build adalah string unik yang dapat dibaca manusia yang berisi informasi pabrikan yang dikeluarkan untuk setiap build. Lihat deskripsi FINGERPRINT dalam bagian Build Parameters dari Android Compatibility Definition Document (CDD) untuk sintaks yang tepat.

Sidik jari build merepresentasikan implementasi dan revisi Android tertentu. Kunci unik ini memungkinkan pengembang aplikasi dan lainnya melaporkan masalah dengan versi firmware tertentu. Lihat Melaporkan bug untuk proses pelaporan masalah Android.

Sidik jari build merangkum semua detail implementasi Android:

  • API: Android dan asli, serta perilaku API lunak
  • Core API dan beberapa perilaku UI sistem
  • Persyaratan kompatibilitas dan keamanan ditentukan dalam CDD
  • Spesifikasi produk dan setelan fitur penggunaan yang digunakan oleh aplikasi untuk menargetkan perangkat yang memenuhi persyaratan yang diharapkan
  • Implementasi komponen perangkat keras dan perangkat lunak

Lihat CDD untuk perincian lengkap dan Menambahkan Perangkat Baru untuk instruksi membuat perangkat Android yang benar-benar baru.

Memecahkan masalah error build yang umum

Versi Java yang salah

Jika Anda mencoba membuat versi Android yang tidak sesuai dengan versi Java Anda, make dengan pesan seperti:

************************************************************
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 kemungkinan penyebab dan solusinya:

  • Gagal menginstal JDK yang benar seperti yang ditentukan dalam persyaratan JDK . Pastikan Anda telah mengikuti langkah-langkah dalam Menyiapkan lingkungan dan Memilih target .
  • JDK lain yang dipasang sebelumnya muncul di jalur Anda. Tambahkan JDK yang benar ke awal jalur Anda atau hapus JDK yang bermasalah.

Tidak ada izin USB

Secara default di sebagian besar sistem Linux, pengguna yang tidak memiliki hak istimewa tidak dapat mengakses port USB. Jika Anda melihat kesalahan izin ditolak, ikuti petunjuk di Mengonfigurasi akses USB .

Jika ADB sudah berjalan dan tidak dapat terhubung ke perangkat setelah menyiapkan aturan tersebut, Anda dapat mematikannya dengan adb kill-server . Perintah itu menyebabkan ADB memulai ulang dengan konfigurasi baru.