คุณสามารถช่วยพัฒนาระบบปฏิบัติการที่มีการติดตั้งอย่างกว้างขวางที่สุดในประวัติศาสตร์โลก ใช่ คุณมาที่นี่เพื่อเริ่มต้นการเดินทางสู่การเป็นวิศวกรแพลตฟอร์ม Android
แม้ว่าเส้นทางจะท้าทาย แต่ทีม Android มุ่งมั่นที่จะทำให้การเดินทางของคุณง่ายขึ้น ทุกๆ รุ่น และทีมงานทำการปรับปรุงทุกวันผ่านการทำงานโดยตรงใน Android Open Source Project (AOSP)
นั่งลง เปิดเครื่องเทอร์มินัล แล้วมาสร้างประวัติศาสตร์กัน
เป้าหมาย
ภารกิจของ Codelab นี้มีสองเท่า:
- เพื่อให้คุณได้ทราบเพียงเล็กน้อยว่าเวิร์กโฟลว์ของนักพัฒนาเป็นอย่างไรสำหรับวิศวกร Android ที่ทำงานบนแพลตฟอร์ม (ระบบปฏิบัติการ)
- ขอแนะนำให้คุณแสดง ความคิดเห็นเกี่ยว กับเครื่องมือ เอกสารประกอบ และขั้นตอนการทำงานของนักพัฒนาซอฟต์แวร์ของ 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 แต่ละรายการจะแสดงด้วย ไฟล์ รายการ อนุญาตให้มีการชำระเงิน repo มากกว่า 1 ครั้งในแต่ละครั้ง ตราบใดที่มีอยู่ในไดเรกทอรีที่แตกต่างกัน แต่โปรดทราบว่าการเช็คเอาต์และบิลด์แต่ละครั้งมีปริมาณการใช้งานประมาณ 300 GB (และเพิ่มขึ้นเรื่อยๆ) ดังนั้นให้จำกัดตัวคุณเองให้ชำระเงินที่ 2 repo หรือเพิ่มระบบของคุณด้วยไดรฟ์รอง
สร้างรหัส
ในการสร้าง Android คุณต้องเลือกประเภทอุปกรณ์ เป้าหมาย ที่จะสร้างด้วยคำสั่ง lunch
เป้าหมายคือการเปลี่ยนแปลงอุปกรณ์ เช่น รุ่นหรือปัจจัยรูปแบบเฉพาะ
เป้าหมายอุปกรณ์ที่รวมอยู่ด้านล่าง aosp_cf_x86_64_phone-userdebug
ช่วยให้คุณสร้างอุปกรณ์ Android เสมือนของ Cuttlefish สำหรับการทดสอบโดยไม่ต้องใช้อุปกรณ์จริง
ในการสร้างและอัปเดตอุปกรณ์ทางกายภาพแทน ให้เลือกเป้าหมายอื่นและทำตามคำแนะนำสำหรับ อุปกรณ์ที่กะพริบ
ตั้งค่าสภาพแวดล้อมของคุณเพื่อสร้างอุปกรณ์ Android โดยเรียกใช้คำสั่งต่อไปนี้จากรูทของการชำระเงินซอร์สโค้ดของคุณ:
source build/envsetup.sh
ส่งเป้าหมายการสร้างไปยังคำสั่ง lunch เช่นนี้
lunch aosp_cf_x86_64_phone-userdebug
สร้าง โค้ดได้จากทุกที่ในการชำระเงินของคุณด้วย:
m
คาดว่าการสร้างครั้งแรกจะใช้เวลาหลายชั่วโมง งานสร้างที่ตามมาใช้เวลาน้อยลงอย่างมาก
สร้างอินสแตนซ์ Acloud
Acloud เป็นเครื่องมือบรรทัดคำสั่งใน AOSP ที่ช่วยผู้ใช้ในการสร้างอุปกรณ์ Android เสมือน ในกรณีนี้คือปลาหมึก
หากคุณอยู่ในเทอร์มินัลเซสชันเดียวกันกับที่ใช้ สร้างโค้ด ให้ดำเนินการต่อ มิฉะนั้น ให้รันสคริปต์ envsetup.sh
อีกครั้งและคำสั่ง lunch
เดียวกับที่คุณใช้ก่อน แล้ว
สร้างอินสแตนซ์ในเครื่อง Acloud ด้วย:
acloud create --local-image --local-instance
ยอมรับการอัปเดตแพ็คเกจที่จำเป็น
หากได้รับแจ้ง ให้รีสตาร์ทเวิร์กสเตชันเพื่อให้การเปลี่ยนแปลงทั้งหมดมีผล
เลือกอุปกรณ์ปลาหมึก
คุณควรได้รับการต้อนรับด้วยเซสชัน VNC ที่มีอุปกรณ์ Android!
คุณสามารถโต้ตอบกับอุปกรณ์เสมือนบนเวิร์กสเตชันของคุณโดยใช้เมาส์และคีย์บอร์ด คุณยังสามารถติดตามกิจกรรมภายในบันทึกในขณะที่คุณใช้อุปกรณ์ของคุณโดยใช้คำสั่ง logcat
ของ Android Debug Bridge (adb):
adb logcat
เปลี่ยนแปลง
อัปเดตซอร์สโค้ดตามรายการการเปลี่ยนแปลง ตัวอย่าง นี้
จากรูทของการชำระเงินของคุณ (
aosp/
) ให้ไปที่frameworks/native
Git:cd frameworks/native
เริ่มโครงการชั่วคราวด้วยคำสั่งนี้:
repo start <some-name> .
แก้ไข
SurfaceFlinger.cpp
เพื่อรวมการอัปเดตจากรายการการเปลี่ยนแปลงที่ตำแหน่งต่อไปนี้:aosp/frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp
ค้นหาสองบรรทัดนี้:
postFrame(); postComposition();
แทนที่สองบรรทัดเหล่านั้นด้วยสิ่งต่อไปนี้:
postFrame(); 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
acloud reconnect
หากคุณได้รับแจ้งให้เลือกอุปกรณ์ ให้เลือกอุปกรณ์ที่แสดงเวลาที่ผ่านไปสั้นที่สุด (นี่อาจเป็นรายการสุดท้ายในรายการที่คุณเห็น) หากต้องการดูอินสแตนซ์อุปกรณ์เสมือนทั้งหมด ให้ใช้คำสั่ง
acloud list
และacloud list -v
ตรวจสอบว่าคุณเห็นการเปลี่ยนสีบนอุปกรณ์ที่คุณเลือกซึ่งคล้ายกับที่แสดงในรูปที่ 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 master:
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/master
ดูการเปลี่ยนแปลงของคุณใน Gerrit
ไปที่ลิงก์ที่พิมพ์ในเทอร์มินัลซึ่งมีลักษณะดังนี้:
https://android-review.googlesource.com/c/platform/frameworks/native/+/1098432
สิ่งนี้ทำให้ Codelab เริ่มต้นสำหรับการพัฒนาแพลตฟอร์ม Android เสร็จสมบูรณ์ ดูการ ส่งแพตช์ สำหรับขั้นตอนต่อไป และสำหรับรายละเอียดทั้งหมดเกี่ยวกับการพัฒนา Android โปรดดูส่วนเหลือของไซต์นี้
ย้อนกลับการเปลี่ยนแปลงของคุณ
โดยปกติ หลังการทดสอบและเมื่อตรวจสอบและอนุมัติ คุณจะต้องส่งการเปลี่ยนแปลงใน Gerrit และรวมเข้ากับที่เก็บ
แต่สำหรับจุดประสงค์ของ Codelab นี้ ให้เปลี่ยนรายการการเปลี่ยนแปลงของคุณโดยคลิก Abandon in 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 นี้ โปรดรายงานโดยใช้ลิงก์ ตัวติดตามปัญหา ที่ด้านล่างของหน้าใดก็ได้ ส่งคำถามไปยังกลุ่มการ สร้างหุ่นยนต์