บิลด์ Android

ทำตามวิธีการในหน้านี้เพื่อสร้าง Android

ตั้งค่าสภาพแวดล้อมของบิลด์

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

source build/envsetup.sh

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

เลือกเป้าหมาย

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

lunch aosp_cf_x86_64_only_phone-aosp_current-userdebug

คุณควรเห็นข้อมูลสรุปของเป้าหมายและสภาพแวดล้อมของบิลด์

============================================
PLATFORM_VERSION_CODENAME=Baklava
PLATFORM_VERSION=Baklava
TARGET_PRODUCT=aosp_cf_x86_64_only_phone
TARGET_BUILD_VARIANT=userdebug
TARGET_ARCH=x86_64
TARGET_ARCH_VARIANT=silvermont
HOST_OS=linux
HOST_OS_EXTRA=Linux-6.10.11-1rodete2-amd64-x86_64-Debian-GNU/Linux-rodete
HOST_CROSS_OS=windows
BUILD_ID=BP1A.250305.020
OUT_DIR=out
============================================

สตริงที่แสดงเป้าหมายจะมีรูปแบบดังนี้

lunch product_name-release_config-build_variant

โดยองค์ประกอบของสตริงนี้มีดังนี้

  • product_name คือชื่อผลิตภัณฑ์ที่คุณต้องการสร้าง เช่น aosp_cf_x86_64_only_phone หรือ aosp_husky product_name เฉพาะของคุณอาจเป็นไปตามรูปแบบของคุณเองสำหรับอุปกรณ์ แต่รูปแบบที่ Google ใช้กับอุปกรณ์ของตนเองจะมีองค์ประกอบต่อไปนี้

    • aosp หมายถึง โครงการโอเพนซอร์ส Android
    • ตัวเลือก cf จะรวมอยู่ด้วยเมื่อตั้งใจให้เป้าหมายทำงานภายในโปรแกรมจำลอง Cuttlefish
    • สถาปัตยกรรมและชื่อรหัสฮาร์ดแวร์ เช่น x86_64_only_phone หรือ husky ซึ่งเป็นชื่อรหัสของ Pixel 8 Pro ดูรายการชื่อรหัส สำหรับอุปกรณ์ Google ได้ที่ชื่อรหัสอุปกรณ์
  • release_config ตั้งค่าเป็น การกำหนดค่ารุ่น, เช่น การกำหนดค่ารุ่นสำหรับการพัฒนาที่เรียกว่า aosp_current การกำหนดค่ารุ่นจะระบุฟีเจอร์และโค้ดบางอย่างที่อยู่เบื้องหลังแฟล็กการเปิดตัวฟีเจอร์ และจะเปิดหรือปิดใช้สำหรับการสร้าง ดูข้อมูลเพิ่มเติมเกี่ยวกับการกำหนดค่ารุ่นได้ที่ ตั้งค่าแฟล็กฟีเจอร์สำหรับการเปิดตัว

  • ส่วน build_variant ของสตริงอาจเป็นค่าใดค่าหนึ่งใน 3 ค่าในตารางต่อไปนี้

    build_variant คำอธิบาย
    user ตัวแปรบิลด์นี้ให้สิทธิ์เข้าถึงความปลอดภัยแบบจำกัดและเหมาะสำหรับการใช้งานจริง
    userdebug ตัวแปรบิลด์นี้ช่วยให้นักพัฒนาอุปกรณ์เข้าใจประสิทธิภาพและพลังงานของรุ่นที่อยู่ระหว่างการพัฒนา เมื่อพัฒนาด้วยการสร้าง userdebug ให้ทำตาม หลักเกณฑ์สำหรับ userdebug
    eng ตัวแปรบิลด์นี้มีเวลาบิลด์ที่เร็วกว่าและเหมาะที่สุดสำหรับสภาพแวดล้อมในการพัฒนาประจำวัน (ซึ่งประสิทธิภาพและพลังงานมีความสำคัญน้อยกว่า)

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

ดูเป้าหมายปัจจุบัน

หากต้องการดูการตั้งค่า lunch ปัจจุบัน ให้เรียกใช้คำสั่งต่อไปนี้

$ echo "$TARGET_PRODUCT-$TARGET_BUILD_VARIANT"

สร้างโค้ด

เรียกใช้คำสั่งต่อไปนี้เพื่อสร้างเป้าหมาย การบิลด์ครั้งแรกอาจใช้เวลาไม่ถึง 1 ชั่วโมงจนถึง 2-3 ชั่วโมง ทั้งนี้ขึ้นอยู่กับข้อกำหนดของเวิร์กสเตชัน การสร้างครั้งต่อๆ ไปจะใช้เวลาน้อยลงอย่างมาก

m

