Mencoba pengembangan Android

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:

  1. Download informasi paket terbaru:

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

  1. Buka direktori utama Anda:

    cd ~
    
  2. Buat subdirektori kerja lokal di dalamnya:

    mkdir aosp
    
  3. Buka direktori:

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

    repo init --partial-clone -b main -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 download, lihat Memecahkan masalah dan memperbaiki masalah sinkronisasi.

Membangun kode

Untuk mem-build kode:

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

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

  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
    

    Mulai ulang memicu penginstalan modul kernel tambahan dan menerapkan aturan udev.

  2. Meluncurkan Cuttlefish:

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

  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 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. Bangun kode:

    m
    
  7. Update build di perangkat:

    adb root
    adb remount -R
    adb root
    adb sync
    adb reboot
    
  8. Pastikan Anda melihat perubahan warna pada perangkat yang dipilih, 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 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 yang disebut 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 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.

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

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:

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

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.