Tutorial ini memungkinkan Anda mencoba pengembangan sistem operasi Android untuk pertama kalinya.
Menyiapkan pengembangan Android
Sebelum mendownload dan membuat cabang manifes android-latest-release
dari
sumber Android, pastikan hardware Anda memenuhi
persyaratan yang diperlukan dan
software yang diperlukan telah diinstal dengan benar. Anda juga harus
memahami istilah-istilah berikut:
- Git
- Git adalah sistem kontrol versi terdistribusi open source dan gratis. Android menggunakan Git untuk operasi lokal seperti pembuatan cabang, commit, perbedaan, dan pengeditan. Untuk mendapatkan bantuan dalam mempelajari Git, lihat dokumentasi Git.
- Repo
- Repo adalah wrapper Python di sekitar Git yang menyederhanakan pelaksanaan operasi kompleks di beberapa repositori Git. Repo tidak menggantikan Git untuk semua operasi kontrol versi, tetapi hanya mempermudah penyelesaian operasi Git yang kompleks. Repo menggunakan file manifes untuk menggabungkan project Git ke dalam project super Android.
- file manifes
- File manifes adalah file XML yang menentukan lokasi berbagai project Git dalam sumber Android di dalam struktur sumber AOSP.
Persyaratan Meet hardware
Workstation pengembangan Anda harus memenuhi atau melampaui persyaratan hardware berikut:
Sistem x86 64-bit.
Ruang disk kosong minimal 400 GB untuk meng-checkout dan membangun kode (250 GB untuk meng-checkout + 150 GB untuk membangun).
RAM minimal 64 GB. Google menggunakan mesin 72-core dengan RAM 64 GB untuk membangun Android. Dengan konfigurasi hardware ini, perlu waktu sekitar 40 menit untuk build penuh Android dan hanya beberapa menit untuk build inkremental Android. Sebaliknya, perlu waktu sekitar 6 jam untuk build lengkap dengan komputer 6-core dan RAM 64 GB.
Memenuhi persyaratan sistem operasi
Workstation pengembangan Anda harus menjalankan distribusi Linux 64-bit apa pun dengan GNU C Library (glibc) 2.17 atau yang lebih baru.
Instal paket yang diperlukan
Untuk menginstal paket yang diperlukan untuk Ubuntu 18.04 atau yang lebih baru, jalankan perintah berikut:
sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev libc6-dev-i386 x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig
Instal software yang diperlukan
Sebelum dapat menggunakan AOSP, Anda harus menginstal OpenJDK, Make, Python 3, dan Repo. Cabang rilis terbaru Android dilengkapi dengan versi OpenJDK, Make, dan Python 3 yang telah dibuat sebelumnya, sehingga langkah-langkah penginstalan tambahan tidak diperlukan. Bagian berikut menjelaskan cara menginstal Repo.
Instal Repo
Ikuti langkah-langkah berikut untuk menginstal Repo:
Download informasi paket saat ini:
sudo apt-get update
Jalankan perintah berikut untuk menginstal peluncur Repo:
sudo apt-get install repo
Peluncur Repo menyediakan skrip Python yang menginisialisasi checkout dan mendownload alat Repo lengkap.
Jika berhasil, lanjutkan ke langkah 4.
(opsional) Instal Repo secara manual menggunakan serangkaian perintah berikut:
export REPO=$(mktemp /tmp/repo.XXXXXXXXX) curl -o ${REPO} https://storage.googleapis.com/git-repo-downloads/repo gpg --recv-keys 8BB9AD793E8E6153AF0F9A4416530D5E920F5C65 curl -s https://storage.googleapis.com/git-repo-downloads/repo.asc | gpg --verify - ${REPO} && install -m 755 ${REPO} ~/bin/repo
Tiga perintah pertama menyiapkan file sementara, mendownload Repo ke file, dan memverifikasi bahwa kunci yang diberikan cocok dengan kunci yang diperlukan. Jika perintah ini berhasil, perintah terakhir akan menginstal peluncur Repo.
Verifikasi versi peluncur Repo:
repo version
Output harus menunjukkan versi 2.4 atau yang lebih tinggi, misalnya:
repo launcher version 2.45
Mendownload sumber Android
Kode sumber Android berada di kumpulan repositori Git yang dihosting oleh Google. Setiap repositori Git mencakup seluruh histori sumber Android, termasuk perubahan pada sumber dan kapan perubahan tersebut dilakukan. Untuk mendownload sumber Android:
Buka direktori utama Anda:
cd ~
Buat subdirektori kerja lokal di dalamnya:
mkdir aosp
Buka direktori:
cd aosp
Lakukan inisialisasi cabang rilis terbaru kode sumber repositori AOSP (
android-latest-release
):repo init --partial-clone -b android-latest-release -u https://android.googlesource.com/platform/manifest
Masukkan atau setujui kredensial Git Anda (nama, alamat email).
Sinkronkan kode sumber:
repo sync -c -j8
Jika Anda mengalami masalah selama mendownload, lihat Memecahkan masalah dan memperbaiki masalah sinkronisasi.
Bangun kode
Untuk membuat kode:
Dari dalam direktori kerja Anda, ambil skrip
envsetup.sh
untuk menyiapkan lingkungan build Anda:source build/envsetup.sh
Tentukan jenis perangkat target untuk membuat dengan perintah
lunch
. Target adalah permutasi perangkat, seperti model atau faktor bentuk tertentu. Tentukan target ini: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 ============================================
Buat target:
m
Build pertama akan memakan waktu berjam-jam. Build berikutnya memerlukan waktu yang jauh lebih singkat. Output build Anda akan muncul di
$OUT_DIR
.
Luncurkan Cuttlefish
Cuttlefish adalah emulator Android yang digunakan untuk menguji build Anda.
Jalankan perintah berikut untuk mendownload, membangun, dan menginstal paket Debian host:
sudo apt install -y git devscripts equivs config-package-dev debhelper-compat golang curl
git clone https://github.com/google/android-cuttlefish
cd android-cuttlefish
for dir in base frontend; do pushd $dir # Install build dependencies sudo mk-build-deps -i dpkg-buildpackage -uc -us popd done
sudo dpkg -i ./cuttlefish-base_*_*64.deb || sudo apt-get install -f
sudo dpkg -i ./cuttlefish-user_*_*64.deb || sudo apt-get install -f
sudo usermod -aG kvm,cvdnetwork,render $USER
sudo reboot
Mulai ulang memicu penginstalan modul kernel tambahan dan menerapkan aturan
udev
.Luncurkan Cuttlefish:
launch_cvd --daemon
Hubungkan ke perangkat Cuttlefish dengan membuka
https://localhost:8443
di browser web Anda. Perangkat virtual berteknologi Android Anda akan ditampilkan.
Membuat perubahan
Perbarui kode sumber dengan mengikuti daftar perubahan contoh ini.
Dari root checkout (direktori
aosp/
), buka project Gitframeworks/native
:cd frameworks/native
Mulai project sementara dengan perintah ini:
repo start <some-name> .
Gunakan editor Anda untuk mengedit
SurfaceFlinger.cpp
di lokasi berikut:aosp/frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp
Temukan baris ini:
void SurfaceFlinger::updateColorMatrixLocked() {
Tambahkan baris ini di awal
updateColorMatrixLocked()
:mClientColorMatrix = mat4(vec4{1.0f, 0.0f, 0.0f, 0.0f}, vec4{0.0f, -1.0f, 0.0f, 0.0f}, vec4{0.0f, 0.0f, -1.0f, 0.0f}, vec4{0.0f, 1.0f, 1.0f, 1.0f});
Buat kode:
m
Update build di perangkat:
adb root
adb remount -R
adb root
adb sync
adb reboot
Verifikasi bahwa Anda melihat perubahan warna pada perangkat yang dipilih serupa dengan yang ditampilkan pada Gambar 1.
Gambar 1. Tampilan layar setelah perubahan warna berhasil
Memperbaiki pengujian
Bagian codelab ini menggunakan contoh pengujian yang ada di hierarki sumber dan gagal.
Untuk menjalankan, men-debug, dan memperbaiki pengujian, ikuti petunjuk berikut:
Jalankan:
atest DevCodelabTest
Pengujian gagal.
Periksa stack trace pengujian yang gagal:
STACKTRACE: java.lang.AssertionError at org.junit.Assert.fail(Assert.java:87) at org.junit.Assert.assertTrue(Assert.java:42) at org.junit.Assert.assertTrue(Assert.java:53) at android.test.example.devcodelab.DevCodelabTest.testHelloWorld(DevCodelabTest.java:29)
Baris terakhir pelacakan tumpukan menunjukkan pengujian yang gagal (
testHelloWorld
). Pengujian ini ada dalam file bernamaDevCodelabTest.java
.Untuk menentukan lokasi pengujian yang perlu diperbaiki, tambahkan
WORKING_DIRECTORY/platform_testing/tests/example/devcodelab/src/
ke baris terakhir rekaman aktivitas stack hingga dan termasuk nama file pengujian. Jadi,android.test.example.devcodelab.DevCodelabTest
menjadiWORKING_DIRECTORY/platform_testing/tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.java
.Edit
platform_testing/tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.java
dan gantiAssert.assertTrue(false)
denganAssert.assertTrue(true)
Jalankan pengujian lagi untuk memverifikasi bahwa Anda telah memperbaiki masalah:
atest DevCodelabTest
Mengupload kode Anda untuk ditinjau
Repo menyederhanakan penggunaan Git dengan menggabungkan perintah seperti git clone
untuk bekerja di beberapa repositori (atau project) Git sekaligus.
Untuk meninjau kode project Anda di Git, gunakan sistem peninjauan kode berbasis web Gerrit.
Dengan asumsi Anda membuat perubahan di project
frameworks/native
, jalankan perintah berikut untuk mengupload perubahan Anda:cd frameworks/native
repo start codelab .
git add .
git commit
Untuk pesan commit Anda, masukkan yang berikut:
Android codelab change Test: manual atest
Upload perubahan Anda:
repo upload
Jika berhasil, Anda akan melihat pesan yang mirip dengan yang berikut ini:
Upload project frameworks/native/ to remote branch android16-release: branch codelab ( 1 commit, Wed Aug 7 09:32:33 2019 -0700): ff46b36d android codelab change to https://android-review.googlesource.com/ (y/N)? y remote: Processing changes: refs: 1, new: 1, done remote: remote: SUCCESS remote: remote: https://android-review.googlesource.com/c/platform/frameworks/native/+/1098432 android codelab change [NEW] remote: To https://android-review.googlesource.com/platform/frameworks/native * [new branch] codelab -> refs/for/android16-release
Melihat perubahan Anda di Gerrit
Untuk melihat perubahan Anda di Gerrit, buka link output di terminal. Link-nya mirip dengan berikut ini:
https://android-review.googlesource.com/c/platform/frameworks/native/+/1098432
Mengembalikan perubahan Anda
Biasanya, setelah pengujian dan setelah peninjauan dan persetujuan, Anda mengirimkan perubahan di Gerrit dan menggabungkannya ke dalam repositori. Sebagai gantinya, untuk tujuan codelab ini, batalkan pekerjaan Anda:
Di Gerrit, klik Abandon.
Batalkan cabang sementara terkait di direktori project
frameworks/native
(atau subdirektorinya):repo abandon codelab .
Kembalikan perubahan yang Anda buat pada file pengujian. Karena Anda tidak menjalankan
repo start
,git commit
, danrepo upload
pada perubahan pengujian, Anda dapat mereset file itu sendiri. Dengan asumsi Anda berada diaosp/platform_testing directory
, gunakan perintah berikut untuk mereset file:git reset HEAD tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.java
git checkout .
Dengan demikian, codelab untuk pengembangan platform Android telah selesai.
Dapatkan bantuan
Jika Anda mengalami error selama codelab ini, laporkan error tersebut menggunakan link Pelacak Masalah di bagian bawah halaman mana pun. Kirim pertanyaan ke grup android-building.
Ketik ps -A | grep crosvm
untuk melihat apakah crosvm
sudah berjalan. Jika crossvm
sedang berjalan, ketik proses stop_cvd || true
atau kill crosvm
dengan PID proses.