การสร้าง 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 build ดีสำหรับการทำความเข้าใจประสิทธิภาพและพลังงานที่ใช้โดยรีลีส เมื่อพัฒนาด้วย build userdebug ให้ปฏิบัติตาม แนวทาง userdebug

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

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

echo "$TARGET_PRODUCT-$TARGET_BUILD_VARIANT"

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

ทาปาส

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

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

การสร้างรหัส

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

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

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 เพื่อดูว่าเป้าหมายหลอก m ให้อะไรอีก

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

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

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

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

การจำลองอุปกรณ์ Android

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

emulator

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

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

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

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

  • API: Android และ Native รวมถึงพฤติกรรม 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 รีสตาร์ทด้วยการกำหนดค่าใหม่