เอาต์พุตของบิลด์จะปรากฏใน $OUT_DIR หากคุณสร้างเป้าหมายต่างๆ การสร้างเป้าหมายแต่ละรายการจะปรากฏใน $OUT_DIR

คำสั่ง m จะสร้างจากด้านบนสุดของโครงสร้างต้นไม้ คุณจึงเรียกใช้ m จากภายในไดเรกทอรีย่อยได้ หากคุณตั้งค่าตัวแปรสภาพแวดล้อม TOP ไว้ คำสั่ง m จะใช้ตัวแปรดังกล่าว หากไม่ได้ตั้งค่า TOP ไว้ คำสั่ง m จะค้นหาโครงสร้างต้นไม้จากไดเรกทอรีปัจจุบัน โดยพยายามค้นหาด้านบนสุดของโครงสร้างต้นไม้

คำสั่ง m สามารถจัดการงานแบบขนานได้ด้วยอาร์กิวเมนต์ -jN หากคุณไม่ได้ระบุอาร์กิวเมนต์ -j ระบบบิลด์จะเลือกจำนวนงานแบบขนานโดยอัตโนมัติซึ่งระบบคิดว่าเหมาะสมที่สุดสำหรับระบบของคุณ

คุณสามารถสร้างโมดูลที่เฉพาะเจาะจงแทนที่จะสร้างอิมเมจอุปกรณ์ทั้งหมดได้โดยระบุชื่อโมดูลในบรรทัดคำสั่ง m นอกจากนี้ คำสั่ง m ยังมีเป้าหมายเทียมบางอย่างที่เรียกว่า เป้าหมาย เช่น m nothing จะไม่สร้างบิลด์อะไรเลย แต่จะแยกวิเคราะห์และตรวจสอบโครงสร้างบิลด์ หากต้องการดูรายการเป้าหมายที่ใช้ได้ ให้พิมพ์ m help

แก้ปัญหาข้อผิดพลาดในการสร้าง

ส่วนนี้มีวิธีการจัดการข้อผิดพลาดในการสร้าง

ข้อผิดพลาดเกี่ยวกับระบบไฟล์แบบอ่านอย่างเดียว (Android 17 ขึ้นไป)

ระหว่างการสร้าง โครงสร้างต้นทางของ AOSP จะเป็นแบบอ่านอย่างเดียว หากบิลด์ที่คุณกำลังเรียกใช้พยายามแก้ไขโครงสร้างต้นทางระหว่างการกำหนดค่าผลิตภัณฑ์หรือส่วนอื่นๆ ของบิลด์ บิลด์อาจล้มเหลวและรายงานข้อผิดพลาดเกี่ยวกับระบบไฟล์แบบอ่านอย่างเดียว คุณสามารถใช้ตัวเลือกต่อไปนี้เพื่อเปลี่ยนโครงสร้างต้นทางเป็นแบบอ่าน/เขียนชั่วคราว

  • หากต้องการเปลี่ยนโครงสร้างต้นทางทั้งหมดเป็นแบบอ่าน/เขียนระหว่างการสร้าง ให้เพิ่ม BUILD_BROKEN_SRC_DIR_IS_WRITABLE=true ลงในสภาพแวดล้อมของบิลด์

  • หากต้องการเปลี่ยนบางส่วนของโครงสร้างต้นไม้เป็นแบบอ่าน/เขียนระหว่างการบิลด์ ให้ใช้ BUILD_BROKEN_SRC_DIR_RW_ALLOWLIST="path1, path2, ..." เส้นทางควรเป็นเส้นทางของไดเรกทอรีที่ควรได้รับอนุญาตให้เขียน โดยสัมพันธ์กับด้านบนสุดของพื้นที่ทำงาน

Java เวอร์ชันไม่ถูกต้อง (Android 8.0 ลงไป)

หากคุณกำลังสร้าง Android 8.0 (ระดับ API 26) ลงไป m อาจยกเลิกเมื่อพบปัญหาเกี่ยวกับ Java เวอร์ชันของคุณ เช่น คุณอาจได้รับข้อความต่อไปนี้

************************************************************
You are attempting to build with the incorrect version of java.

Your version is: WRONG_VERSION.
The correct version is: RIGHT_VERSION.

Please follow the machine setup instructions at
https://source.android.com/source/initializing.html
************************************************************

สาเหตุและวิธีแก้ปัญหาที่เป็นไปได้มีดังนี้

  • ไม่ได้ติดตั้ง JDK ที่ถูกต้อง ดูข้อมูลเพิ่มเติมได้ที่ ตั้งค่าสำหรับการพัฒนา AOSP (2.3-8.0)
  • มี JDK อื่นที่ติดตั้งไว้ก่อนหน้านี้ปรากฏในเส้นทาง เพิ่ม JDK ที่ถูกต้องไว้ที่จุดเริ่มต้นของเส้นทางหรือนำ JDK ที่มีปัญหาออก