Mencoba pengembangan Android

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:

  1. Download informasi paket saat ini:

    sudo apt-get update
  2. 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.

  3. (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.

  4. 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:

  1. Buka direktori utama Anda:

    cd ~
  2. Buat subdirektori kerja lokal di dalamnya:

    mkdir aosp
  3. Buka direktori:

    cd aosp
  4. 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
  5. Masukkan atau setujui kredensial Git Anda (nama, alamat email).

  6. 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:

  1. Dari dalam direktori kerja Anda, ambil skrip envsetup.sh untuk menyiapkan lingkungan build Anda:

    source build/envsetup.sh
  2. 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
    ============================================
    
  3. 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.

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

  2. Luncurkan Cuttlefish:

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

  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. Gunakan editor Anda untuk mengedit SurfaceFlinger.cpp di lokasi berikut:

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

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

    m
  7. Update build di perangkat:

    adb root
    adb remount -R
    adb root
    adb sync
    adb reboot
  8. Verifikasi bahwa Anda melihat perubahan warna pada perangkat yang dipilih serupa dengan yang ditampilkan pada Gambar 1.

    Contoh perubahan warna yang berhasil

    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:

  1. Jalankan:

    atest DevCodelabTest

    Pengujian gagal.

  2. 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 bernama DevCodelabTest.java.

  3. 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 menjadi WORKING_DIRECTORY/platform_testing/tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.java.

  4. Edit platform_testing/tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.java dan ganti Assert.assertTrue(false) dengan Assert.assertTrue(true)

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

  1. 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
  2. Untuk pesan commit Anda, masukkan yang berikut:

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

  1. Di Gerrit, klik Abandon.

  2. Batalkan cabang sementara terkait di direktori project frameworks/native (atau subdirektorinya):

    repo abandon codelab .
  3. Kembalikan perubahan yang Anda buat pada file pengujian. Karena Anda tidak menjalankan repo start, git commit, dan repo upload pada perubahan pengujian, Anda dapat mereset file itu sendiri. Dengan asumsi Anda berada di aosp/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.