โค้ดแล็บของนักพัฒนา Android

คุณสามารถช่วยพัฒนาระบบปฏิบัติการที่ติดตั้งอย่างกว้างขวางที่สุดในประวัติศาสตร์ของโลกได้ ใช่ คุณมาที่นี่เพื่อเริ่มต้นการเดินทางสู่การเป็นวิศวกรแพลตฟอร์ม Android

แม้ว่าเส้นทางจะท้าทาย แต่ทีม Android ก็มุ่งมั่นที่จะทำให้การเดินทางของคุณง่ายขึ้นในทุกครั้งที่เผยแพร่ และทีมงานทำการปรับปรุงทุกวันผ่านการทำงานโดยตรงในโครงการ Android Open Source (AOSP)

เอนหลัง ยิงเทอร์มินัล และสร้างประวัติศาสตร์กันเถอะ

เป้าหมาย

ภารกิจของ Codelab นี้มี 2 ประการ:

  1. เพื่อให้คุณได้เห็นคร่าวๆ ว่าขั้นตอนการทำงานของนักพัฒนาซอฟต์แวร์เป็นอย่างไรสำหรับวิศวกร Android ที่ทำงานบนแพลตฟอร์ม (ระบบปฏิบัติการ)
  2. สนับสนุนให้คุณแสดง ความคิดเห็น เกี่ยวกับเครื่องมือ เอกสาร และขั้นตอนการทำงานของนักพัฒนาซอฟต์แวร์

ข้อกำหนดเบื้องต้น

รายการข้อกำหนดสำหรับ Codelab นี้มาจากข้อกำหนดสำหรับการพัฒนาแพลตฟอร์มทั่วไป ( AOSP ) หากต้องการใช้ Codelab นี้ ให้ตั้งค่าดังต่อไปนี้:

สิ่งแวดล้อม

โดยทั่วไปแล้ว ผู้ใช้จะสร้างและพัฒนาบนเวิร์กสเตชันโดยตรง เนื่องจากคุณอาจทำงานในเทอร์มินัลต่างๆ และคำสั่งหลายคำสั่งที่ใช้เป็นคำสั่งเฉพาะของเทอร์มินัล คุณจึงต้องรันคำสั่งเหล่านั้นใหม่ในแต่ละเซสชันของเทอร์มินัล โดยเฉพาะอย่างยิ่ง สิ่งเหล่านี้รวมถึงคำสั่ง source build/envsetup.sh และ lunch

ตั้งค่าเวิร์กสเตชัน

  1. ติดตั้งแพ็คเกจที่จำเป็น บนเวิร์กสเตชันของคุณ
  2. ขณะที่ยังอยู่ในเทอร์มินัล ให้ติดตั้ง Repo และรับข้อมูลประจำตัว ไปยังที่เก็บ Git ทั้งหมด

เริ่มต้นและซิงค์โค้ด

  1. นำทางไปยังโฮมไดเร็กตอรี่ของคุณ:

    cd ~
    
  2. สร้างไดเร็กทอรีย่อยการทำงานในเครื่องภายใน:

    mkdir aosp
    
  3. นำทางไปยังไดเร็กทอรี:

    cd aosp
    
  4. เตรียมข้อมูลเบื้องต้นสาขาหลักของซอร์สโค้ดที่เก็บ AOSP (ค่าเริ่มต้น):

    repo init -u https://android.googlesource.com/platform/manifest
    
  5. ป้อนหรือยอมรับข้อมูลรับรอง Git ของคุณ (ชื่อ ที่อยู่อีเมล)

  6. ซิงค์ซอร์สโค้ด:

    repo sync -j8
    

การซิงค์ครั้งแรกอาจใช้เวลาหนึ่งชั่วโมงหรือมากกว่านั้น

การชำระเงิน repo แต่ละรายการจะแสดงด้วย ไฟล์ Manifest อนุญาตให้มีการชำระเงิน repo มากกว่า 1 ครั้งในแต่ละครั้ง ตราบใดที่รายการเหล่านั้นอยู่ในไดเร็กทอรีที่แตกต่างกัน แต่โปรดทราบว่าการชำระเงินและบิวด์แต่ละครั้งจะมีการใช้งานประมาณ 300 GB (และเพิ่มขึ้นเรื่อยๆ) ดังนั้น ให้จำกัดตัวเองไว้ที่การชำระเงินซื้อคืน 2 ครั้ง หรือเพิ่มระบบของคุณด้วยไดรฟ์รอง

