Codelab developer Android

Anda dapat membantu mengembangkan sistem operasi yang paling banyak diinstal dalam sejarah Bumi. Ya, Anda berada di sini untuk memulai perjalanan menjadi engineer platform Android.

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:

  1. Untuk memberi Anda sedikit gambaran tentang apa itu alur kerja developer seperti untuk insinyur Android yang bekerja pada platform (sistem operasi).
  2. Kami mendorong Anda untuk memberikan masukan tentang 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 berikut ini:

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, perintah ini mencakup perintah source build/envsetup.sh dan lunch.

Menyiapkan workstation

  1. Instal paket yang diperlukan di workstation Anda.
  2. Saat masih berada di terminal, instal Repo dan dapatkan kredensial ke semua repositori Git.

Melakukan inisialisasi dan menyinkronkan kode

  1. Buka direktori utama Anda:

    cd ~
  2. Buat subdirektori yang berfungsi secara lokal di dalamnya:

    mkdir aosp
  3. Buka direktori:

    cd aosp
  4. Lakukan inisialisasi cabang utama kode sumber repositori AOSP (default):

    repo init -u https://android.googlesource.com/platform/manifest
  5. Masukkan atau terima kredensial Git Anda (nama, alamat email).

  6. Sinkronkan kode sumber:

    repo sync -j8

Sinkronisasi awal dapat memerlukan waktu satu jam atau lebih.

Setiap checkout repo diwakili oleh file manifes. Diperbolehkan melakukan lebih dari 1 checkout repo sekaligus, selama ada di direktori yang berbeda. Tetapi perhatikan bahwa setiap {i> checkout<i} dan {i>build<i} berjumlah penggunaan sekitar 300 GB (dan terus bertambah), jadi batasi hingga 2 checkout repo, atau menambah sistem Anda dengan {i>drive<i} sekunder.

Mem-build 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 mem-build dan mengupdate perangkat fisik, pilih target lain dan ikuti petunjuk untuk mem-flash perangkat.

  1. Siapkan lingkungan Anda untuk mem-build perangkat Android dengan menjalankan perintah berikut dari root checkout kode sumber Anda:

    source build/envsetup.sh
  2. Teruskan target build ke perintah makan siang, seperti ini:

    lunch aosp_cf_x86_64_phone-trunk_staging-userdebug
  3. Build kode dari mana saja di checkout dengan:

    m

Build pertama diperkirakan memerlukan waktu berjam-jam. Build berikutnya memerlukan waktu yang jauh lebih sedikit.

Meluncurkan Cuttlefish

Cuttlefish adalah emulator Android yang digunakan untuk menguji build Anda.

  1. Jika belum pernah menginstal Cuttlefish, Anda harus menginstal dependensi Cuttlefish yang diperlukan. Di jendela terminal, jalankan perintah berikut untuk mengunduh, membangun, dan memasang paket Debian {i>host<i}:

    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

    Reboot akan memicu penginstalan modul kernel tambahan dan menerapkan udev aturan.

  2. Luncurkan Cuttlefish:

    launch_cvd --daemon
    
  3. 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.

  1. Dari root checkout (direktori aosp/), buka project Git frameworks/native:

    cd frameworks/native
  2. Mulai project sementara dengan perintah ini:

    repo start <some-name> .
  3. Edit SurfaceFlinger.cpp untuk menyertakan pembaruan dari daftar perubahan di lokasi berikut:

    aosp/frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp
    
  4. Temukan baris ini:

    void SurfaceFlinger::updateColorMatrixLocked() {
    
  5. Tambahkan dua 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});
    
  6. Build kode:

    m
  7. 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.

Contoh perubahan warna yang berhasil

Gambar 1. Tampilan layar setelah perubahan warna berhasil

Menguji kode Anda

Bagian codelab ini menggunakan contoh pengujian 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:

  1. Jalankan:

    atest DevCodelabTest
  2. 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)
  3. Lalu lihat di sini

    platform_testing/tests/example/devcodelab
    
  4. 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
    
  5. Kemudian, edit

    platform_testing/tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.java
    

    untuk mengganti

    Assert.assertTrue(false)
    

    dengan

    Assert.assertTrue(true)
    
  6. 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 agar dapat 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 setiap project (jalur) untuk cabang yang terkait dengan setiap project.

Untuk peninjauan kode project di Git, Anda akan menggunakan sistem peninjauan kode berbasis web Gerrit.

  1. Dengan asumsi Anda membuat perubahan di project frameworks/native, jalankan perintah ini untuk menguploadnya:

    cd frameworks/native
    repo start codelab .
    git add .
    git commit
  2. Untuk pesan commit Anda, masukkan kode berikut:

    Android codelab change
    Test: manual atest
    
  3. 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

Buka link yang dicetak di terminal, yang terlihat seperti 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

Biasanya, setelah pengujian dan peninjauan serta persetujuan, Anda mengirimkan perubahan di 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 juga untuk mengembalikan perubahan yang Anda buat pada 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 hal berikut 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 grup android-building.