ทำตามวิธีการในหน้านี้เพื่อสร้าง 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_huskyproduct_nameเฉพาะของคุณอาจเป็นไปตามรูปแบบของคุณเองสำหรับอุปกรณ์ แต่รูปแบบที่ Google ใช้กับอุปกรณ์ของตนเองมีคอมโพเนนต์ต่อไปนี้aospหมายถึงแพลตฟอร์ม Android Open Source- (ไม่บังคับ)
cfจะรวมอยู่ด้วยเมื่อเป้าหมายมีไว้เพื่อเรียกใช้ภายในโปรแกรมจำลอง Cuttlefish - สถาปัตยกรรมและฮาร์ดแวร์ (ชื่อรหัส) เช่น
x86_64_only_phoneหรือhuskyซึ่งเป็นชื่อรหัสของ Pixel 8 Pro ดูรายการชื่อรหัสสำหรับ อุปกรณ์ Google ได้ที่ชื่อรหัสของอุปกรณ์
release_configตั้งค่าเป็น การกำหนดค่า เช่น การกำหนดค่าการเผยแพร่เพื่อการพัฒนาที่เรียกว่าaosp_currentการกำหนดค่าการเผยแพร่จะระบุฟีเจอร์และโค้ดบางอย่างที่อยู่เบื้องหลังแฟล็กการเปิดตัวฟีเจอร์ และจะเปิดหรือปิดใช้สำหรับการสร้าง ดูข้อมูลเพิ่มเติมเกี่ยวกับการกำหนดค่าการเผยแพร่ได้ที่ ตั้งค่าค่าการเปิดตัวแฟล็กฟีเจอร์ส่วน
build_variantของสตริงอาจเป็นค่าใดค่าหนึ่งใน 3 ค่าในตารางต่อไปนี้build_variantคำอธิบาย userตัวแปรบิลด์นี้ให้สิทธิ์เข้าถึงความปลอดภัยแบบจำกัดและเหมาะสำหรับ การใช้งานจริง userdebugตัวแปรบิลด์นี้ช่วยให้นักพัฒนาอุปกรณ์ เข้าใจประสิทธิภาพและพลังงานของเวอร์ชันที่อยู่ระหว่างการพัฒนา เมื่อ พัฒนาด้วยบิลด์
userdebugให้ทำตามหลักเกณฑ์สำหรับ userdebugeng| ตัวแปรบิลด์นี้มีเวลาบิลด์ที่เร็วกว่าและเหมาะที่สุดสำหรับการพัฒนาในแต่ละวัน หากคุณไม่กังวลเรื่องประสิทธิภาพและพลังงาน
หากคุณเรียกใช้ lunch โดยไม่มีอาร์กิวเมนต์ ระบบจะแสดงรายการเป้าหมายทั่วไป
นอกจากนี้ คุณยังสร้างสตริงเป้าหมายของคุณเองได้ด้วยการรวมองค์ประกอบของ
สตริงเป้าหมายเข้าด้วยกันโดยใช้ข้อมูลในหน้านี้และชื่อรหัส
ที่แสดงฮาร์ดแวร์เฉพาะของ Google ที่ ชื่อรหัสของอุปกรณ์
ดูเป้าหมายปัจจุบัน
หากต้องการดูการตั้งค่า 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 ระหว่างการสร้าง
การพยายามสร้างทำให้เกิดข้อผิดพลาดของระบบไฟล์แบบอ่านอย่างเดียว
ระหว่างการสร้าง โครงสร้างซอร์สโค้ดของ AOSP จะเป็นแบบอ่านอย่างเดียว หากบิลด์ที่คุณกำลังเรียกใช้พยายามแก้ไขโครงสร้างซอร์สโค้ดระหว่างการกำหนดค่าผลิตภัณฑ์หรือส่วนอื่นๆ ของบิลด์ บิลด์อาจล้มเหลวและรายงานข้อผิดพลาดของระบบไฟล์แบบอ่านอย่างเดียว คุณสามารถใช้ตัวเลือกต่อไปนี้เพื่อเปลี่ยนโครงสร้างซอร์สโค้ดเป็นแบบอ่าน-เขียนชั่วคราว
หากต้องการเปลี่ยนโครงสร้างซอร์สโค้ดทั้งหมดเป็นแบบอ่าน-เขียนระหว่างการสร้าง ให้เพิ่ม
BUILD_BROKEN_SRC_DIR_IS_WRITABLE=trueลงในสภาพแวดล้อมในการสร้างหากต้องการเปลี่ยนบางส่วนของโครงสร้างเป็นแบบอ่าน-เขียนระหว่างการบิลด์ ให้ใช้
BUILD_BROKEN_SRC_DIR_RW_ALLOWLIST="path1, path2, ..."เส้นทางควรเป็นเส้นทางของไดเรกทอรีที่ควรได้รับอนุญาตให้เขียน โดยสัมพันธ์กับด้านบนสุดของพื้นที่ทำงาน
แก้ข้อผิดพลาดในการสร้าง (8.0 หรือต่ำกว่า)
หากคุณกำลังสร้าง AOSP 8 หรือต่ำกว่า 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 ไม่ถูกต้องตามที่ระบุไว้ในส่วน JDK ของ ตั้งค่าสำหรับการพัฒนา AOSP (2.3 - 8.0)
- มี JDK อื่นที่ติดตั้งไว้ก่อนหน้านี้ปรากฏในเส้นทาง ให้เพิ่ม JDK ที่ถูกต้องไว้ที่จุดเริ่มต้นของเส้นทางหรือนำ JDK ที่มีปัญหาออก