สร้างโค้ด

ในการสร้าง Android คุณต้องเลือกประเภทอุปกรณ์ เป้าหมาย ที่จะสร้างด้วยคำสั่ง lunch เป้าหมายคือการเรียงสับเปลี่ยนอุปกรณ์ เช่น รุ่นหรือฟอร์มแฟคเตอร์เฉพาะ

อุปกรณ์เป้าหมาย aosp_cf_x86_64_phone-userdebug ช่วยให้คุณสร้างอุปกรณ์ Android เสมือน Cuttlefish สำหรับการทดสอบโดยไม่ต้องใช้อุปกรณ์จริง

หากต้องการสร้างและอัปเดตอุปกรณ์จริงแทน ให้เลือกเป้าหมายอื่นแล้วทำตามคำแนะนำสำหรับ อุปกรณ์ที่กะพริบ

  1. ตั้งค่าสภาพแวดล้อมของคุณสำหรับการสร้างอุปกรณ์ Android โดยการรันคำสั่งต่อไปนี้จากรากของการชำระเงินซอร์สโค้ดของคุณ:

    source build/envsetup.sh
    
  2. ส่งเป้าหมาย build ไปที่คำสั่ง Lunch เช่นนี้

    lunch aosp_cf_x86_64_phone-trunk_staging-userdebug
    
  3. สร้าง โค้ดได้จากทุกที่ในขั้นตอนการชำระเงินของคุณด้วย:

    m
    

คาดว่าการสร้างครั้งแรกจะใช้เวลาหลายชั่วโมง การสร้างครั้งต่อไปใช้เวลาน้อยลงอย่างมาก

สร้างอินสแตนซ์ Acloud

Acloud เป็นเครื่องมือบรรทัดคำสั่งใน AOSP ที่ช่วยผู้ใช้ในการสร้างอุปกรณ์ Android เสมือน ในกรณีนี้คือ Cuttlefish

หากคุณอยู่ในเซสชันเทอร์มินัลเดียวกับที่ใช้ สร้างโค้ด ให้ดำเนินการต่อ มิฉะนั้น ให้รันสคริปต์ envsetup.sh อีกครั้งและคำสั่ง lunch เดียวกับที่คุณใช้ก่อน แล้ว

  1. ติดตั้งการพึ่งพาสำหรับการรันอุปกรณ์เสมือน Cuttlefish ภายในเครื่องด้วย:

    acloud setup
    
  2. หากได้รับแจ้ง ให้รีสตาร์ทเวิร์กสเตชันของคุณเพื่อให้การเปลี่ยนแปลงทั้งหมดมีผล

  3. สร้างอินสแตนซ์ภายใน acloud ด้วย:

    acloud create --local-image --local-instance
    
  4. เลือกอุปกรณ์ปลาหมึก

คุณควรได้รับการต้อนรับด้วยเซสชัน VNC ที่มีอุปกรณ์ Android!

คุณสามารถโต้ตอบกับอุปกรณ์เสมือนบนเวิร์กสเตชันของคุณโดยใช้เมาส์และคีย์บอร์ด คุณยังสามารถติดตามกิจกรรมภายในบันทึกในขณะที่คุณใช้อุปกรณ์ของคุณได้โดยใช้คำสั่ง logcat ของ Android Debug Bridge (adb):

adb logcat

ทำการเปลี่ยนแปลง

