เพิ่มอุปกรณ์ใหม่

ใช้ข้อมูลในหน้านี้เพื่อสร้างไฟล์ Makefile สำหรับอุปกรณ์และ ผลิตภัณฑ์

โมดูล Android ใหม่แต่ละโมดูลต้องมีไฟล์กำหนดค่าเพื่อสั่งให้ระบบบิลด์ มีข้อมูลเมตาของโมดูล, Dependency เวลาคอมไพล์ และวิธีการแพ็กเกจ Android ใช้ ระบบบิลด์ Soong ดูข้อมูลเพิ่มเติมเกี่ยวกับระบบบิลด์ของ Android ได้ที่การสร้าง Android

ทำความเข้าใจเลเยอร์การสร้าง

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

เลเยอร์ ตัวอย่าง คำอธิบาย
ผลิตภัณฑ์ myProduct, myProduct_eu, myProduct_eu_fr, j2, sdk เลเยอร์ผลิตภัณฑ์จะกำหนดข้อกำหนดฟีเจอร์ของผลิตภัณฑ์การจัดส่ง เช่น โมดูลที่จะสร้าง ภาษาที่รองรับ และการกำหนดค่าสำหรับภาษาต่างๆ กล่าวคือ ชื่อ ของผลิตภัณฑ์โดยรวม ตัวแปรเฉพาะผลิตภัณฑ์จะกำหนดไว้ใน ไฟล์ Makefile ของคำจำกัดความผลิตภัณฑ์ ผลิตภัณฑ์สามารถรับค่าจากคำจำกัดความผลิตภัณฑ์อื่นๆ ได้ ซึ่งจะช่วยให้การบำรุงรักษาง่ายขึ้น วิธีที่นิยมใช้ คือการสร้างผลิตภัณฑ์ฐานที่มีฟีเจอร์ที่ใช้กับ ผลิตภัณฑ์ทั้งหมด จากนั้นสร้างผลิตภัณฑ์ย่อยตามผลิตภัณฑ์ ฐานนั้น ตัวอย่างเช่น ผลิตภัณฑ์ 2 รายการที่แตกต่างกันเพียง วิทยุ (CDMA กับ GSM) สามารถสืบทอดมาจากผลิตภัณฑ์ฐานเดียวกันที่ ไม่ได้กำหนดวิทยุ
บอร์ด/อุปกรณ์ มาร์ลิน บลูไลน์ คอรัล เลเยอร์บอร์ด/อุปกรณ์แสดงเลเยอร์พลาสติกจริงบน อุปกรณ์ (นั่นคือการออกแบบอุตสาหกรรมของอุปกรณ์) เลเยอร์นี้ยังแสดงแผนผังแบบ เปลือยของผลิตภัณฑ์ด้วย ซึ่งรวมถึงอุปกรณ์ต่อพ่วงบนบอร์ดและการกำหนดค่า ชื่อที่ใช้เป็นเพียงรหัสสำหรับการกำหนดค่าบอร์ด/อุปกรณ์ต่างๆ
ทรงโค้ง arm, x86, arm64, x86_64 เลเยอร์สถาปัตยกรรมอธิบายการกำหนดค่าโปรเซสเซอร์และ อินเทอร์เฟซแบบไบนารีของแอปพลิเคชัน (ABI) ที่ทำงานบนบอร์ด

ใช้ตัวแปรของบิวด์

เมื่อสร้างสำหรับผลิตภัณฑ์ใดผลิตภัณฑ์หนึ่ง การมีรูปแบบย่อย ในบิลด์รุ่นสุดท้ายจะเป็นประโยชน์ ในคำจำกัดความของโมดูล โมดูลสามารถระบุแท็กที่มี LOCAL_MODULE_TAGS ซึ่งอาจเป็นค่าอย่างน้อย 1 ค่าของ optional (ค่าเริ่มต้น) debug และ eng

