Anda dapat membantu mengembangkan sistem operasi yang paling banyak diinstal dalam sejarah Bumi. Ya, Anda berada di sini untuk memulai perjalanan menjadi Android insinyur platform.
Meskipun jalur itu menantang, tim Android berusaha untuk menyederhanakan perjalanan kami, setiap rilis. Selain itu, tim melakukan peningkatan setiap hari melalui pekerjaan langsung di Project Open Source Android (AOSP).
Jadi duduklah, nyalakan terminal, dan mari kita buat sejarah.
Sasaran
Misi codelab ini ada dua:
- Untuk memberi Anda sedikit gambaran tentang apa itu alur kerja developer seperti untuk insinyur Android yang bekerja pada platform (sistem operasi).
- Dorong Anda untuk memberikan masukan seputar alat, dokumentasi, dan alur kerja developer Android.
Prasyarat
Daftar persyaratan untuk codelab ini berasal dari persyaratan untuk pengembangan platform umum (AOSP). Untuk mengikuti codelab ini, siapkan hal berikut:
- Workstation Linux fisik yang memenuhi semua persyaratan publik.
- Repositori dan konfigurasi Git yang diperlukan untuk mengedit codebase Android.
Lingkungan
Biasanya, pengguna membangun dan mengembangkan aplikasi secara langsung di workstation. Karena Anda mungkin
bekerja di berbagai terminal, dan banyak perintah
yang digunakan adalah khusus terminal,
Anda harus menjalankannya kembali
di setiap sesi terminal. Secara khusus, Anda bisa
ini termasuk perintah source build/envsetup.sh
dan lunch
.
Siapkan workstation
- Instal paket yang diperlukan di Infrastruktur Cloud.
- Saat masih berada di terminal, instal Repo dan dapatkan kredensial ke semua repositori Git.
Melakukan inisialisasi dan menyinkronkan kode
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 -u https://android.googlesource.com/platform/manifest
Masukkan atau setujui kredensial Git Anda (nama, alamat email).
Sinkronkan kode sumber:
repo sync -j8
Sinkronisasi awal dapat memerlukan waktu satu jam atau lebih.
Setiap checkout repo direpresentasikan oleh file manifes. Anda dapat memiliki lebih dari 1 checkout repo sekaligus, selama repo tersebut ada di direktori yang berbeda. Namun, perhatikan bahwa setiap checkout dan build berjumlah sekitar 300 GB penggunaan (dan terus bertambah), jadi batasi diri Anda untuk 2 checkout repo, atau tingkatkan sistem Anda dengan drive sekunder.
Membangun kode
Untuk membangun Android, Anda harus memilih target
jenis perangkat untuk membangun dengan perintah lunch
. Target adalah permutasi perangkat,
seperti model atau faktor bentuk tertentu.
Target perangkat aosp_cf_x86_64_phone-userdebug
memungkinkan Anda
untuk membuat perangkat Android virtual Cuttlefish untuk
pengujian tanpa perangkat fisik.
Untuk membuat dan mengupdate perangkat fisik, pilih target lain dan ikuti petunjuk untuk mem-flash perangkat.
Siapkan lingkungan Anda untuk membangun perangkat Android dengan menjalankan perintah berikut dari root checkout kode sumber Anda:
source build/envsetup.sh
Teruskan target build ke perintah makan siang, seperti ini:
lunch aosp_cf_x86_64_phone-trunk_staging-userdebug
Build kode dari mana saja di checkout dengan:
m
Build pertama diperkirakan memerlukan waktu berjam-jam. Build berikutnya memerlukan waktu yang signifikan lebih cepat.
Meluncurkan Cuttlefish
Cuttlefish adalah emulator Android yang digunakan untuk menguji build Anda.
Jika belum pernah menginstal Cuttlefish, Anda harus menginstal Ketergantungan pada cumi-cumi. Di jendela terminal, 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
.Luncurkan Cuttlefish:
launch_cvd --daemon
Hubungkan ke perangkat Cuttlefish dengan membuka
https://localhost:8443
di browser web Anda. Anda akan disambut dengan streaming video perangkat yang didukung Android yang baru saja Anda buat.
Membuat perubahan
Perbarui kode sumber dengan mengikuti contoh daftar perubahan ini.
Dari root checkout Anda (direktori
aosp/
), buka Project Gitframeworks/native
:cd frameworks/native
Mulai project sementara dengan perintah ini:
repo start <some-name> .
Edit
SurfaceFlinger.cpp
untuk menyertakan pembaruan dari daftar perubahan di lokasi berikut:aosp/frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp
Temukan baris ini:
void SurfaceFlinger::updateColorMatrixLocked() {
Tambahkan dua baris berikut 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});
Build kode:
m
Update build di perangkat:
adb root
adb remount
adb sync
adb reboot
Pastikan Anda melihat perubahan warna di perangkat yang dipilih, mirip dengan yang ditunjukkan pada Gambar 1.
Gambar 1. Tampilan layar setelah perubahan warna berhasil
Menguji kode Anda
Bagian codelab ini menggunakan pengujian contoh yang ada di hierarki sumber dan gagal. Metode ini menggunakan Atest untuk menjalankan pengujian secara lokal dan menguji kodenya.
Untuk menggunakan pengujian, ikuti petunjuk berikut:
Jalankan:
atest DevCodelabTest
Pengujian akan 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)
Lalu lihat di sini
platform_testing/tests/example/devcodelab
Agar file dapat diedit, ambil nama pengujian di
android.test.example.devcodelab.DevCodelabTest
dan ganti.
dengan/
, untuk mendapatkan hasil ini:src/android/test/example/devcodelab/DevCodelabTest.java
Lalu edit
platform_testing/tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.java
untuk mengganti
Assert.assertTrue(false)
dengan
Assert.assertTrue(true)
Jalankan pengujian lagi untuk memverifikasi bahwa masalah telah diperbaiki:
atest DevCodelabTest
Upload kode Anda untuk ditinjau
Repo menyederhanakan penggunaan Git dengan menggabungkan perintah seperti git clone
untuk berfungsi
di beberapa repositori (atau project) Git sekaligus.
Lihat Source Control Tools untuk mengetahui ringkasan Git dan Repo, dengan tautan ke dokumentasi lengkap tentang menggunakan kode sumber Android. Lihat Repositori AOSP untuk mengetahui daftar lengkap project Git dan masing-masing project (jalur) untuk cabang yang terkait dengan setiap proyek.
Untuk peninjauan kode project di Git, Anda akan menggunakan Gerrit sistem peninjauan kode berbasis web.
Dengan asumsi Anda membuat perubahan di project
frameworks/native
, jalankan perintah ini untuk menguploadnya: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 menyerupai pesan 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
Buka link, yang dicetak di terminal, yang menyerupai link ini:
https://android-review.googlesource.com/c/platform/frameworks/native/+/1098432
Tindakan ini menyelesaikan codelab awal untuk pengembangan platform Android. Lihat Mengirimkan patch untuk langkah selanjutnya, dan untuk detail selengkapnya tentang cara mengembangkan Android, lihat situs ini.
Kembalikan perubahan Anda
Biasanya, pasca-pengujian dan setelah peninjauan dan persetujuan, Anda mengirimkan perubahan Gerrit dan menggabungkannya ke dalam repositori.
Sebagai gantinya, untuk tujuan codelab ini, kembalikan daftar perubahan Anda dengan mengklik Abaikan di Gerrit.
Kemudian, hapus cabang sementara terkait di direktori project
frameworks/native
(atau subdirektorinya):
repo abandon codelab .
Jangan lupa untuk mengembalikan perubahan yang Anda buat ke file pengujian. Karena Anda tidak
repo start
, git commit
, dan repo upload
perubahan, Anda dapat mereset
file tersebut. Dengan asumsi Anda berada di aosp/platform_testing directory
, gunakan
berikut ini untuk mereset file:
git reset HEAD tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.java
git checkout .
Pada tahap ini, Anda sudah selesai! Bagus!
Dapatkan bantuan
Jika Anda mengalami error selama codelab ini, laporkan menggunakan Issue Tracker tautan di bagian bawah laman mana pun. Kirim pertanyaan ke android-building ras.