อัปเดตซอร์สโค้ดตามรายการ เปลี่ยนแปลง ตัวอย่างนี้

  1. จากรากของการชำระเงินของคุณ (ไดเรกทอรี aosp/ ) ให้ไปที่โปรเจ็กต์ frameworks/native Git:

    cd frameworks/native
    
  2. เริ่มโปรเจ็กต์ชั่วคราวด้วยคำสั่งนี้:

    repo start <some-name> .
    
  3. แก้ไข SurfaceFlinger.cpp เพื่อรวมการอัปเดตจากรายการเปลี่ยนแปลงในตำแหน่งต่อไปนี้:

    aosp/frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp
    
  4. ค้นหาบรรทัดนี้:

    postComposition();
    
  5. แทนที่ทั้งสองบรรทัดด้วยสิ่งต่อไปนี้:

    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();
    
  6. สร้างโค้ด:

    m
    
  7. อัพเดตบิลด์บนอุปกรณ์:

    adb root
    adb remount
    adb sync
    adb reboot
    acloud reconnect
    
  8. หากคุณได้รับแจ้งให้เลือกอุปกรณ์ ให้เลือกอุปกรณ์ที่แสดงเวลาที่ผ่านไปสั้นที่สุด (นี่อาจเป็นอันสุดท้ายในรายการที่คุณเห็น) หากต้องการดูอินสแตนซ์อุปกรณ์เสมือนทั้งหมด ให้ใช้คำสั่ง acloud list และ acloud list -v

ตรวจสอบว่าคุณเห็นการเปลี่ยนสีบนอุปกรณ์ที่คุณเลือกคล้ายกับที่แสดงในรูปที่ 1

Example of a successful color change

รูปที่ 1. ลักษณะที่ปรากฏของหน้าจอหลังจากการเปลี่ยนสีสำเร็จ

ทดสอบรหัสของคุณ

Codelab ส่วนนี้ใช้การทดสอบตัวอย่างที่อยู่ในแผนผังต้นทางและล้มเหลว สิ่งนี้ใช้ Atest เพื่อรันการทดสอบในเครื่องและทดสอบโค้ด

หากต้องการใช้การทดสอบ ให้ปฏิบัติตามคำแนะนำเหล่านี้:

  1. วิ่ง:

    atest DevCodelabTest
    
  2. การทดสอบจะล้มเหลว หากต้องการแก้ไข ให้ค้นหาซอร์สโค้ดของการทดสอบที่ล้มเหลว:

    atest --info android.test.example.devcodelab.DevCodelabTest#testHelloWorld
    
  3. แล้วดูที่นี่

    platform_testing/tests/example/devcodelab
    
  4. หากต้องการให้ไฟล์แก้ไข ให้ใช้ชื่อของการทดสอบใน android.test.example.devcodelab.DevCodelabTest และแทนที่ไฟล์ . ด้วย / เพื่อให้ได้ผลลัพธ์นี้:

    src/android/test/example/devcodelab/DevCodelabTest.java
    
  5. จากนั้นแก้ไข

    platform_testing/tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.java
    

    จะเข้ามาแทนที่

    Assert.assertTrue(false)
    

    กับ

    Assert.assertTrue(true)
    
  6. เรียกใช้การทดสอบอีกครั้งเพื่อยืนยันว่าคุณได้แก้ไขปัญหาแล้ว:

    atest DevCodelabTest
    

อัปโหลดรหัสของคุณเพื่อตรวจสอบ

Repo ทำให้การใช้งาน Git ง่ายขึ้นด้วยการรวมคำสั่งต่างๆ เช่น git clone เพื่อทำงานในที่เก็บข้อมูล Git (หรือโปรเจ็กต์) จำนวนมากในคราวเดียว

ดู เครื่องมือควบคุมแหล่งที่มา สำหรับภาพรวมของ Git และ Repo พร้อมลิงก์ไปยังเอกสารฉบับเต็มเกี่ยวกับการทำงานกับซอร์สโค้ด Android ดู พื้นที่เก็บข้อมูล AOSP สำหรับรายการโครงการ Git ทั้งหมด และแต่ละโครงการ (เส้นทาง) สำหรับสาขาที่เกี่ยวข้องกับแต่ละโครงการ

สำหรับการตรวจสอบโค้ดของโปรเจ็กต์ของคุณใน Git คุณจะใช้ระบบตรวจสอบโค้ดบนเว็บของ Gerrit

  1. สมมติว่าคุณทำการเปลี่ยนแปลงใน frameworks/native ให้รันคำสั่งเหล่านี้เพื่ออัปโหลด:

    cd frameworks/native
    repo start codelab .
    git add .
    git commit
    
  2. สำหรับข้อความยืนยันของคุณ ให้ป้อนข้อมูลต่อไปนี้:

    Android codelab change
    Test: manual atest
    
  3. อัปโหลดการเปลี่ยนแปลงของคุณ:

    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