หากโมดูลไม่ได้ระบุแท็ก (โดย LOCAL_MODULE_TAGS) แท็กของโมดูลจะใช้ค่าเริ่มต้นเป็น optional ระบบจะติดตั้งโมดูลที่ไม่บังคับก็ต่อเมื่อ การกำหนดค่าผลิตภัณฑ์ต้องใช้โมดูลดังกล่าวกับ PRODUCT_PACKAGES

ตัวแปรของบิวด์ที่กำหนดไว้ในปัจจุบัน

ตัวแปร คำอธิบาย
eng ซึ่งเป็นรสชาติเริ่มต้น
  • ติดตั้งโมดูลที่ติดแท็กด้วย eng หรือ debug
  • ติดตั้งโมดูลตามไฟล์คำจำกัดความผลิตภัณฑ์ นอกเหนือจากโมดูลที่ติดแท็ก
  • ro.secure=0
  • ro.debuggable=1
  • ro.kernel.android.checkjni=1
  • adb จะเปิดใช้อยู่โดยค่าเริ่มต้น
user ตัวแปรที่ตั้งใจให้เป็นบิตของรุ่นสุดท้าย
  • ติดตั้งโมดูลที่ติดแท็กด้วย user
  • ติดตั้งโมดูลตามไฟล์คำจำกัดความผลิตภัณฑ์ นอกเหนือจากโมดูลที่ติดแท็ก
  • ro.secure=1
  • ro.debuggable=0
  • adb จะปิดใช้อยู่โดยค่าเริ่มต้น
userdebug เหมือนกับ user โดยมีข้อยกเว้นดังนี้
  • นอกจากนี้ยังติดตั้งโมดูลที่ติดแท็กด้วย debug ด้วย
  • ro.debuggable=1
  • adb จะเปิดใช้อยู่โดยค่าเริ่มต้น

หลักเกณฑ์สำหรับ 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 จากการกำหนดค่าอุปกรณ์นี้ ระบบจะสร้างผลิตภัณฑ์ที่มี ไฟล์ Makefile สำหรับคำจำกัดความของผลิตภัณฑ์ซึ่งประกาศข้อมูลเฉพาะของผลิตภัณฑ์เกี่ยวกับ อุปกรณ์ เช่น ชื่อและรุ่น คุณดูdevice/google/marlinไดเรกทอรีเพื่อดูวิธีตั้งค่าทั้งหมดนี้ได้

เขียนไฟล์ Make ของผลิตภัณฑ์

ขั้นตอนต่อไปนี้จะอธิบายวิธีตั้งค่าไฟล์ Makefile ของผลิตภัณฑ์ในลักษณะที่คล้ายกับ กลุ่มผลิตภัณฑ์ Pixel

  1. สร้างไดเรกทอรี device/<company-name>/<device-name> สำหรับผลิตภัณฑ์ ของคุณ เช่น device/google/marlin ไดเรกทอรีนี้จะมีซอร์สโค้ด สำหรับอุปกรณ์ของคุณพร้อมกับไฟล์ Makefile เพื่อสร้างซอร์สโค้ด
  2. สร้าง device.mkmakefile ที่ประกาศไฟล์และโมดูลที่จำเป็นสำหรับ อุปกรณ์ ดูตัวอย่างได้ที่ device/google/marlin/device-marlin.mk
  3. สร้างไฟล์ Makefile สำหรับคำจำกัดความผลิตภัณฑ์เพื่อสร้างผลิตภัณฑ์ที่เฉพาะเจาะจงตามอุปกรณ์ 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
    

    ดูการตั้งค่าตัวแปรคำจำกัดความผลิตภัณฑ์สำหรับตัวแปรเพิ่มเติม ที่เฉพาะเจาะจงสำหรับผลิตภัณฑ์ซึ่งคุณเพิ่มลงในไฟล์ Makefile ได้

  4. สร้างAndroidProducts.mkไฟล์ที่ชี้ไปยังไฟล์ Makefile ของผลิตภัณฑ์ ใน ตัวอย่างนี้ คุณต้องใช้เฉพาะไฟล์ Makefile ของคำจำกัดความผลิตภัณฑ์ ตัวอย่างด้านล่างมาจาก device/google/marlin/AndroidProducts.mk (ซึ่งมีทั้ง marlin, Pixel และ sailfish, Pixel XL ซึ่งใช้การกำหนดค่าส่วนใหญ่ร่วมกัน)
    PRODUCT_MAKEFILES := \
    	$(LOCAL_DIR)/aosp_marlin.mk \
    	$(LOCAL_DIR)/aosp_sailfish.mk
    
    COMMON_LUNCH_CHOICES := \
    	aosp_marlin-userdebug \
    	aosp_sailfish-userdebug
    
  5. สร้าง BoardConfig.mk makefile ที่มีการกำหนดค่าเฉพาะบอร์ด ดูตัวอย่างได้ที่ device/google/marlin/BoardConfig.mk
  6. สำหรับ Android 9 และเวอร์ชันที่ต่ำกว่าเท่านั้น ให้สร้างไฟล์ vendorsetup.sh เพื่อเพิ่มผลิตภัณฑ์ (ชุดอาหารกลางวัน) ลงใน บิลด์พร้อมกับตัวแปรบิลด์ โดยคั่นด้วยขีดกลาง เช่น
    add_lunch_combo <product-name>-userdebug
    
  7. ตอนนี้คุณสามารถสร้างผลิตภัณฑ์ย่อยเพิ่มเติมโดยอิงตามอุปกรณ์เดียวกันได้แล้ว

