นักพัฒนา Android Codelab

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

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

นั่งลง เปิดเครื่องเทอร์มินัล แล้วมาสร้างประวัติศาสตร์กัน

เป้าหมาย

ภารกิจของ Codelab นี้มีสองเท่า:

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

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

รายการของข้อกำหนดสำหรับ 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 repo หรือเพิ่มระบบของคุณด้วยไดรฟ์รอง

สร้างรหัส

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

อุปกรณ์เป้าหมายรวมถึงด้านล่าง aosp_cf_x86_64_phone-userdebug ช่วยให้คุณสามารถสร้าง ปลาหมึก อุปกรณ์ Android เสมือนสำหรับการทดสอบโดยไม่ต้องมีอุปกรณ์ทางกายภาพ

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

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

    source build/envsetup.sh
    
  2. ส่งเป้าหมายการสร้างไปยังคำสั่ง lunch ดังนี้:

    lunch aosp_cf_x86_64_phone-userdebug
    
  3. สร้าง รหัสจากที่ใดก็ได้ในการเช็คเอาท์ของคุณด้วย:

    m
    

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

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

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

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

  1. สร้างอินสแตนซ์ในเครื่อง Acloud ด้วย:

    acloud create --local-image --local-instance
    
  2. ยอมรับการอัปเดตแพ็คเกจที่จำเป็น

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

  4. เลือกอุปกรณ์ปลาหมึก

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

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

adb logcat

เปลี่ยนแปลง

อัปเดตรหัสที่มาดังต่อไปนี้ตัวอย่างนี้ รายการการเปลี่ยนแปลง

  1. จากรากของเช็คเอาท์คุณ ( aosp/ directory) นำทางไปยัง frameworks/native โครงการ Git:

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

    repo start <some-name> .
    
  3. แก้ไข SurfaceFlinger.cpp จะรวมถึงการปรับปรุงจากรายการการเปลี่ยนแปลงในสถานที่ดังต่อไปนี้:

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

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

    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();
    
  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
    

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

การใช้งาน Git Repo ช่วยลดความยุ่งยากโดยคำสั่งเช่น bundling git clone ในการทำงานข้ามจำนวนมากที่เก็บ Git (หรือโครงการ) ในครั้งเดียว

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

สำหรับการตรวจสอบรหัสของโครงการของคุณใน Git คุณจะใช้ Gerrit ระบบตรวจสอบรหัส web-based

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