การสร้าง Android

ทำตามคำแนะนำเหล่านี้เพื่อเริ่มสร้าง Android

การตั้งค่าสภาพแวดล้อม

เริ่มต้นสภาพแวดล้อมด้วยสคริปต์ envsetup.sh :

source build/envsetup.sh

หรือ

. build/envsetup.sh

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

คุณต้องออกคำสั่งนี้ใหม่หลังจาก repo sync ทุกครั้งเพื่อรับการเปลี่ยนแปลงใดๆ กับสคริปต์นั้น โปรดทราบว่าการแทนที่ source ด้วย . (จุดเดียว) บันทึกอักขระไม่กี่ตัว และแบบสั้นมักใช้ในเอกสารประกอบ

สคริปต์ envsetup.sh นำเข้าคำสั่งต่างๆ ที่ทำให้คุณสามารถทำงานกับซอร์สโค้ดของ Android รวมถึงคำสั่งที่ใช้ในแบบฝึกหัดนี้

หากต้องการดูรายการคำสั่งที่มีทั้งหมด ให้รัน:

hmm

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

อาหารกลางวัน

เลือกเป้าหมายที่จะสร้างด้วย lunch lunch product_name - build_variant เลือก product_name เป็นผลิตภัณฑ์ที่จะสร้าง และ build_variant เป็นตัวแปรที่จะสร้าง และจัดเก็บการเลือกเหล่านั้นในสภาพแวดล้อมที่จะอ่านโดยการเรียกใช้คำสั่ง m และคำสั่งอื่นๆ ที่คล้ายคลึงกันในภายหลัง

การกำหนดค่าที่แน่นอนสามารถส่งเป็นอาร์กิวเมนต์ได้ ตัวอย่างเช่น คำสั่งต่อไปนี้อ้างถึงบิลด์ที่สมบูรณ์สำหรับอีมูเลเตอร์ โดยเปิดใช้งานการดีบักทั้งหมด:

lunch aosp_arm-eng

หากทำงานโดยไม่มีข้อโต้แย้ง lunch จะแจ้งให้คุณเลือกเป้าหมายจากเมนู แต่โปรดทราบว่าเมนูนี้ไม่ได้รวมทุกความเป็นไปได้ ดู การเลือกรุ่นอุปกรณ์ สำหรับการกำหนดค่ารุ่นของอุปกรณ์ทั้งหมดที่รองรับใน AOSP หรือพูดคุยกับคนในทีมของคุณเกี่ยวกับอาหารกลางวันที่ถูกต้องสำหรับอุปกรณ์ที่คุณกำลังทำงานอยู่

เป้าหมายของบิลด์ทั้งหมดอยู่ในรูปแบบ BUILD-BUILDTYPE โดยที่ BUILD เป็นชื่อรหัสที่อ้างอิงถึงชุดคุณลักษณะเฉพาะ BUILDTYPE เป็นหนึ่งในรายการต่อไปนี้

ประเภทการสร้าง ใช้
ผู้ใช้ การเข้าถึงที่ จำกัด ; เหมาะสำหรับการผลิต
การแก้ไขข้อบกพร่องของผู้ใช้ เช่นเดียวกับผู้ใช้ แต่มีความสามารถในการเข้าถึงรูทและดีบัก ใกล้เคียงกับประสิทธิภาพการผลิต
อังกฤษ การกำหนดค่าการพัฒนาด้วยเวลาในการสร้างที่เร็วขึ้น เหมาะสมที่สุดสำหรับการพัฒนาวันต่อวัน

บิลด์ userdebug ควรทำงานเหมือนกับบิลด์ user โดยมีความสามารถในการเปิดใช้การดีบั๊กเพิ่มเติมที่ปกติจะละเมิดโมเดลความปลอดภัยของแพลตฟอร์ม สิ่งนี้ทำให้ userdebug สร้างได้ดีสำหรับการทำความเข้าใจประสิทธิภาพและพลังงานที่ใช้โดยรีลีส เมื่อพัฒนาด้วย userdebug build ให้ทำตาม แนวทาง userdebug

การสร้าง eng ให้ความสำคัญกับประสิทธิภาพทางวิศวกรรมสำหรับวิศวกรที่ทำงานบนแพลตฟอร์ม โครงสร้าง eng จะปิดการปรับให้เหมาะสมต่างๆ ที่ใช้เพื่อเพิ่มประสิทธิภาพของรันไทม์ให้สูงสุด มิฉะนั้น eng build จะคล้ายกับ user และ userdebug builds เพื่อให้ผู้พัฒนาอุปกรณ์เห็นว่าโค้ดทำงานอย่างไรในสภาพแวดล้อมเหล่านั้น

หากต้องการดูการตั้งค่าอาหารกลางวันปัจจุบัน ให้รันคำสั่ง:

echo "$TARGET_PRODUCT-$TARGET_BUILD_VARIANT"

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการสร้างและการรันบนฮาร์ดแวร์จริง โปรดดูที่ Flashing Devices

ทาปาส

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

เรียกใช้ tapas help สำหรับข้อมูลเพิ่มเติมเกี่ยวกับคำสั่ง

สร้างรหัส

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

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

