บทแนะนำนี้ช่วยให้คุณได้ลองพัฒนาในระบบปฏิบัติการ Android เป็นครั้งแรก
ตั้งค่าสำหรับการพัฒนา Android
ก่อนดาวน์โหลดและสร้างandroid-latest-releaseกิ่งก้านของไฟล์ Manifest
ของแหล่งที่มาของ Android โปรดตรวจสอบว่าฮาร์ดแวร์ของคุณมีคุณสมบัติตรงตามข้อกำหนดที่จำเป็นและติดตั้งซอฟต์แวร์ที่จำเป็นอย่างถูกต้อง นอกจากนี้ คุณควรทำความคุ้นเคยกับคำศัพท์ต่อไปนี้ด้วย
- Git
- Git เป็นระบบควบคุมเวอร์ชันแบบกระจายที่ไม่มีค่าใช้จ่ายและเป็นโอเพนซอร์ส Android ใช้ Git สำหรับการดำเนินการในเครื่อง เช่น การแยกสาขา การคอมมิต การเปรียบเทียบ และการแก้ไข หากต้องการความช่วยเหลือในการเรียนรู้ Git โปรดดูเอกสารประกอบของ Git
- Repo
- Repo คือ Wrapper ของ Python รอบ Git ที่ช่วยลดความซับซ้อนในการดำเนินการที่ซับซ้อนในที่เก็บ Git หลายรายการ Repo ไม่ได้มาแทนที่ Git สำหรับการดำเนินการควบคุมเวอร์ชันทั้งหมด แต่จะช่วยให้การดำเนินการ Git ที่ซับซ้อนทำได้ง่ายขึ้น Repo ใช้ไฟล์ Manifest เพื่อรวบรวมโปรเจ็กต์ Git ไว้ใน Superproject ของ Android
- ไฟล์ Manifest
- ไฟล์ Manifest คือไฟล์ XML ที่ระบุตำแหน่งของโปรเจ็กต์ Git ต่างๆ ในซอร์สโค้ด Android ภายในโครงสร้างซอร์สโค้ดของ AOSP
ข้อกำหนดของฮาร์ดแวร์ของ Meet
เวิร์กสเตชันสำหรับพัฒนาซอฟต์แวร์ควรมีฮาร์ดแวร์ตรงตามหรือเกินกว่า ข้อกำหนดต่อไปนี้
- ระบบ x86 64 บิต 
- พื้นที่ว่างในดิสก์อย่างน้อย 400 GB เพื่อเช็คเอาต์และสร้างโค้ด (250 GB สำหรับเช็คเอาต์ + 150 GB สำหรับสร้าง) 
- RAM อย่างน้อย 64 GB Google ใช้เครื่องที่มี 72 คอร์และ RAM 64 GB ในการสร้าง Android การกำหนดค่าฮาร์ดแวร์นี้จะใช้เวลาประมาณ 40 นาทีในการสร้าง Android แบบเต็ม และใช้เวลาเพียงไม่กี่นาทีในการสร้าง Android แบบเพิ่ม ในทางตรงกันข้าม การสร้างแบบเต็มด้วยเครื่องที่มี 6 คอร์และ RAM ขนาด 64 GB จะใช้เวลาประมาณ 6 ชั่วโมง 
มีคุณสมบัติตรงตามข้อกำหนดของระบบปฏิบัติการ
เวิร์กสเตชันสำหรับพัฒนาต้องใช้การกระจาย Linux 64 บิตที่มี GNU C Library (glibc) 2.17 ขึ้นไป
ติดตั้งแพ็กเกจที่จำเป็น
หากต้องการติดตั้ง แพ็กเกจที่จำเป็นสำหรับ Ubuntu 18.04 ขึ้นไป ให้เรียกใช้คำสั่งต่อไปนี้
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ติดตั้งซอฟต์แวร์ที่จำเป็น
ก่อนที่จะทำงานกับ AOSP ได้ คุณต้องติดตั้ง OpenJDK, Make, Python 3 และ Repo สาขาการเผยแพร่ล่าสุดของ Android มาพร้อมกับ OpenJDK, Make และ Python 3 เวอร์ชันที่สร้างไว้ล่วงหน้า จึงไม่จำเป็นต้องมีขั้นตอนการติดตั้งเพิ่มเติม ส่วนต่อไปนี้จะอธิบายวิธีการติดตั้ง Repo
ติดตั้ง Repo
ทำตามขั้นตอนต่อไปนี้เพื่อติดตั้ง Repo
- ดาวน์โหลดข้อมูลแพ็กเกจปัจจุบัน - sudo apt-get update
- เรียกใช้คำสั่งต่อไปนี้เพื่อติดตั้งโปรแกรมเปิดใช้ Repo - sudo apt-get install repo- ตัวเรียกใช้ Repo มีสคริปต์ Python ที่เริ่มต้นการชำระเงิน และดาวน์โหลดเครื่องมือ Repo แบบเต็ม - หากสำเร็จ ให้ข้ามไปยังขั้นตอนที่ 4 
- (ไม่บังคับ) ติดตั้ง Repo ด้วยตนเองโดยใช้ชุดคำสั่งต่อไปนี้ - 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- คำสั่ง 3 รายการแรกจะตั้งค่าไฟล์ชั่วคราว ดาวน์โหลด Repo ไปยังไฟล์ และ ยืนยันว่าคีย์ที่ระบุตรงกับคีย์ที่จำเป็น หากคำสั่งเหล่านี้ สำเร็จ คำสั่งสุดท้ายจะติดตั้งตัวเรียกใช้ Repo 
- ตรวจสอบเวอร์ชันของ Repo Launcher โดยทำดังนี้ - repo version- เอาต์พุตควรระบุเวอร์ชัน 2.4 ขึ้นไป เช่น - repo launcher version 2.45
ดาวน์โหลดซอร์สโค้ด Android
ซอร์สโค้ดของ Android อยู่ในคอลเล็กชันที่เก็บ Git ที่ Google โฮสต์ ที่เก็บ Git แต่ละรายการจะมีประวัติทั้งหมดของแหล่งที่มาของ Android รวมถึงการเปลี่ยนแปลงในแหล่งที่มาและเวลาที่ทำการเปลี่ยนแปลง วิธีดาวน์โหลด ซอร์สโค้ด Android
- ไปยังไดเรกทอรีหน้าแรกโดยใช้คำสั่งต่อไปนี้ - cd ~
- สร้างไดเรกทอรีย่อยที่ใช้งานในเครื่องภายในไดเรกทอรีนั้น - mkdir aosp
- ไปที่ไดเรกทอรีโดยใช้คำสั่งต่อไปนี้ - cd aosp
- เริ่มต้นใช้งานสาขาการเผยแพร่ล่าสุดของซอร์สโค้ดที่เก็บ AOSP ( - android-latest-release)- repo init --partial-clone -b android-latest-release -u https://android.googlesource.com/platform/manifest
- ป้อนหรือยอมรับข้อมูลเข้าสู่ระบบ Git (ชื่อ อีเมล) 
- ซิงค์ซอร์สโค้ด - repo sync -c -j8- หากพบปัญหาขณะดาวน์โหลด โปรดดูแก้ปัญหาการซิงค์ 
สร้างโค้ด
วิธีสร้างโค้ด
- จากภายในไดเรกทอรีที่ทำงานอยู่ ให้เรียกใช้สคริปต์ - envsetup.shเพื่อตั้งค่า สภาพแวดล้อมการสร้าง- source build/envsetup.sh
- ระบุประเภทอุปกรณ์เป้าหมายที่จะสร้างด้วยคำสั่ง - lunchเป้าหมายคือการเรียงสับเปลี่ยนอุปกรณ์ เช่น รุ่นหรือรูปแบบเฉพาะ ระบุเป้าหมายต่อไปนี้- lunch aosp_cf_x86_64_only_phone-aosp_current-userdebug- คุณควรเห็นข้อมูลสรุปของสภาพแวดล้อมเป้าหมายและสภาพแวดล้อมการสร้างดังนี้ - ============================================ 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 ============================================
- สร้างเป้าหมาย - m
การสร้างครั้งแรกอาจใช้เวลาหลายชั่วโมง การสร้างครั้งต่อๆ ไปจะใช้เวลาน้อยลงอย่างมาก
 เอาต์พุตของการสร้างจะปรากฏใน