ตั้งค่าตัวแปรคำจำกัดความผลิตภัณฑ์

ตัวแปรเฉพาะผลิตภัณฑ์จะกำหนดไว้ใน Makefile ของผลิตภัณฑ์ ตารางแสดงตัวแปรบางส่วน ที่เก็บไว้ในไฟล์คำจำกัดความผลิตภัณฑ์

ตัวแปร คำอธิบาย ตัวอย่าง
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 รายการคีย์สาธารณะแบบ Over-the-Air (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 ก็ได้ ซึ่งมีประโยชน์สำหรับการพัฒนา OS และโดยเฉพาะอย่างยิ่งสำหรับการทดสอบ เนื่องจากช่วยให้ไม่ต้องโต้ตอบกับกล่องโต้ตอบการให้สิทธิ์ adb ด้วยตนเอง

หากต้องการสร้างคีย์ผู้ให้บริการ บุคคลหนึ่ง (โดยปกติคือผู้จัดการการเผยแพร่) ควรทำดังนี้

  1. สร้างคู่คีย์โดยใช้ adb keygen สำหรับอุปกรณ์ Google นั้น Google จะสร้างคู่คีย์ใหม่ สำหรับระบบปฏิบัติการแต่ละเวอร์ชันใหม่
  2. ตรวจสอบคู่คีย์ในที่ใดที่หนึ่งในโครงสร้างแหล่งที่มา Google จะจัดเก็บไว้ใน vendor/google/security/adb/ เช่น
  3. ตั้งค่าตัวแปรบิลด์ PRODUCT_ADB_KEYS ให้ชี้ไปยังไดเรกทอรีคีย์ Google ทำเช่นนี้โดยการเพิ่มไฟล์ Android.mk ในไดเรกทอรีคีย์ซึ่งระบุว่า PRODUCT_ADB_KEYS := $(LOCAL_PATH)/$(PLATFORM_VERSION).adb_key.pub ซึ่ง ช่วยให้เราไม่ลืมที่จะสร้างคู่คีย์ใหม่สำหรับแต่ละเวอร์ชันของระบบปฏิบัติการ

นี่คือไฟล์ Makefile ที่ 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 ให้ลองใช้คีย์ Canonical เหล่านี้ก่อน แล้วจึงใช้คีย์โฮสต์ที่สร้างขึ้น ซึ่งต้องมีการให้สิทธิ์ด้วยตนเอง เมื่อ adb เชื่อมต่อกับอุปกรณ์ที่ไม่ได้รับอนุญาตไม่ได้ ข้อความแสดงข้อผิดพลาดจะแนะนำให้คุณตั้งค่า ADB_VENDOR_KEYS หากยังไม่ได้ตั้งค่า