m

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

  • droid - m droid เป็นรุ่นปกติ เป้าหมายนี้อยู่ที่นี่เนื่องจากเป้าหมายเริ่มต้นต้องการชื่อ
  • all - m all สร้างทุกอย่างที่ m droid ทำ รวมถึงทุกอย่างที่ไม่มีแท็ก droid เซิร์ฟเวอร์บิลด์เรียกใช้สิ่งนี้เพื่อให้แน่ใจว่าทุกอย่างที่อยู่ในแผนผังและมีไฟล์ Android.mk สร้างขึ้น
  • m - เรียกใช้บิลด์จากด้านบนของทรี สิ่งนี้มีประโยชน์เพราะคุณสามารถเรียกใช้ make จากภายในไดเร็กทอรีย่อย หากคุณมีชุดตัวแปรสภาพแวดล้อม TOP จะใช้สิ่งนั้น หากคุณไม่ค้นหา ต้นไม้จะค้นหาจากไดเร็กทอรีปัจจุบัน พยายามหาจุดสูงสุดของต้นไม้ คุณสามารถสร้างแผนผังซอร์สโค้ดทั้งหมดได้โดยการรัน m โดยไม่มีอาร์กิวเมนต์หรือสร้างเป้าหมายเฉพาะโดยระบุชื่อ
  • mma - สร้างโมดูลทั้งหมดในไดเร็กทอรีปัจจุบันและการอ้างอิง
  • mmma - สร้างโมดูลทั้งหมดในไดเร็กทอรีที่ให้มาและการอ้างอิง
  • croot - cd ไปที่ด้านบนของต้นไม้
  • clean - m clean ลบเอาต์พุตและไฟล์กลางทั้งหมดสำหรับการกำหนดค่านี้ นี้เหมือนกับ rm -rf out/

เรียกใช้ m help เพื่อดูว่า pseudotargets m ๆ ที่ให้ไว้

กำลังดำเนินการสร้าง

คุณสามารถเรียกใช้งานสร้างของคุณบนโปรแกรมจำลองหรือแฟลชบนอุปกรณ์ เนื่องจากคุณได้เลือกเป้าหมายงานสร้างพร้อม lunch จึงไม่น่าจะทำงานบนเป้าหมายอื่นนอกเหนือจากที่สร้างขึ้นมา

กระพริบด้วย fastboot

หากต้องการแฟลชอุปกรณ์ ให้ใช้ fastboot ซึ่งควรรวมอยู่ในเส้นทางของคุณหลังจากสร้างสำเร็จ ดูคำแนะนำใน การแฟลชอุปกรณ์

เลียนแบบอุปกรณ์ Android

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

emulator

ทำความเข้าใจเกี่ยวกับการสร้างลายนิ้วมือ

ในการติดตามและรายงานปัญหาที่เกี่ยวข้องกับรุ่น Android โดยเฉพาะ สิ่งสำคัญคือต้องเข้าใจลายนิ้วมือของรุ่น ลายนิ้วมือสำหรับรุ่นเป็นสตริงที่ไม่ซ้ำกันและมนุษย์สามารถอ่านได้ซึ่งมีข้อมูลของผู้ผลิตที่ออกให้กับแต่ละรุ่น ดูคำอธิบาย FINGERPRINT ภายในส่วน Build Parameters ของเอกสารคำจำกัดความความเข้ากันได้ของ Android (CDD) สำหรับไวยากรณ์ที่แม่นยำ

ลายนิ้วมือบิลด์แสดงถึงการใช้งานและการแก้ไขเฉพาะของ Android รหัสเฉพาะนี้ช่วยให้นักพัฒนาแอปและผู้อื่นสามารถรายงานปัญหาเกี่ยวกับเวอร์ชันเฟิร์มแวร์เฉพาะได้ ดู การรายงานข้อบกพร่อง สำหรับกระบวนการรายงานปัญหาของ Android

ลายนิ้วมือบิลด์สรุปรายละเอียดการใช้งาน Android ทั้งหมด:

  • APIs: Android และเนทีฟ รวมถึงลักษณะการทำงานของ Soft API
  • Core API และพฤติกรรม UI ของระบบบางอย่าง
  • ข้อกำหนดด้านความเข้ากันได้และความปลอดภัยที่กำหนดไว้ใน CDD
  • ข้อมูลจำเพาะของผลิตภัณฑ์และการตั้งค่า คุณสมบัติการใช้ งานที่แอพใช้เพื่อกำหนดเป้าหมายอุปกรณ์ที่ตรงตามข้อกำหนดที่คาดไว้
  • การใช้งานส่วนประกอบฮาร์ดแวร์และซอฟต์แวร์

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

การแก้ไขปัญหาข้อผิดพลาดทั่วไปของบิลด์

เวอร์ชัน Java ไม่ถูกต้อง

หากคุณพยายามสร้างเวอร์ชันของ Android ที่ไม่สอดคล้องกับเวอร์ชัน Java ของคุณ make ยกเลิกด้วยข้อความเช่น:

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

ไม่ได้รับอนุญาตจาก USB

ตามค่าเริ่มต้นในระบบ Linux ส่วนใหญ่ ผู้ใช้ที่ไม่มีสิทธิพิเศษจะไม่สามารถเข้าถึงพอร์ต USB ได้ หากคุณเห็นข้อผิดพลาดการอนุญาตถูกปฏิเสธ ให้ทำตามคำแนะนำใน การกำหนดค่าการเข้าถึง USB

หาก ADB ทำงานอยู่แล้วและไม่สามารถเชื่อมต่อกับอุปกรณ์ได้หลังจากตั้งค่ากฎเหล่านั้นแล้ว คุณสามารถปิดการทำงานด้วย adb kill-server คำสั่งนั้นทำให้ ADB รีสตาร์ทด้วยการกำหนดค่าใหม่