$OUT_DIR
เปิด Cuttlefish
Cuttlefish คือโปรแกรมจำลอง Android ที่ใช้ทดสอบบิลด์
- เรียกใช้คำสั่งต่อไปนี้เพื่อดาวน์โหลด สร้าง และติดตั้งแพ็กเกจ Debian ของโฮสต์ - 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- การรีบูตจะทริกเกอร์การติดตั้งโมดูลเคอร์เนลเพิ่มเติมและใช้ - udevกฎ
- เปิดใช้ Cuttlefish - launch_cvd --daemon
- เชื่อมต่อกับอุปกรณ์ Cuttlefish โดยไปที่ - https://localhost:8443ใน เว็บเบราว์เซอร์ ระบบจะแสดงอุปกรณ์เสมือนที่ใช้ Android
ทำการเปลี่ยนแปลง
อัปเดตซอร์สโค้ดตามรายการการเปลี่ยนแปลงตัวอย่างนี้
- จากรูทของการชำระเงิน ( - aosp/ไดเรกทอรี) ให้ไปที่- frameworks/nativeโปรเจ็กต์ Git- cd frameworks/native
- เริ่มโปรเจ็กต์ชั่วคราวด้วยคำสั่งต่อไปนี้ - repo start PROJECT_NAME.
- ใช้โปรแกรมแก้ไขเพื่อแก้ไข - SurfaceFlinger.cppในตำแหน่งต่อไปนี้- aosp/frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp
- ค้นหาบรรทัดนี้ - void SurfaceFlinger::updateColorMatrixLocked() {
- เพิ่มบรรทัดนี้ที่จุดเริ่มต้นของ - 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});
- สร้างโค้ด - m
- อัปเดตบิลด์ในอุปกรณ์โดยทำดังนี้ - adb root- adb remount -R- adb root- adb sync- adb reboot
- ตรวจสอบว่าคุณเห็นการเปลี่ยนสีในอุปกรณ์ที่เลือกคล้ายกับที่แสดงในรูปที่ 1 - รูปที่ 1 ลักษณะหน้าจอหลังจากเปลี่ยนสีสำเร็จ 
แก้ไขการทดสอบ
ส่วนนี้ของ Codelab ใช้การทดสอบตัวอย่างที่อยู่ในโครงสร้างแหล่งที่มา และไม่สำเร็จ
หากต้องการเรียกใช้ แก้จุดบกพร่อง และแก้ไขการทดสอบ ให้ทำตามวิธีการต่อไปนี้
- เรียกใช้ - atest DevCodelabTest- การทดสอบล้มเหลว 
- ตรวจสอบสแต็กเทรซของการทดสอบที่ไม่สำเร็จ - 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)- บรรทัดสุดท้ายของ Stack Trace แสดงการทดสอบที่ไม่ผ่าน ( - testHelloWorld) การทดสอบนี้อยู่ในไฟล์ชื่อ- DevCodelabTest.java
- หากต้องการระบุตำแหน่งของการทดสอบที่จะแก้ไข ให้ต่อท้าย - WORKING_DIRECTORY/platform_testing/tests/example/devcodelab/src/ที่บรรทัดสุดท้ายของ Stack Trace จนถึงและรวมถึงชื่อของไฟล์ การทดสอบ ดังนั้น- android.test.example.devcodelab.DevCodelabTestจึงกลายเป็น- WORKING_DIRECTORY/platform_testing/tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.java
- แก้ไข - platform_testing/tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.javaและแทนที่- Assert.assertTrue(false)ด้วย- Assert.assertTrue(true)
- เรียกใช้การทดสอบอีกครั้งเพื่อยืนยันว่าคุณได้แก้ไขปัญหาแล้ว - atest DevCodelabTest
อัปโหลดโค้ดเพื่อรับการตรวจสอบ
Repo ช่วยให้การใช้ Git ง่ายขึ้นด้วยการรวมคำสั่งต่างๆ เช่น git clone เพื่อให้ทำงาน
ในที่เก็บ Git (หรือโปรเจ็กต์) จำนวนมากได้พร้อมกัน
หากต้องการตรวจสอบโค้ดของโปรเจ็กต์ใน Git ให้ใช้ระบบตรวจสอบโค้ดบนเว็บ Gerrit
- สมมติว่าคุณทำการเปลี่ยนแปลงในโปรเจ็กต์ - frameworks/nativeให้เรียกใช้คำสั่งต่อไปนี้เพื่ออัปโหลดการเปลี่ยนแปลง- cd frameworks/native- repo start PROJECT_NAME.- git add .- git commit
- สำหรับข้อความคอมมิต ให้ป้อนข้อความต่อไปนี้ - Android PROJECT_NAME. change Test: manual atest
- อัปโหลดการเปลี่ยนแปลง - repo upload- หากดำเนินการสำเร็จ คุณจะเห็นข้อความที่คล้ายกับข้อความนี้ - Upload project frameworks/native/ to remote branch android16-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/android16-release
ดูการเปลี่ยนแปลงใน Gerrit
หากต้องการดูการเปลี่ยนแปลงใน Gerrit ให้ไปที่เอาต์พุตลิงก์ในเทอร์มินัล ลิงก์จะมีลักษณะคล้ายกับตัวอย่างต่อไปนี้
https://android-review.googlesource.com/c/platform/frameworks/native/+/1098432
เปลี่ยนกลับการเปลี่ยนแปลง
โดยปกติแล้ว หลังการทดสอบและเมื่อได้รับการตรวจสอบและอนุมัติ คุณจะส่งการเปลี่ยนแปลงใน Gerrit และผสานรวมเข้ากับที่เก็บ แต่เพื่อวัตถุประสงค์ของ โค้ดแล็บนี้ ให้เปลี่ยนกลับงานของคุณดังนี้
- ใน Gerrit ให้คลิกยกเลิก 
- ทิ้งกิ่งชั่วคราวที่เชื่อมโยงในไดเรกทอรีโปรเจ็กต์ - frameworks/native(หรือไดเรกทอรีย่อย)- repo abandon PROJECT_NAME.
- เปลี่ยนการเปลี่ยนแปลงที่คุณทำกับไฟล์ทดสอบกลับ เนื่องจากคุณไม่ได้เรียกใช้ - repo start,- git commitและ- repo uploadในการเปลี่ยนแปลงการทดสอบ คุณจึงรีเซ็ต ไฟล์ได้ สมมติว่าคุณอยู่ใน- aosp/platform_testing directoryให้ใช้คำสั่งต่อไปนี้เพื่อรีเซ็ตไฟล์- git reset HEAD tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.java- git checkout .
ซึ่งจะเป็นการสิ้นสุด Codelab สำหรับการพัฒนาแพลตฟอร์ม Android
รับความช่วยเหลือ
หากพบข้อผิดพลาดระหว่าง Codelab นี้ ให้รายงานโดยใช้ลิงก์ เครื่องมือติดตามปัญหา ที่ด้านล่างของหน้าใดก็ได้ ส่งคำถามไปที่กลุ่ม android-building
พิมพ์ ps -A | grep crosvm เพื่อดูว่า crosvm ทำงานอยู่หรือไม่ หาก crossvm ทำงานอยู่ ให้พิมพ์ stop_cvd || true หรือ kill crosvm ตามด้วย PID ของกระบวนการ