ใช้ข้อมูลในหน้านี้เพื่อสร้างไฟล์ Make สำหรับอุปกรณ์และผลิตภัณฑ์
โมดูล Android ใหม่แต่ละรายการต้องมีไฟล์การกําหนดค่าเพื่อควบคุมระบบการสร้างด้วยข้อมูลเมตาของโมดูล ไลบรารีที่ต้องอาศัยกันขณะคอมไพล์ และวิธีการจัดแพ็กเกจ Android ใช้ระบบบิลด์ Soong ดูข้อมูลเพิ่มเติมเกี่ยวกับระบบการสร้างของ Android ได้ที่การสร้าง Android
ทําความเข้าใจเลเยอร์การสร้าง
ลําดับชั้นของบิลด์ประกอบด้วยเลเยอร์การแยกความคิดที่สอดคล้องกับลักษณะทางกายภาพของอุปกรณ์ เลเยอร์เหล่านี้มีคำอธิบายอยู่ในตารางด้านล่าง แต่ละเลเยอร์จะเชื่อมโยงกับเลเยอร์ที่อยู่เหนือในความสัมพันธ์แบบ 1:หลาย เช่น สถาปัตยกรรมอาจมีบอร์ดมากกว่า 1 บอร์ด และแต่ละบอร์ดอาจมีผลิตภัณฑ์มากกว่า 1 รายการ คุณสามารถกําหนดองค์ประกอบในเลเยอร์หนึ่งๆ ว่าเป็นองค์ประกอบเฉพาะขององค์ประกอบในเลเยอร์เดียวกัน ซึ่งจะช่วยลดการคัดลอกและลดความซับซ้อนในการบํารุงรักษา
เลเยอร์ | ตัวอย่าง | คำอธิบาย |
---|---|---|
ผลิตภัณฑ์ | myProduct, myProduct_eu, myProduct_eu_fr, j2, sdk | เลเยอร์ผลิตภัณฑ์จะกำหนดข้อกำหนดฟีเจอร์ของผลิตภัณฑ์การจัดส่ง เช่น โมดูลที่จะสร้าง ภาษาที่รองรับ และการกำหนดค่าสำหรับภาษาต่างๆ กล่าวคือ ชื่อของผลิตภัณฑ์โดยรวม ตัวแปรเฉพาะผลิตภัณฑ์จะกำหนดไว้ในไฟล์ Make ของคำจำกัดความผลิตภัณฑ์ ผลิตภัณฑ์สามารถรับค่าจากนิยามผลิตภัณฑ์อื่นๆ ซึ่งทำให้การบำรุงรักษาง่ายขึ้น วิธีทั่วไปคือสร้างผลิตภัณฑ์พื้นฐานที่มีฟีเจอร์ที่ใช้กับผลิตภัณฑ์ทั้งหมด จากนั้นสร้างผลิตภัณฑ์ย่อยตามผลิตภัณฑ์พื้นฐานนั้น เช่น ผลิตภัณฑ์ 2 รายการที่แตกต่างกันเพียงที่วิทยุ (CDMA กับ GSM) สามารถรับค่าจากผลิตภัณฑ์พื้นฐานเดียวกันที่ไม่ได้กำหนดวิทยุ |
บอร์ด/อุปกรณ์ | มาร์ลิน เส้นสีน้ำเงิน ปะการัง | เลเยอร์แผงวงจร/อุปกรณ์แสดงเลเยอร์พลาสติกจริงบนอุปกรณ์ (นั่นคือการออกแบบอุตสาหกรรมของอุปกรณ์) เลเยอร์นี้ยังแสดงภาพร่างคร่าวๆ ของผลิตภัณฑ์ด้วย ซึ่งรวมถึงอุปกรณ์ต่อพ่วงบนแผงและการกำหนดค่า ชื่อที่ใช้เป็นเพียงรหัสสำหรับการกำหนดค่าบอร์ดและอุปกรณ์ต่างๆ |
ทรงโค้ง | arm, x86, arm64, x86_64 | เลเยอร์สถาปัตยกรรมจะอธิบายการกำหนดค่าโปรเซสเซอร์และอินเทอร์เฟซแบบไบนารีของแอปพลิเคชัน (ABI) ที่ทำงานอยู่บนบอร์ด |
ใช้ตัวแปรของบิวด์
เมื่อสร้างสำหรับผลิตภัณฑ์หนึ่งๆ คุณควรมีการเปลี่ยนแปลงเล็กน้อยในบิลด์รุ่นสุดท้าย ในคําจํากัดความของโมดูล โมดูลจะระบุแท็กด้วย LOCAL_MODULE_TAGS
ได้ ซึ่งอาจเป็นค่า optional
(ค่าเริ่มต้น), debug
และ eng
อย่างน้อย 1 ค่า
หากโมดูลไม่ได้ระบุแท็ก (โดย LOCAL_MODULE_TAGS
) ระบบจะตั้งค่าเริ่มต้นแท็กเป็น optional
ระบบจะติดตั้งโมดูลที่ไม่บังคับก็ต่อเมื่อการกำหนดค่าผลิตภัณฑ์ด้วย PRODUCT_PACKAGES
กำหนดให้ต้องติดตั้ง
ตัวแปรของบิวด์ที่กําหนดไว้ในปัจจุบัน
ตัวแปร | คำอธิบาย |
---|---|
eng
|
ซึ่งเป็นรสชาติเริ่มต้น
|
user
|
ตัวแปรที่มีไว้สำหรับเป็นบิตรุ่นสุดท้าย
|
userdebug
|
เหมือนกับ user โดยมีข้อยกเว้นต่อไปนี้
|
หลักเกณฑ์สำหรับ userdebug
การใช้บิลด์ userdebug ในการทดสอบจะช่วยให้นักพัฒนาอุปกรณ์เข้าใจประสิทธิภาพและความสามารถของรุ่นที่กำลังพัฒนา นักพัฒนาอุปกรณ์ควรปฏิบัติตามหลักเกณฑ์ต่อไปนี้เพื่อรักษาความสอดคล้องระหว่างบิลด์สำหรับผู้ใช้กับบิลด์ userdebug และเพื่อให้ได้เมตริกที่เชื่อถือได้ในบิลด์ที่ใช้สำหรับการแก้ไขข้อบกพร่อง
- userdebug หมายถึงบิลด์ผู้ใช้ที่เปิดใช้สิทธิ์เข้าถึงระดับรูท ยกเว้นในกรณีต่อไปนี้
- แอป userdebug เท่านั้นที่ผู้ใช้เรียกใช้ตามต้องการเท่านั้น
- การดำเนินการที่ทำงานเฉพาะระหว่างการบำรุงรักษาที่ไม่ได้ใช้งาน (ชาร์จอยู่/ชาร์จเต็มแล้ว) เช่น การใช้
dex2oatd
เทียบกับdex2oat
สำหรับการคอมไพล์ในเบื้องหลัง
- อย่าใส่ฟีเจอร์ที่เปิด/ปิดใช้โดยค่าเริ่มต้นตามประเภทบิลด์ เราขอแนะนำว่านักพัฒนาแอปไม่ควรใช้การบันทึกในรูปแบบใดก็ตามที่ส่งผลต่ออายุการใช้งานแบตเตอรี่ เช่น การบันทึกข้อบกพร่องหรือการถ่ายโอนข้อมูลฮีป
- คุณควรกำหนดฟีเจอร์การแก้ไขข้อบกพร่องที่เปิดใช้โดยค่าเริ่มต้นใน userdebug ให้ชัดเจนและแชร์กับนักพัฒนาแอปทุกคนที่ทำงานในโปรเจ็กต์ คุณควรเปิดใช้ฟีเจอร์การแก้ไขข้อบกพร่องเป็นระยะเวลาที่จำกัดเท่านั้นจนกว่าปัญหาที่พยายามแก้ไขจะได้รับการแก้ไข
ปรับแต่งบิลด์ด้วยการวางซ้อนทรัพยากร
ระบบบิลด์ของ Android ใช้การวางซ้อนทรัพยากรเพื่อปรับแต่งผลิตภัณฑ์เมื่อสร้าง การวางซ้อนทรัพยากรจะระบุไฟล์ทรัพยากรที่จะใช้ทับค่าเริ่มต้น หากต้องการใช้การวางซ้อนทรัพยากร ให้แก้ไขไฟล์บิลด์ของโปรเจ็กต์เพื่อตั้งค่า PRODUCT_PACKAGE_OVERLAYS
เป็นเส้นทางที่สัมพันธ์กับไดเรกทอรีระดับบนสุด เส้นทางนั้นจะกลายเป็นรูทเงาที่ระบบจะค้นหาพร้อมกับรูทปัจจุบันเมื่อระบบบิลด์ค้นหาทรัพยากร
การตั้งค่าที่ปรับแต่งโดยทั่วไปมีอยู่ในไฟล์ frameworks/base/core/res/res/values/config.xml
หากต้องการตั้งค่าการวางซ้อนทรัพยากรในไฟล์นี้ ให้เพิ่มไดเรกทอรีการวางซ้อนลงในไฟล์บิลด์ของโปรเจ็กต์โดยใช้คำสั่งใดคำสั่งหนึ่งต่อไปนี้
PRODUCT_PACKAGE_OVERLAYS := device/device-implementer/device-name/overlay
หรือ
PRODUCT_PACKAGE_OVERLAYS := vendor/vendor-name/overlay
จากนั้นเพิ่มไฟล์วางซ้อนลงในไดเรกทอรี เช่น
vendor/foobar/overlay/frameworks/base/core/res/res/values/config.xml
สตริงหรืออาร์เรย์สตริงที่พบในไฟล์วางซ้อน config.xml
จะแทนที่สตริงหรืออาร์เรย์สตริงที่พบในไฟล์ต้นฉบับ
สร้างผลิตภัณฑ์
คุณจัดระเบียบไฟล์ต้นฉบับสำหรับอุปกรณ์ได้หลายวิธี ต่อไปนี้เป็นคําอธิบายสั้นๆ เกี่ยวกับวิธีจัดระเบียบการติดตั้งใช้งานพิกเซล
Pixel ใช้การกำหนดค่าอุปกรณ์หลักชื่อ
marlin
จากการกำหนดค่าอุปกรณ์นี้ ระบบจะสร้างผลิตภัณฑ์ด้วยไฟล์ Make ที่ใช้กำหนดผลิตภัณฑ์ ซึ่งจะประกาศข้อมูลเฉพาะผลิตภัณฑ์เกี่ยวกับอุปกรณ์ เช่น ชื่อและรุ่น คุณสามารถดูไดเรกทอรี device/google/marlin
เพื่อดูวิธีตั้งค่าทั้งหมดนี้ได้
เขียนไฟล์ Make ของผลิตภัณฑ์
ขั้นตอนต่อไปนี้จะอธิบายวิธีตั้งค่าไฟล์ Make ของผลิตภัณฑ์ในลักษณะที่คล้ายกับของผลิตภัณฑ์ Pixel
- สร้าง
device/<company-name>/<device-name>
ไดเรกทอรีสำหรับผลิตภัณฑ์ของคุณ เช่นdevice/google/marlin
ไดเรกทอรีนี้จะมีซอร์สโค้ดสำหรับอุปกรณ์ของคุณพร้อมกับไฟล์ Make สำหรับสร้าง - สร้าง
device.mk
makefile ที่ประกาศไฟล์และโมดูลที่จําเป็นสําหรับอุปกรณ์ ดูตัวอย่างได้ที่device/google/marlin/device-marlin.mk
- สร้างไฟล์ Make ของคำจำกัดความผลิตภัณฑ์เพื่อสร้างผลิตภัณฑ์ที่เฉพาะเจาะจงตามอุปกรณ์ ไฟล์ makefile ต่อไปนี้นำมาจาก
device/google/marlin/aosp_marlin.mk
เป็นตัวอย่าง โปรดทราบว่าผลิตภัณฑ์รับค่าจากไฟล์device/google/marlin/device-marlin.mk
และvendor/google/marlin/device-vendor-marlin.mk
ผ่านไฟล์ makefile พร้อมกับประกาศข้อมูลเฉพาะผลิตภัณฑ์ เช่น ชื่อ แบรนด์ และรุ่น# Inherit from the common Open Source product configuration $(call inherit-product, $(SRC_TARGET_DIR)/product/core_64_bit.mk) $(call inherit-product, $(SRC_TARGET_DIR)/product/aosp_base_telephony.mk) PRODUCT_NAME := aosp_marlin PRODUCT_DEVICE := marlin PRODUCT_BRAND := Android PRODUCT_MODEL := AOSP on msm8996 PRODUCT_MANUFACTURER := Google PRODUCT_RESTRICT_VENDOR_FILES := true PRODUCT_COPY_FILES += device/google/marlin/fstab.common:$(TARGET_COPY_OUT_VENDOR)/etc/fstab.marlin $(call inherit-product, device/google/marlin/device-marlin.mk) $(call inherit-product-if-exists, vendor/google_devices/marlin/device-vendor-marlin.mk) PRODUCT_PACKAGES += \ Launcher3QuickStep \ WallpaperPicker
ดูการตั้งค่าตัวแปรคำจำกัดความผลิตภัณฑ์สำหรับตัวแปรเพิ่มเติมที่เฉพาะเจาะจงสำหรับผลิตภัณฑ์ซึ่งคุณสามารถเพิ่มลงในไฟล์ทำ
- สร้างไฟล์
AndroidProducts.mk
ที่ชี้ไปยังไฟล์ Make ของผลิตภัณฑ์ ในตัวอย่างนี้ คุณต้องใช้เฉพาะไฟล์ Make สำหรับคำจำกัดความผลิตภัณฑ์เท่านั้น ตัวอย่างด้านล่างมาจากdevice/google/marlin/AndroidProducts.mk
(ซึ่งมีทั้งมาร์ลิน ซึ่งเป็น Pixel และเซลฟ์ฟิช ซึ่งเป็น Pixel XL ซึ่งใช้การกำหนดค่าส่วนใหญ่ร่วมกัน)PRODUCT_MAKEFILES := \ $(LOCAL_DIR)/aosp_marlin.mk \ $(LOCAL_DIR)/aosp_sailfish.mk COMMON_LUNCH_CHOICES := \ aosp_marlin-userdebug \ aosp_sailfish-userdebug
- สร้างไฟล์
BoardConfig.mk
make ที่มีการกำหนดค่าเฉพาะบอร์ด ดูตัวอย่างได้ที่device/google/marlin/BoardConfig.mk
- สำหรับ Android 9 และต่ำกว่า เท่านั้น ให้สร้างไฟล์
vendorsetup.sh
เพื่อเพิ่มผลิตภัณฑ์ ("ชุดอาหารกลางวัน") ลงในบิลด์พร้อมกับตัวแปรบิลด์โดยคั่นด้วยขีดกลาง เช่นadd_lunch_combo <product-name>-userdebug
- เมื่อถึงขั้นตอนนี้ คุณสามารถสร้างผลิตภัณฑ์ย่อยเพิ่มเติมโดยอิงตามอุปกรณ์เครื่องเดียวกันได้
ตั้งค่าตัวแปรคำจำกัดความผลิตภัณฑ์
ระบบจะกำหนดตัวแปรเฉพาะผลิตภัณฑ์ไว้ในไฟล์ Make ของผลิตภัณฑ์ ตารางแสดงตัวแปรบางรายการที่จัดเก็บไว้ในไฟล์คำจำกัดความผลิตภัณฑ์
ตัวแปร | คำอธิบาย | ตัวอย่าง |
---|---|---|
PRODUCT_AAPT_CONFIG
|
การกําหนดค่า aapt รายการที่จะใช้เมื่อสร้างแพ็กเกจ
|
|
PRODUCT_BRAND
|
แบรนด์ (เช่น ผู้ให้บริการ) ที่ปรับแต่งซอฟต์แวร์ | |
PRODUCT_CHARACTERISTICS
|
aapt เพื่ออนุญาตให้เพิ่มทรัพยากรเฉพาะตัวแปรลงในแพ็กเกจ
|
tablet , nosdcard
|
PRODUCT_COPY_FILES
|
รายการคำที่คล้ายกับ source_path:destination_path ควรคัดลอกไฟล์ในเส้นทางต้นทางไปยังเส้นทางปลายทางเมื่อสร้างผลิตภัณฑ์นี้ กฎสำหรับขั้นตอนการทำสำเนาจะกำหนดไว้ใน config/makefile
|
|
PRODUCT_DEVICE
|
ชื่อการออกแบบเชิงอุตสาหกรรม ซึ่งก็คือชื่อบอร์ดด้วย และระบบบิลด์จะใช้ชื่อนี้เพื่อค้นหา BoardConfig.mk
|
tuna
|
PRODUCT_LOCALES
|
รายการรหัสภาษา 2 ตัวและรหัสประเทศ 2 ตัวที่คั่นด้วยเว้นวรรค ซึ่งอธิบายการตั้งค่าต่างๆ สำหรับผู้ใช้ เช่น ภาษา UI และรูปแบบเวลา วันที่ และสกุลเงิน ระบบจะใช้ภาษาแรกที่แสดงใน PRODUCT_LOCALES เป็นภาษาเริ่มต้นของผลิตภัณฑ์
|
en_GB , de_DE , es_ES , fr_CA
|
PRODUCT_MANUFACTURER
|
ชื่อผู้ผลิต |
acme
|
PRODUCT_MODEL
|
ชื่อที่ผู้ใช้ปลายทางมองเห็นสำหรับผลิตภัณฑ์ขั้นสุดท้าย | |
PRODUCT_NAME
|
ชื่อที่ผู้ใช้ปลายทางเห็นสำหรับผลิตภัณฑ์โดยรวม ปรากฏในหน้าจอการตั้งค่า > เกี่ยวกับ | |
PRODUCT_OTA_PUBLIC_KEYS
|
รายการคีย์สาธารณะแบบ OTA สำหรับผลิตภัณฑ์ | |
PRODUCT_PACKAGES
|
รายการ APK และโมดูลที่จะติดตั้ง | รายชื่อติดต่อในปฏิทิน |
PRODUCT_PACKAGE_OVERLAYS
|
ระบุว่าจะใช้ทรัพยากรเริ่มต้นหรือเพิ่มการวางซ้อนเฉพาะผลิตภัณฑ์หรือไม่ |
vendor/acme/overlay
|
PRODUCT_SYSTEM_PROPERTIES
|
รายการการกําหนดค่าพร็อพเพอร์ตี้ของระบบในรูปแบบ "key=value" สําหรับพาร์ติชันระบบ คุณสามารถตั้งค่าพร็อพเพอร์ตี้ระบบสำหรับพาร์ติชันอื่นๆ ผ่าน PRODUCT_<PARTITION>_PROPERTIES ดังที่แสดงใน PRODUCT_VENDOR_PROPERTIES สำหรับพาร์ติชันของผู้ให้บริการ ชื่อพาร์ติชันที่รองรับ ได้แก่ SYSTEM , VENDOR , ODM , SYSTEM_EXT และ PRODUCT
|
กำหนดค่าภาษาของระบบเริ่มต้นและตัวกรองภาษา
ใช้ข้อมูลนี้เพื่อกำหนดค่าตัวกรองภาษาเริ่มต้นและภาษาของระบบ จากนั้นเปิดใช้ตัวกรองภาษาสำหรับประเภทอุปกรณ์ใหม่
คุณสมบัติ
กำหนดค่าทั้งภาษาเริ่มต้นและตัวกรองภาษาของระบบโดยใช้พร็อพเพอร์ตี้ของระบบโดยเฉพาะ ดังนี้
ro.product.locale
: สำหรับการตั้งค่าภาษาเริ่มต้น โดยค่าเริ่มต้นจะตั้งค่าเป็นภาษาท้องถิ่นแรกในตัวแปรPRODUCT_LOCALES
แต่คุณสามารถลบล้างค่านั้นได้ (ดูข้อมูลเพิ่มเติมได้ที่ตารางการตั้งค่าตัวแปรคำจำกัดความผลิตภัณฑ์)ro.localization.locale_filter
: สําหรับการตั้งค่าตัวกรองภาษาโดยใช้นิพจน์ทั่วไปกับชื่อภาษา เช่น- ตัวกรองแบบรวม:
^(de-AT|de-DE|en|uk).*
- อนุญาตเฉพาะภาษาเยอรมัน (รูปแบบของเยอรมนีและออสเตรีย) ภาษาอังกฤษทุกรูปแบบ และยูเครน - ตัวกรองเฉพาะ:
^(?!de-IT|es).*
- ยกเว้นเยอรมัน (ตัวแปรอิตาลี) และตัวแปรทั้งหมดของภาษาสเปน
- ตัวกรองแบบรวม:
เปิดใช้ตัวกรองภาษา
หากต้องการเปิดใช้ตัวกรอง ให้ตั้งค่าสตริงพร็อพเพอร์ตี้ระบบ ro.localization.locale_filter
การตั้งค่าค่าพร็อพเพอร์ตี้ตัวกรองและภาษาเริ่มต้นผ่าน oem/oem.prop
ในระหว่างการปรับเทียบจากโรงงานจะช่วยให้คุณกำหนดค่าข้อจำกัดได้โดยไม่ต้องฝังตัวกรองลงในอิมเมจระบบ
ตรวจสอบว่าระบบเลือกพร็อพเพอร์ตี้เหล่านี้จากพาร์ติชัน OEM โดยการใส่ลงในตัวแปร PRODUCT_OEM_PROPERTIES
ตามที่ระบุไว้ด้านล่าง
# Delegation for OEM customization
PRODUCT_OEM_PROPERTIES += \
ro.product.locale \
ro.localization.locale_filter
จากนั้นในเวอร์ชันที่ใช้งานจริง ระบบจะเขียนค่าจริงลงใน oem/oem.prop
เพื่อให้สอดคล้องกับข้อกำหนดเป้าหมาย วิธีการนี้จะเก็บค่าเริ่มต้นไว้ในระหว่างการรีเซ็ตเป็นค่าเริ่มต้น ดังนั้นการตั้งค่าเริ่มต้นจะเหมือนกับการตั้งค่าครั้งแรกสำหรับผู้ใช้
ตั้งค่า ADB_VENDOR_KEYS เพื่อเชื่อมต่อผ่าน USB
ตัวแปรสภาพแวดล้อม ADB_VENDOR_KEYS
ช่วยให้ผู้ผลิตอุปกรณ์เข้าถึงบิลด์ที่แก้ไขข้อบกพร่องได้ (-userdebug และ -eng แต่ไม่ใช่ -user) ผ่าน adb โดยไม่ต้องให้สิทธิ์ด้วยตนเอง
โดยปกติแล้ว adb จะสร้างคีย์การตรวจสอบสิทธิ์ RSA ที่ไม่ซ้ำกันสำหรับคอมพิวเตอร์ไคลเอ็นต์แต่ละเครื่อง ซึ่งจะส่งไปยังอุปกรณ์ที่เชื่อมต่อ นี่คือคีย์ RSA ที่แสดงในกล่องโต้ตอบการให้สิทธิ์ adb หรือจะสร้างคีย์ที่รู้จักลงในอิมเมจระบบและแชร์คีย์กับไคลเอ็นต์ adb ก็ได้
ซึ่งมีประโยชน์สำหรับการพัฒนาระบบปฏิบัติการและโดยเฉพาะอย่างยิ่งสำหรับการทดสอบ เนื่องจากไม่ต้องโต้ตอบกับกล่องโต้ตอบการให้สิทธิ์ adb ด้วยตนเอง
หากต้องการสร้างคีย์ผู้ให้บริการ บุคคลหนึ่ง (มักเป็นผู้จัดการรุ่น) ควรทำดังนี้
- สร้างคู่คีย์โดยใช้
adb keygen
สำหรับอุปกรณ์ Google ทาง Google จะสร้างคู่คีย์ใหม่สำหรับระบบปฏิบัติการเวอร์ชันใหม่แต่ละเวอร์ชัน - ตรวจสอบคู่คีย์ในตําแหน่งใดตําแหน่งหนึ่งในลําดับชั้นแหล่งที่มา Google จะจัดเก็บข้อมูลดังกล่าวใน
vendor/google/security/adb/
เป็นต้น - ตั้งค่าตัวแปรบิลด์
PRODUCT_ADB_KEYS
ให้ชี้ไปยังไดเรกทอรีคีย์ Google ทําเช่นนี้โดยการเพิ่มไฟล์Android.mk
ในไดเรกทอรีคีย์ที่ระบุว่าPRODUCT_ADB_KEYS := $(LOCAL_PATH)/$(PLATFORM_VERSION).adb_key.pub
ซึ่งช่วยให้เราอย่าลืมสร้างคู่คีย์ใหม่สําหรับระบบปฏิบัติการแต่ละเวอร์ชัน
นี่คือไฟล์ Make ที่ Google ใช้ในไดเรกทอรีที่เราจัดเก็บคู่คีย์ที่เช็คอินไว้สำหรับรุ่นแต่ละรุ่น
PRODUCT_ADB_KEYS := $(LOCAL_PATH)/$(PLATFORM_VERSION).adb_key.pub ifeq ($(wildcard $(PRODUCT_ADB_KEYS)),) $(warning ========================) $(warning The adb key for this release) $(warning ) $(warning $(PRODUCT_ADB_KEYS)) $(warning ) $(warning does not exist. Most likely PLATFORM_VERSION in build/core/version_defaults.mk) $(warning has changed and a new adb key needs to be generated.) $(warning ) $(warning Please run the following commands to create a new key:) $(warning ) $(warning make -j8 adb) $(warning LOGNAME=android-eng HOSTNAME=google.com adb keygen $(patsubst %.pub,%,$(PRODUCT_ADB_KEYS))) $(warning ) $(warning and upload/review/submit the changes) $(warning ========================) $(error done) endif
หากต้องการใช้คีย์ของผู้ให้บริการเหล่านี้ วิศวกรเพียงต้องตั้งค่าตัวแปรสภาพแวดล้อม ADB_VENDOR_KEYS
ให้ชี้ไปยังไดเรกทอรีที่จัดเก็บคู่คีย์
ซึ่งจะบอก adb
ให้ลองใช้คีย์แคนอนิกเหล่านี้ก่อน จากนั้นจึงเปลี่ยนไปใช้คีย์โฮสต์ที่สร้างขึ้นซึ่งต้องมีการให้สิทธิ์ด้วยตนเอง เมื่อ adb
เชื่อมต่อกับอุปกรณ์ที่ไม่ได้รับอนุญาตไม่ได้ ข้อความแสดงข้อผิดพลาดจะแนะนำให้คุณตั้งค่า ADB_VENDOR_KEYS
หากยังไม่ได้ตั้งค่า