คุณสามารถช่วยพัฒนาระบบปฏิบัติการที่ติดตั้งอย่างกว้างขวางที่สุดในประวัติศาสตร์ของโลกได้ ใช่ คุณมาที่นี่เพื่อเริ่มต้นการเดินทางสู่การเป็นวิศวกรแพลตฟอร์ม Android
แม้ว่าเส้นทางจะท้าทาย แต่ทีม Android ก็มุ่งมั่นที่จะทำให้การเดินทางของคุณง่ายขึ้นในทุกครั้งที่เผยแพร่ และทีมงานทำการปรับปรุงทุกวันผ่านการทำงานโดยตรงในโครงการ Android Open Source (AOSP)
เอนหลัง ยิงเทอร์มินัล และสร้างประวัติศาสตร์กันเถอะ
เป้าหมาย
ภารกิจของ Codelab นี้มี 2 ประการ:
- เพื่อให้คุณได้เห็นคร่าวๆ ว่าขั้นตอนการทำงานของนักพัฒนาซอฟต์แวร์เป็นอย่างไรสำหรับวิศวกร Android ที่ทำงานบนแพลตฟอร์ม (ระบบปฏิบัติการ)
- สนับสนุนให้คุณแสดง ความคิดเห็น เกี่ยวกับเครื่องมือ เอกสาร และขั้นตอนการทำงานของนักพัฒนาซอฟต์แวร์
ข้อกำหนดเบื้องต้น
รายการข้อกำหนดสำหรับ Codelab นี้มาจากข้อกำหนดสำหรับการพัฒนาแพลตฟอร์มทั่วไป ( AOSP ) หากต้องการใช้ Codelab นี้ ให้ตั้งค่าดังต่อไปนี้:
- เวิร์กสเตชัน Physical Linux ตรงตาม ข้อกำหนดสาธารณะ ทั้งหมด
- จำเป็นต้องมี การกำหนดค่า Repo และ Git เพื่อแก้ไขโค้ดเบสของ Android
สิ่งแวดล้อม
โดยทั่วไปแล้ว ผู้ใช้จะสร้างและพัฒนาบนเวิร์กสเตชันโดยตรง เนื่องจากคุณอาจทำงานในเทอร์มินัลต่างๆ และคำสั่งหลายคำสั่งที่ใช้เป็นคำสั่งเฉพาะของเทอร์มินัล คุณจึงต้องรันคำสั่งเหล่านั้นใหม่ในแต่ละเซสชันของเทอร์มินัล โดยเฉพาะอย่างยิ่ง สิ่งเหล่านี้รวมถึงคำสั่ง source build/envsetup.sh
และ lunch
ตั้งค่าเวิร์กสเตชัน
- ติดตั้งแพ็คเกจที่จำเป็น บนเวิร์กสเตชันของคุณ
- ขณะที่ยังอยู่ในเทอร์มินัล ให้ติดตั้ง Repo และรับข้อมูลประจำตัว ไปยังที่เก็บ Git ทั้งหมด
เริ่มต้นและซิงค์โค้ด
นำทางไปยังโฮมไดเร็กตอรี่ของคุณ:
cd ~
สร้างไดเร็กทอรีย่อยการทำงานในเครื่องภายใน:
mkdir aosp
นำทางไปยังไดเร็กทอรี:
cd aosp
เตรียมข้อมูลเบื้องต้นสาขาหลักของซอร์สโค้ดที่เก็บ AOSP (ค่าเริ่มต้น):
repo init -u https://android.googlesource.com/platform/manifest
ป้อนหรือยอมรับข้อมูลรับรอง Git ของคุณ (ชื่อ ที่อยู่อีเมล)
ซิงค์ซอร์สโค้ด:
repo sync -j8
การซิงค์ครั้งแรกอาจใช้เวลาหนึ่งชั่วโมงหรือมากกว่านั้น
การชำระเงิน repo แต่ละรายการจะแสดงด้วย ไฟล์ Manifest อนุญาตให้มีการชำระเงิน repo มากกว่า 1 ครั้งในแต่ละครั้ง ตราบใดที่รายการเหล่านั้นอยู่ในไดเร็กทอรีที่แตกต่างกัน แต่โปรดทราบว่าการชำระเงินและบิวด์แต่ละครั้งจะมีการใช้งานประมาณ 300 GB (และเพิ่มขึ้นเรื่อยๆ) ดังนั้น ให้จำกัดตัวเองไว้ที่การชำระเงินซื้อคืน 2 ครั้ง หรือเพิ่มระบบของคุณด้วยไดรฟ์รอง
สร้างโค้ด
ในการสร้าง Android คุณต้องเลือกประเภทอุปกรณ์ เป้าหมาย ที่จะสร้างด้วยคำสั่ง lunch
เป้าหมายคือการเรียงสับเปลี่ยนอุปกรณ์ เช่น รุ่นหรือฟอร์มแฟคเตอร์เฉพาะ
อุปกรณ์เป้าหมาย aosp_cf_x86_64_phone-userdebug
ช่วยให้คุณสร้างอุปกรณ์ Android เสมือน Cuttlefish สำหรับการทดสอบโดยไม่ต้องใช้อุปกรณ์จริง
หากต้องการสร้างและอัปเดตอุปกรณ์จริงแทน ให้เลือกเป้าหมายอื่นแล้วทำตามคำแนะนำสำหรับ อุปกรณ์ที่กะพริบ
ตั้งค่าสภาพแวดล้อมของคุณสำหรับการสร้างอุปกรณ์ Android โดยการรันคำสั่งต่อไปนี้จากรากของการชำระเงินซอร์สโค้ดของคุณ:
source build/envsetup.sh
ส่งเป้าหมาย build ไปที่คำสั่ง Lunch เช่นนี้
lunch aosp_cf_x86_64_phone-trunk_staging-userdebug
สร้าง โค้ดได้จากทุกที่ในขั้นตอนการชำระเงินของคุณด้วย:
m
คาดว่าการสร้างครั้งแรกจะใช้เวลาหลายชั่วโมง การสร้างครั้งต่อไปใช้เวลาน้อยลงอย่างมาก
เปิดตัวปลาหมึก
Cuttlefish คือโปรแกรมจำลอง Android ที่ใช้ทดสอบงานสร้างของคุณ
หากคุณไม่เคยติดตั้ง Cuttlefish คุณต้องติดตั้งการขึ้นต่อกันของ Cuttlefish ที่จำเป็น ในหน้าต่างเทอร์มินัล ให้รันคำสั่งต่อไปนี้เพื่อดาวน์โหลด สร้าง และติดตั้งแพ็คเกจ 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
เปิดตัวปลาหมึก:
launch_cvd --daemon</code>
เชื่อมต่อกับอุปกรณ์ Cuttlefish โดยไปที่
https://localhost:8443
บนเว็บเบราว์เซอร์ของคุณ คุณได้รับการต้อนรับด้วยสตรีมวิดีโอของอุปกรณ์ที่ใช้ระบบ Android ที่คุณเพิ่งสร้างขึ้น
ทำการเปลี่ยนแปลง
อัปเดตซอร์สโค้ดตาม รายการเปลี่ยนแปลง ตัวอย่างนี้
จากรากของการชำระเงินของคุณ (ไดเรกทอรี
aosp/
) ให้ไปที่โปรเจ็กต์frameworks/native
Git:cd frameworks/native
เริ่มโปรเจ็กต์ชั่วคราวด้วยคำสั่งนี้:
repo start <some-name> .
แก้ไข
SurfaceFlinger.cpp
เพื่อรวมการอัปเดตจากรายการเปลี่ยนแปลงในตำแหน่งต่อไปนี้:aosp/frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp
ค้นหาบรรทัดนี้:
postComposition();
แทนที่ทั้งสองบรรทัดด้วยสิ่งต่อไปนี้:
postComposition(); 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}); updateColorMatrixLocked();
สร้างโค้ด:
m
อัพเดตบิลด์บนอุปกรณ์:
adb root
adb remount
adb sync
adb reboot
ตรวจสอบว่าคุณเห็นการเปลี่ยนสีบนอุปกรณ์ที่คุณเลือกคล้ายกับที่แสดงในรูปที่ 1
รูปที่ 1. ลักษณะที่ปรากฏของหน้าจอหลังจากการเปลี่ยนสีสำเร็จ
ทดสอบรหัสของคุณ
Codelab ส่วนนี้ใช้การทดสอบตัวอย่างที่อยู่ในแผนผังต้นทางและล้มเหลว สิ่งนี้ใช้ Atest เพื่อรันการทดสอบในเครื่องและทดสอบโค้ด
หากต้องการใช้การทดสอบ ให้ปฏิบัติตามคำแนะนำเหล่านี้:
วิ่ง:
atest DevCodelabTest
การทดสอบจะล้มเหลว หากต้องการแก้ไข ให้ค้นหาซอร์สโค้ดของการทดสอบที่ล้มเหลว:
atest --info android.test.example.devcodelab.DevCodelabTest#testHelloWorld
แล้วดูที่นี่
platform_testing/tests/example/devcodelab
หากต้องการให้ไฟล์แก้ไข ให้ใช้ชื่อของการทดสอบใน
android.test.example.devcodelab.DevCodelabTest
และแทนที่ไฟล์.
ด้วย/
เพื่อให้ได้ผลลัพธ์นี้: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 และ Repo พร้อมลิงก์ไปยังเอกสารฉบับเต็มเกี่ยวกับการทำงานกับซอร์สโค้ด Android ดู พื้นที่เก็บข้อมูล AOSP สำหรับรายการโครงการ Git ทั้งหมด และแต่ละโครงการ (เส้นทาง) สำหรับสาขาที่เกี่ยวข้องกับแต่ละโครงการ
สำหรับการตรวจสอบโค้ดของโปรเจ็กต์ของคุณใน Git คุณจะใช้ระบบตรวจสอบโค้ดบนเว็บของ Gerrit
สมมติว่าคุณทำการเปลี่ยนแปลงใน
frameworks/native
ให้รันคำสั่งเหล่านี้เพื่ออัปโหลด:cd frameworks/native
repo start codelab .
git add .
git commit
สำหรับข้อความยืนยันของคุณ ให้ป้อนข้อมูลต่อไปนี้:
Android codelab change Test: manual atest
อัปโหลดการเปลี่ยนแปลงของคุณ:
repo upload
หากคุณทำสำเร็จ คุณจะเห็นข้อความที่คล้ายกับข้อความนี้:
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
ดูการเปลี่ยนแปลงของคุณใน Gerrit
ไปที่ลิงก์ที่พิมพ์ในเทอร์มินัลที่มีลักษณะดังนี้:
https://android-review.googlesource.com/c/platform/frameworks/native/+/1098432
การดำเนินการนี้จะทำให้ Codelab เริ่มต้นสำหรับการพัฒนาแพลตฟอร์ม Android เสร็จสมบูรณ์ ดู การส่งแพตช์ สำหรับขั้นตอนถัดไป และสำหรับรายละเอียดทั้งหมดเกี่ยวกับการพัฒนา Android โปรดดูส่วนที่เหลือของไซต์นี้
คืนค่าการเปลี่ยนแปลงของคุณ
โดยปกติแล้ว หลังการทดสอบและเมื่อตรวจสอบและอนุมัติแล้ว คุณจะส่งการเปลี่ยนแปลงของคุณใน Gerrit และรวมเข้ากับพื้นที่เก็บข้อมูล
เพื่อวัตถุประสงค์ของ Codelab นี้ ให้เปลี่ยนกลับรายการการเปลี่ยนแปลงของคุณโดยคลิก Abandon ใน Gerrit
จากนั้นละทิ้งสาขาชั่วคราวที่เกี่ยวข้องใน frameworks/native
ฟโปรเจ็กต์ (หรือไดเร็กทอรีย่อย):
repo abandon codelab .
อย่าลืมคืนค่าการเปลี่ยนแปลงที่คุณทำกับไฟล์ทดสอบด้วย เนื่องจากคุณไม่ได้ 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 นี้ โปรดรายงานโดยใช้ลิงก์ Issue Tracker ที่ด้านล่างของหน้า ส่งคำถามไปยังกลุ่ม การสร้าง Android