Tutorial ini memungkinkan Anda mencoba pengembangan sistem operasi Android untuk pertama kalinya.
Menyiapkan pengembangan Android
Sebelum mendownload dan mem-build cabang main
dari sumber Android, pastikan
hardware Anda memenuhi persyaratan yang diperlukan
dan software yang diperlukan diinstal dengan benar. Anda
juga harus memahami istilah berikut:
- Git
- Git adalah sistem kontrol versi terdistribusi gratis dan open source. Android menggunakan Git untuk operasi lokal seperti 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 operasi Git yang kompleks. Repo menggunakan file manifes untuk menggabungkan project Git ke dalam superproject Android.
- file manifes
- File manifes adalah file XML yang menetapkan lokasi berbagai project Git di sumber Android dalam hierarki sumber AOSP.
Persyaratan Meet hardware
Workstation pengembangan Anda harus memenuhi atau melebihi persyaratan hardware berikut:
Sistem x86 64-bit.
Minimal 400 GB ruang disk kosong untuk check out dan mem-build kode (250 GB untuk check out + 150 GB untuk mem-build).
RAM minimum 64 GB. Google menggunakan mesin 72 core dengan RAM 64 GB untuk mem-build Android. Dengan konfigurasi hardware ini, perlu waktu sekitar 40 menit untuk build Android lengkap dan hanya beberapa menit untuk build Android inkremental. Sebaliknya, perlu waktu sekitar 6 jam untuk build lengkap dengan mesin 6 core dengan 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.
Menginstal 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
Menginstal software yang diperlukan
Sebelum dapat menggunakan AOSP, Anda harus sudah menginstal OpenJDK, Make, Python 3, dan Repo. Cabang utama AOSP Android dilengkapi dengan versi OpenJDK, Make, dan Python 3 bawaan, sehingga langkah-langkah penginstalan tambahan tidak diperlukan. Bagian berikut menjelaskan cara menginstal Repo.
Menginstal Repo
Ikuti langkah-langkah berikut untuk menginstal Repo:
Download informasi paket terbaru:
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 akan menunjukkan versi 2.4 atau yang lebih tinggi, misalnya:
repo launcher version 2.45
Mendownload sumber Android
Sumber Android terletak di kumpulan repositori Git yang dihosting oleh Google. Setiap repositori Git menyertakan seluruh histori sumber Android, termasuk perubahan pada sumber dan kapan perubahan tersebut dibuat. Untuk mendownload sumber Android:
Buka direktori utama Anda:
cd ~
Buat subdirektori kerja lokal di dalamnya:
mkdir aosp
Buka direktori:
cd aosp
Lakukan inisialisasi cabang utama kode sumber repositori AOSP (default):
repo init --partial-clone -b main -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 download, lihat Memecahkan masalah dan memperbaiki masalah sinkronisasi.
Membangun kode
Untuk mem-build kode:
Dari dalam direktori kerja, sumberkan skrip
envsetup.sh
untuk menyiapkan lingkungan build:source build/envsetup.sh
Tentukan jenis perangkat target yang akan dibuat dengan perintah
lunch
. Target adalah permutasi perangkat, seperti model atau faktor bentuk tertentu. Tentukan target ini:lunch aosp_cf_x86_64_phone-trunk_staging-userdebug
Anda akan melihat sinopsis target dan lingkungan build:
============================================ PLATFORM_VERSION_CODENAME=VanillaIceCream PLATFORM_VERSION=VanillaIceCream PRODUCT_INCLUDE_TAGS=com.android.mainline TARGET_PRODUCT=aosp_arm TARGET_BUILD_VARIANT=eng TARGET_ARCH=arm TARGET_ARCH_VARIANT=armv7-a-neon TARGET_CPU_VARIANT=generic HOST_OS=linux HOST_OS_EXTRA=Linux-6.5.13-1rodete2-amd64-x86_64-Debian-GNU/Linux-rodete HOST_CROSS_OS=windows BUILD_ID=AOSP.MAIN OUT_DIR=out ============================================
Build target:
m
Build pertama mungkin memerlukan waktu berjam-jam. Build berikutnya memerlukan waktu yang jauh lebih sedikit. 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, mem-build, 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
.Meluncurkan Cuttlefish:
launch_cvd --daemon
Hubungkan ke perangkat Cuttlefish dengan membuka
https://localhost:8443
di browser web Anda. Perangkat yang didukung Android virtual akan ditampilkan.
Membuat perubahan
Perbarui kode sumber dengan mengikuti contoh daftar perubahan 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 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});
Bangun kode:
m
Update build di perangkat:
adb root
adb remount -R
adb root
adb sync
adb reboot
Pastikan Anda melihat perubahan warna pada perangkat yang dipilih, mirip 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 yang disebutDevCodelabTest.java
.Untuk menentukan lokasi pengujian yang akan diperbaiki, tambahkan
WORKING_DIRECTORY/platform_testing/tests/example/devcodelab/src/
ke baris terakhir stack trace 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 masalah telah diperbaiki:
atest DevCodelabTest
Mengupload kode untuk ditinjau
Repo menyederhanakan penggunaan Git dengan menggabungkan perintah seperti git clone
agar dapat berfungsi
di beberapa repositori (atau project) Git sekaligus.
Untuk peninjauan kode project Anda di Git, gunakan sistem peninjauan kode berbasis web Gerrit.
Dengan asumsi Anda membuat perubahan di project
frameworks/native
, jalankan perintah ini untuk mengupload perubahan:cd frameworks/native
repo start codelab .
git add .
git commit
Untuk pesan commit Anda, masukkan kode berikut:
Android codelab change Test: manual atest
Upload perubahan Anda:
repo upload
Jika berhasil, Anda akan melihat pesan yang mirip dengan ini:
Upload project frameworks/native/ to remote branch main: 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/main
Melihat perubahan Anda di Gerrit
Untuk melihat perubahan di Gerrit, buka output link di terminal. Link-nya mirip dengan berikut ini:
https://android-review.googlesource.com/c/platform/frameworks/native/+/1098432
Kembalikan perubahan
Biasanya, setelah pengujian dan peninjauan serta persetujuan, Anda mengirimkan perubahan di Gerrit dan menggabungkannya ke dalam repositori. Sebagai gantinya, untuk tujuan codelab ini, kembalikan 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 ke 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 .
Ini menyelesaikan codelab untuk pengembangan platform Android.
Dapatkan bantuan
Jika Anda menemukan error selama codelab ini, laporkan menggunakan link Issue Tracker 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
berjalan, ketik proses stop_cvd || true
atau kill crosvm
dengan PID proses.