Mencoba pengembangan Android

Tutorial ini memungkinkan Anda mencoba pengembangan sistem operasi Android untuk pertama kalinya.

Menyiapkan pengembangan Android

Sebelum mendownload dan mem-build cabang manifes android-latest-release dari sumber Android, pastikan hardware Anda memenuhi persyaratan yang diperlukan dan bahwa software yang diperlukan telah diinstal dengan benar. Anda juga harus memahami istilah berikut:

Git
Git adalah sistem kontrol versi terdistribusi open source dan gratis. Android menggunakan Git untuk operasi lokal seperti percabangan, commit, perbedaan, dan pengeditan. Untuk mendapatkan bantuan mempelajari Git, lihat dokumentasi Git.
Repo
Repo adalah wrapper Python di sekitar Git yang menyederhanakan 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 menentukan tempat berbagai project Git dalam sumber Android ditempatkan dalam pohon sumber AOSP.

Memenuhi persyaratan hardware

Workstation pengembangan Anda harus memenuhi atau melampaui persyaratan hardware berikut:

  • Sistem x86 64-bit.

  • Setidaknya 400 GB ruang disk kosong untuk mengaktifkan dan mem-build kode (250 GB untuk mengaktifkan + 150 GB untuk mem-build).

  • RAM minimal 64 GB. Google menggunakan mesin 72 core dengan RAM 64 GB untuk mem-build Android. Dengan konfigurasi hardware ini, diperlukan waktu sekitar 40 menit untuk mem-build Android secara penuh dan hanya beberapa menit untuk mem-build Android secara bertahap. Sebaliknya, diperlukan waktu sekitar 6 jam untuk mem-build secara penuh 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 menginstal OpenJDK, Make, Python 3, dan Repo. Cabang rilis terbaru Android dilengkapi dengan versi OpenJDK, Make, dan Python 3 yang telah di-build sebelumnya, sehingga langkah penginstalan tambahan tidak diperlukan. Bagian berikut menjelaskan cara menginstal Repo.

Menginstal 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

Sumber Android terletak dalam kumpulan repositori Git yang dihosting oleh Google. Setiap repositori Git menyertakan seluruh histori sumber Android, termasuk perubahan pada sumber dan waktu 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. 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 terima kredensial Git Anda (nama, alamat email).

  6. Sinkronkan kode sumber:

    repo sync -c -j8

    Jika Anda mengalami masalah selama proses download, lihat Memecahkan masalah dan memperbaiki masalah sinkronisasi.

Mem-build kode

Untuk mem-build kode:

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

    source build/envsetup.sh
  2. Tentukan jenis perangkat target untuk di-build 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 ringkasan target dan lingkungan build Anda:

    ============================================
    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. Build target:

    m

Build pertama diperkirakan akan memakan waktu berjam-jam. Build berikutnya memerlukan waktu yang jauh lebih singkat. Output build Anda akan muncul di $OUT_DIR.

Meluncurkan Cuttlefish

Cuttlefish adalah emulator Android yang digunakan untuk menguji build Anda.

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

    Reboot akan 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 yang didukung Android akan ditampilkan.

Membuat perubahan

Perbarui kode sumber dengan mengikuti daftar perubahan contoh ini changelist.

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

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

    repo start PROJECT_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. Build kode:

    m
  7. Perbarui build di perangkat:

    adb root
    adb remount -R
    adb root
    adb sync
    adb reboot
  8. Pastikan Anda melihat perubahan warna pada perangkat yang dipilih, yang mirip 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 pohon 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 stack trace menunjukkan pengujian yang gagal (testHelloWorld). Pengujian ini ada dalam file bernama DevCodelabTest.java.

  3. 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 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 Git (atau project) sekaligus.

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

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

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

    Android PROJECT_NAME. change
    Test: manual atest
    
  3. Upload perubahan Anda:

    repo upload

    Jika berhasil, Anda akan melihat pesan yang mirip dengan pesan berikut:

    Upload project frameworks/native/ to remote branch android17-release:
     branch PROJECT_NAME. ( 1 commit, Wed Aug 7 09:32:33 2019 -0700):
            ff46b36d android PROJECT_NAME. 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 PROJECT_NAME. change [NEW]
    remote:
    To https://android-review.googlesource.com/platform/frameworks/native
    * [new branch]          PROJECT_NAME. -> refs/for/android17-release
    

Melihat perubahan Anda di Gerrit

Untuk melihat perubahan Anda di Gerrit, buka output link di terminal. Link tersebut mirip dengan yang berikut ini:

https://android-review.googlesource.com/c/platform/frameworks/native/+/1098432

Mengembalikan perubahan Anda

Biasanya, setelah pengujian dan setelah peninjauan dan persetujuan, Anda akan mengirimkan perubahan di Gerrit dan menggabungkannya ke dalam repositori. Namun, untuk tujuan codelab ini, kembalikan pekerjaan Anda:

  1. Di Gerrit, klik Abandon.

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

    repo abandon PROJECT_NAME.
  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 .

Codelab untuk pengembangan platform Android telah selesai.

Dapatkan bantuan

Jika Anda mengalami error selama codelab ini, laporkan menggunakan link Issue Tracker di bagian bawah halaman mana pun. Kirim pertanyaan ke android-building grup.

Ketik ps -A | grep crosvm untuk melihat apakah crosvm sudah berjalan. Jika crossvm berjalan, ketik stop_cvd || true atau kill crosvm proses dengan PID proses.