Codelab สำหรับนักพัฒนาซอฟต์แวร์ Android

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

แม้ว่าเส้นทางจะท้าทาย แต่ทีม Android ก็มุ่งมั่นที่จะลดความซับซ้อน การเดินทางทุกรูปแบบ และทีมงานก็ทำการปรับปรุงทุกวันด้วยวิธีโดยตรง ในโครงการโอเพนซอร์ส Android (AOSP)

นั่งรอสบายๆ แล้วเปิดขั้วปลายสายไฟ แล้วก็สร้างประวัติศาสตร์กันเลย

เป้าหมาย

พันธกิจของ Codelab นี้มี 2 ประการดังนี้

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

สิ่งที่ต้องมีก่อน

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

สภาพแวดล้อม

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

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

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

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

  1. ไปที่ไดเรกทอรีหน้าแรก

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

    mkdir aosp
    
  3. ไปที่ไดเรกทอรีโดยทำดังนี้

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

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

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

    repo sync -j8
    

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

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

สร้างโค้ด

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

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

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

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

    source build/envsetup.sh
    
  2. ส่งเป้าหมายบิลด์ไปยังคำสั่งอาหารกลางวัน ดังนี้

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

    m
    

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

ปล่อยหมึกกระดอง

Cuttlefish เป็นโปรแกรมจำลองของ Android ที่ใช้ทดสอบบิลด์ของคุณ

  1. หากคุณไม่เคยติดตั้ง 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 กฎ

  2. เปิด Cuttlefish:

    launch_cvd --daemon
    
  3. เชื่อมต่อกับอุปกรณ์หมึกกระดองโดยไปที่ https://localhost:8443 ใน เว็บเบราว์เซอร์ของคุณ คุณจะได้รับสตรีมวิดีโอบนอุปกรณ์ที่ขับเคลื่อนด้วย Android อุปกรณ์ที่คุณเพิ่งสร้างขึ้น

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

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

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

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

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

    aosp/frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp
    
  4. ค้นหาเส้นนี้:

    void SurfaceFlinger::updateColorMatrixLocked() {
    
  5. เพิ่ม 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});
    
  6. สร้างโค้ดด้วยคำสั่งต่อไปนี้

    m
    
  7. อัปเดตบิลด์ในอุปกรณ์ดังนี้

    adb root
    adb remount
    adb sync
    adb reboot
    

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

ตัวอย่างการเปลี่ยนสีที่ทำสำเร็จ

รูปที่ 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 และที่เก็บได้ที่เครื่องมือควบคุมแหล่งที่มา โดย ลิงก์ไปยังเอกสารฉบับเต็มเกี่ยวกับการใช้งานซอร์สโค้ดของ Android ดูที่เก็บ AOSP เพื่อดูรายการโปรเจ็กต์ Git ทั้งหมดและแต่ละโปรเจ็กต์ (เส้นทาง) สำหรับ Branch ที่เชื่อมโยงกับแต่ละโปรเจ็กต์

สำหรับการตรวจสอบโค้ดของโปรเจ็กต์ใน 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 แทน ให้เปลี่ยนกลับรายการการเปลี่ยนแปลงของคุณโดยคลิก ยกเลิกใน 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 กลุ่ม