คุณช่วยพัฒนาระบบปฏิบัติการที่ติดตั้งอย่างแพร่หลายที่สุดในประวัติศาสตร์ได้ ของโลก ใช่ คุณพร้อมแล้วที่จะออกเดินทางสู่การเป็น Android ของแพลตฟอร์ม
แม้ว่าเส้นทางจะท้าทาย แต่ทีม Android ก็มุ่งมั่นที่จะลดความซับซ้อน การเดินทางทุกรูปแบบ และทีมงานก็ทำการปรับปรุงทุกวันด้วยวิธีโดยตรง ในโครงการโอเพนซอร์ส Android (AOSP)
นั่งรอสบายๆ แล้วเปิดขั้วปลายสายไฟ แล้วก็สร้างประวัติศาสตร์กันเลย
เป้าหมาย
พันธกิจของ Codelab นี้มี 2 ประการดังนี้
- ให้คุณได้เห็นภาพรวมเกี่ยวกับเวิร์กโฟลว์ของนักพัฒนาซอฟต์แวร์ เช่น วิศวกร Android ที่ทำงานบนแพลตฟอร์ม (ระบบปฏิบัติการ)
- กระตุ้นให้คุณแสดงความคิดเห็น เกี่ยวกับเครื่องมือของ Android, เอกสารประกอบ และเวิร์กโฟลว์ของนักพัฒนาซอฟต์แวร์
สิ่งที่ต้องมีก่อน
รายการข้อกำหนดสำหรับโค้ดแล็บนี้มาจากข้อกำหนดสำหรับการพัฒนาแพลตฟอร์มทั่วไป (AOSP) หากต้องการใช้ Codelab นี้ ตั้งค่าต่อไปนี้
- เวิร์กสเตชันของ Linux จริงเป็นไปตามข้อกำหนดสาธารณะทั้งหมด
- ต้องมีที่เก็บและการกำหนดค่า Git เพื่อแก้ไข ฐานของโค้ด Android
สภาพแวดล้อม
โดยปกติแล้ว ผู้ใช้จะสร้างและพัฒนาบนเวิร์กสเตชันโดยตรง เนื่องจากคุณอาจ
ทำงานในเทอร์มินัลต่างๆ และคำสั่งหลายๆ คำสั่งที่ใช้นั้นเป็นแบบเฉพาะสำหรับเทอร์มินัล
คุณจะต้องเรียกใช้อีกครั้งในเซสชันเทอร์มินัลแต่ละเซสชัน โดยเฉพาะอย่างยิ่ง คำสั่งเหล่านี้รวมถึงคำสั่ง source build/envsetup.sh
และ lunch
ตั้งค่าเวิร์กสเตชัน
- ติดตั้งแพ็กเกจที่จำเป็นในอุปกรณ์ ของเวิร์กสเตชัน
- ขณะที่ยังอยู่ในเทอร์มินัล ให้ติดตั้งที่เก็บและรับข้อมูลเข้าสู่ระบบ ไปยังที่เก็บ Git ทั้งหมด
เริ่มต้นและซิงค์รหัส
ไปที่ไดเรกทอรีหน้าแรก
cd ~
สร้างไดเรกทอรีย่อยที่ใช้งานอยู่ภายในเครื่อง โดยทำดังนี้
mkdir aosp
ไปที่ไดเรกทอรีโดยทำดังนี้
cd aosp
เริ่มต้น Branch หลักของซอร์สโค้ดของที่เก็บ AOSP (ค่าเริ่มต้น):
repo init -u https://android.googlesource.com/platform/manifest
ป้อนหรือยอมรับข้อมูลเข้าสู่ระบบ Git ของคุณ (ชื่อ, อีเมล)
ซิงค์ซอร์สโค้ด
repo sync -j8
การซิงค์ครั้งแรกอาจใช้เวลาอย่างน้อย 1 ชั่วโมง
การชำระเงินที่เก็บแต่ละครั้งจะแสดงด้วยไฟล์ Manifest เราอนุญาตให้ชำระเงินในที่เก็บได้มากกว่า 1 รายการต่อครั้ง อยู่ในไดเรกทอรีที่แตกต่างกัน แต่โปรดทราบว่าการตรวจสอบและการสร้างแต่ละครั้งจะใช้พื้นที่เก็บข้อมูลประมาณ 300 GB (และเพิ่มขึ้นเรื่อยๆ) ดังนั้นให้จำกัดการตรวจสอบที่เก็บถาวรไว้ที่ 2 รายการ หรือเพิ่มไดรฟ์รองในระบบ
สร้างโค้ด
หากต้องการสร้าง Android คุณต้องเลือกเป้าหมาย
ประเภทอุปกรณ์ที่จะสร้างด้วยคำสั่ง lunch
เป้าหมายคือการเรียงสับเปลี่ยนของอุปกรณ์
เช่น รุ่นหรือรูปแบบของอุปกรณ์ที่เฉพาะเจาะจง
เป้าหมายอุปกรณ์ aosp_cf_x86_64_phone-userdebug
ช่วยให้คุณสร้างอุปกรณ์ Android เสมือนจริง Cuttlefish สำหรับการทดสอบได้โดยไม่ต้องมีอุปกรณ์จริง
หากต้องการสร้างและอัปเดตอุปกรณ์จริงแทน ให้เลือกเป้าหมายอื่นแล้วทำตาม วิธีการสำหรับอุปกรณ์ที่กะพริบ
ตั้งค่าสภาพแวดล้อมสำหรับการสร้างอุปกรณ์ Android โดยเรียกใช้ คำสั่งต่อไปนี้จากรูทของจุดชำระเงินของซอร์สโค้ด
source build/envsetup.sh
ส่งเป้าหมายการสร้างไปยังคำสั่ง lunch ดังนี้
lunch aosp_cf_x86_64_phone-trunk_staging-userdebug
สร้างรหัสได้จากทุกที่ในการชำระเงินด้วย
m
การสร้างครั้งแรกอาจใช้เวลาหลายชั่วโมง การสร้างครั้งต่อๆ ไปใช้เวลาอย่างมาก คือเวลาน้อยลง
ปล่อยหมึกกระดอง
Cuttlefish เป็นโปรแกรมจำลองของ Android ที่ใช้ทดสอบบิลด์ของคุณ
หากคุณไม่เคยติดตั้ง 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
กฎเปิด Cuttlefish:
launch_cvd --daemon
เชื่อมต่อกับอุปกรณ์หมึกกระดองโดยไปที่
https://localhost:8443
ใน เว็บเบราว์เซอร์ของคุณ คุณจะได้รับสตรีมวิดีโอบนอุปกรณ์ที่ขับเคลื่อนด้วย Android อุปกรณ์ที่คุณเพิ่งสร้างขึ้น
ทำการเปลี่ยนแปลง
อัปเดตซอร์สโค้ดตาม changelist ตัวอย่างนี้
จากรูทของการชำระเงิน (ไดเรกทอรี
aosp/
) ให้ไปที่frameworks/native
โปรเจ็กต์ Git โดยทำดังนี้cd frameworks/native
เริ่มโปรเจ็กต์ชั่วคราวด้วยคำสั่งนี้
repo start <some-name> .
แก้ไข
SurfaceFlinger.cpp
เพื่อรวมการอัปเดตจากรายการการเปลี่ยนแปลงที่ ตำแหน่งต่อไปนี้:aosp/frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp
ค้นหาเส้นนี้:
void SurfaceFlinger::updateColorMatrixLocked() {
เพิ่ม 2 บรรทัดนี้ที่จุดเริ่มต้นของ 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
adb sync
adb reboot
ตรวจสอบว่าคุณเห็นการเปลี่ยนสีบนอุปกรณ์ที่เลือกคล้ายกับสีที่แสดง ในรูปที่ 1
รูปที่ 1 ลักษณะที่ปรากฏของหน้าจอหลังจากเปลี่ยนสีสำเร็จ
ทดสอบโค้ดของคุณ
ส่วนนี้ของ Codelab จะใช้การทดสอบตัวอย่างที่อยู่ในแผนผังซอร์ส และล้มเหลว ขั้นตอนนี้ใช้ Atest สำหรับ เรียกใช้การทดสอบในเครื่องและทดสอบโค้ด
ทำตามวิธีการเพื่อใช้การทดสอบ
เรียกใช้:
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)
จากนั้นดูที่นี่
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 และที่เก็บได้ที่เครื่องมือควบคุมแหล่งที่มา โดย ลิงก์ไปยังเอกสารฉบับเต็มเกี่ยวกับการใช้งานซอร์สโค้ดของ Android ดูที่เก็บ AOSP เพื่อดูรายการโปรเจ็กต์ Git ทั้งหมดและแต่ละโปรเจ็กต์ (เส้นทาง) สำหรับ Branch ที่เชื่อมโยงกับแต่ละโปรเจ็กต์
สำหรับการตรวจสอบโค้ดของโปรเจ็กต์ใน 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 แทน ให้เปลี่ยนกลับรายการการเปลี่ยนแปลงของคุณโดยคลิก ยกเลิกใน 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 นี้ โปรดรายงานข้อผิดพลาดดังกล่าวโดยใช้ เครื่องมือติดตามปัญหา ที่ด้านล่างของหน้าใดก็ได้ ส่งคำถามไปยัง การสร้าง Android กลุ่ม