อิมเมจระบบปฏิบัติการ Android ใช้ลายเซ็นเข้ารหัสในสองแห่ง:
- ไฟล์
.apk
แต่ละไฟล์ภายในรูปภาพจะต้องมีการลงนาม Package Manager ของ Android ใช้ลายเซ็น.apk
ในสองวิธี:- เมื่อแอปพลิเคชันถูกแทนที่ จะต้องลงนามด้วยคีย์เดียวกันกับแอปพลิเคชันเก่าจึงจะสามารถเข้าถึงข้อมูลของแอปพลิเคชันเก่าได้ สิ่งนี้ถือเป็นจริงทั้งสำหรับการอัปเดตแอปผู้ใช้โดยการเขียนทับ
.apk
และสำหรับการแทนที่แอประบบด้วยเวอร์ชันที่ใหม่กว่าที่ติดตั้งไว้ภายใต้/data
- หากแอปพลิเคชันตั้งแต่สองตัวขึ้นไปต้องการแชร์ ID ผู้ใช้ (เพื่อให้สามารถแชร์ข้อมูลได้ ฯลฯ) แอปพลิเคชันเหล่านั้นจะต้องลงนามด้วยคีย์เดียวกัน
- เมื่อแอปพลิเคชันถูกแทนที่ จะต้องลงนามด้วยคีย์เดียวกันกับแอปพลิเคชันเก่าจึงจะสามารถเข้าถึงข้อมูลของแอปพลิเคชันเก่าได้ สิ่งนี้ถือเป็นจริงทั้งสำหรับการอัปเดตแอปผู้ใช้โดยการเขียนทับ
- แพ็คเกจการอัปเดต OTA จะต้องลงนามด้วยคีย์ใดคีย์หนึ่งที่ระบบคาดหวัง ไม่เช่นนั้นกระบวนการติดตั้งจะปฏิเสธคีย์เหล่านั้น
ปล่อยกุญแจ
แผนผัง Android มี คีย์การทดสอบ ภายใต้ build/target/product/security
การสร้างอิมเมจระบบปฏิบัติการ Android โดยใช้ make
จะลงนามไฟล์ .apk
ทั้งหมดโดยใช้คีย์ทดสอบ เนื่องจากคีย์ทดสอบเป็นที่รู้จักอย่างเปิดเผย ใครๆ ก็สามารถเซ็นชื่อไฟล์ .apk ของตนเองด้วยคีย์เดียวกันได้ ซึ่งอาจอนุญาตให้พวกเขาแทนที่หรือแย่งชิงแอประบบที่สร้างไว้ในอิมเมจ OS ของคุณได้ ด้วยเหตุนี้ จึงจำเป็นอย่างยิ่งที่จะต้องลงนามอิมเมจ Android OS ที่เผยแพร่ต่อสาธารณะหรือปรับใช้ด้วยชุด คีย์การเผยแพร่ พิเศษที่คุณเท่านั้นที่สามารถเข้าถึงได้
หากต้องการสร้างชุดคีย์การเปิดตัวเฉพาะของคุณเอง ให้รันคำสั่งเหล่านี้จากรากของแผนผัง Android ของคุณ:
subject='/C=US/ST=California/L=Mountain View/O=Android/OU=Android/CN=Android/emailAddress=android@android.com'
mkdir ~/.android-certs
for x in releasekey platform shared media networkstack; do \ ./development/tools/make_key ~/.android-certs/$x "$subject"; \ done
$subject
ควรมีการเปลี่ยนแปลงเพื่อให้สะท้อนถึงข้อมูลขององค์กรของคุณ คุณสามารถใช้ไดเร็กทอรีใดก็ได้ แต่ควรระมัดระวังในการเลือกตำแหน่งที่สำรองข้อมูลและปลอดภัย ผู้จำหน่ายบางรายเลือกที่จะเข้ารหัสคีย์ส่วนตัวด้วยข้อความรหัสผ่านที่รัดกุม และจัดเก็บคีย์ที่เข้ารหัสไว้ในการควบคุมแหล่งที่มา บางรายเก็บกุญแจปลดล็อคไว้ที่อื่นทั้งหมด เช่น บนคอมพิวเตอร์ที่มีช่องว่างอากาศ
หากต้องการสร้างอิมเมจการเปิดตัว ให้ใช้:
make dist
sign_target_files_apks \ -o \ # explained in the next section --default_key_mappings ~/.android-certs out/dist/*-target_files-*.zip \ signed-target_files.zip
สคริปต์ sign_target_files_apks
รับไฟล์เป้าหมาย .zip
เป็นอินพุตและสร้างไฟล์เป้าหมายใหม่ .zip
ซึ่งไฟล์ .apk
ทั้งหมดได้รับการลงนามด้วยคีย์ใหม่ รูปภาพที่ลงนามใหม่สามารถพบได้ภายใต้ IMAGES/
ใน signed-target_files.zip
ลงนามแพ็คเกจ OTA
zip ไฟล์เป้าหมายที่ลงนามแล้วสามารถแปลงเป็น zip อัพเดต OTA ที่ลงนามได้โดยใช้ขั้นตอนต่อไปนี้:
ota_from_target_files \
-k (--package_key)
signed-target_files.zip \
signed-ota_update.zip
ลายเซ็นและการไซด์โหลด
Sideloading จะไม่ข้ามกลไกการตรวจสอบลายเซ็นแพ็คเกจปกติของการกู้คืน ก่อนที่จะติดตั้งแพ็คเกจ การกู้คืนจะตรวจสอบว่ามีการเซ็นชื่อด้วยคีย์ส่วนตัวตัวใดตัวหนึ่งที่ตรงกับคีย์สาธารณะที่จัดเก็บไว้ในพาร์ติชั่นการกู้คืน เช่นเดียวกับที่ทำกับแพ็คเกจที่จัดส่งผ่าน -อากาศ.
โดยทั่วไปแพ็คเกจการอัปเดตที่ได้รับจากระบบหลักจะได้รับการตรวจสอบสองครั้ง: หนึ่งครั้งโดยระบบหลัก โดยใช้วิธี RecoverySystem.verifyPackage()
ใน Android API และอีกครั้งโดยการกู้คืน RecoverySystem API ตรวจสอบลายเซ็นกับคีย์สาธารณะที่จัดเก็บไว้ในระบบหลักในไฟล์ /system/etc/security/otacerts.zip
(ตามค่าเริ่มต้น) การกู้คืนจะตรวจสอบลายเซ็นเทียบกับคีย์สาธารณะที่จัดเก็บไว้ในดิสก์ RAM ของพาร์ติชันการกู้คืนในไฟล์ /res/keys
ตามค่าเริ่มต้น ไฟล์เป้าหมาย .zip
ที่สร้างโดยบิลด์จะตั้งค่าใบรับรอง OTA ให้ตรงกับคีย์ทดสอบ ในอิมเมจที่เผยแพร่ ต้องใช้ใบรับรองอื่นเพื่อให้อุปกรณ์สามารถตรวจสอบความถูกต้องของแพ็คเกจอัพเดตได้ การส่งแฟล็ก -o
ไปที่ sign_target_files_apks
ดังที่แสดงในส่วนก่อนหน้า จะแทนที่ใบรับรองคีย์การทดสอบด้วยใบรับรองคีย์ release จากไดเร็กทอรีใบรับรองของคุณ
โดยปกติอิมเมจระบบและอิมเมจการกู้คืนจะจัดเก็บคีย์สาธารณะ OTA ชุดเดียวกัน ด้วยการเพิ่มคีย์ให้กับชุดการกู้คืนของคีย์ เท่านั้น จึงเป็นไปได้ที่จะลงนามแพ็คเกจที่สามารถติดตั้งผ่านไซด์โหลดเท่านั้น (สมมติว่ากลไกการดาวน์โหลดการอัปเดตของระบบหลักทำการตรวจสอบความถูกต้องกับ otacerts.zip อย่างถูกต้อง) คุณสามารถระบุคีย์พิเศษที่จะรวมไว้ในการกู้คืนเท่านั้นโดยการตั้งค่าตัวแปร PRODUCT_EXTRA_RECOVERY_KEYS ในคำจำกัดความผลิตภัณฑ์ของคุณ:
vendor/yoyodyne/tardis/products/tardis.mk
[...] PRODUCT_EXTRA_RECOVERY_KEYS := vendor/yoyodyne/security/tardis/sideload
ซึ่งรวมถึง vendor/yoyodyne/security/tardis/sideload.x509.pem
ในไฟล์คีย์การกู้คืน เพื่อให้สามารถติดตั้งแพ็คเกจที่ลงนามด้วยได้ คีย์พิเศษจะ ไม่ รวมอยู่ใน otacerts.zip ดังนั้นระบบที่ตรวจสอบแพ็กเกจที่ดาวน์โหลดอย่างถูกต้องจะไม่เรียกใช้การกู้คืนสำหรับแพ็กเกจที่เซ็นชื่อด้วยคีย์นี้
ใบรับรองและคีย์ส่วนตัว
แต่ละคีย์มาในสองไฟล์: ใบรับรอง ซึ่งมีนามสกุล .x509.pem และ คีย์ส่วนตัว ซึ่งมีนามสกุล .pk8 รหัสส่วนตัวควรถูกเก็บเป็นความลับและจำเป็นสำหรับการลงนามในแพ็คเกจ ตัวกุญแจอาจได้รับการป้องกันด้วยรหัสผ่าน ในทางตรงกันข้าม ใบรับรองจะมีเพียงครึ่งหนึ่งของคีย์สาธารณะ จึงสามารถเผยแพร่ในวงกว้างได้ ใช้เพื่อตรวจสอบว่าแพ็กเกจได้รับการลงนามโดยคีย์ส่วนตัวที่เกี่ยวข้อง
บิลด์ Android มาตรฐานใช้ห้าคีย์ ซึ่งทั้งหมดอยู่ใน build/target/product/security
:
- คีย์ทดสอบ
- คีย์เริ่มต้นทั่วไปสำหรับแพ็คเกจที่ไม่ได้ระบุคีย์เป็นอย่างอื่น
- แพลตฟอร์ม
- รหัสทดสอบสำหรับแพ็คเกจที่เป็นส่วนหนึ่งของแพลตฟอร์มหลัก
- แบ่งปัน
- ทดสอบคีย์สำหรับสิ่งต่าง ๆ ที่ใช้ร่วมกันในกระบวนการโฮม/ผู้ติดต่อ
- สื่อ
- รหัสทดสอบสำหรับแพ็คเกจที่เป็นส่วนหนึ่งของสื่อ/ระบบดาวน์โหลด
แต่ละแพ็คเกจจะระบุหนึ่งในคีย์เหล่านี้โดยการตั้งค่า LOCAL_CERTIFICATE ในไฟล์ Android.mk (ใช้คีย์ทดสอบหากไม่ได้ตั้งค่าตัวแปรนี้) คุณยังสามารถระบุคีย์ที่แตกต่างอย่างสิ้นเชิงด้วยชื่อพาธ เช่น:
device/yoyodyne/apps/SpecialApp/Android.mk
[...] LOCAL_CERTIFICATE := device/yoyodyne/security/special
ตอนนี้บิลด์ใช้คีย์ device/yoyodyne/security/special.{x509.pem,pk8}
เพื่อลงนาม SpecialApp.apk โครงสร้างสามารถใช้ได้เฉพาะคีย์ส่วนตัวที่ ไม่มี การป้องกันด้วยรหัสผ่าน
ตัวเลือกการลงนามขั้นสูง
การเปลี่ยนคีย์การลงนาม APK
สคริปต์การลงนาม sign_target_files_apks
ทำงานบนไฟล์เป้าหมายที่สร้างขึ้นสำหรับบิลด์ ข้อมูลทั้งหมดเกี่ยวกับใบรับรองและคีย์ส่วนตัวที่ใช้ในขณะสร้างจะรวมอยู่ในไฟล์เป้าหมาย เมื่อเรียกใช้สคริปต์ลงนามเพื่อลงนามเพื่อเผยแพร่ คีย์การลงนามสามารถถูกแทนที่ตามชื่อคีย์หรือชื่อ APK
ใช้แฟล็ก --key_mapping
และ --default_key_mappings
เพื่อระบุการแทนที่คีย์ตามชื่อคีย์:
- ธง
--key_mapping src_key = dest_key
ระบุการแทนที่คีย์เดียวในแต่ละครั้ง - แฟล็ก
--default_key_mappings dir
ระบุไดเร็กทอรีที่มีคีย์ห้าคีย์เพื่อแทนที่คีย์ทั้งหมดในbuild/target/product/security
เทียบเท่ากับการใช้--key_mapping
ห้าครั้งเพื่อระบุการแมป
build/target/product/security/testkey = dir/releasekey build/target/product/security/platform = dir/platform build/target/product/security/shared = dir/shared build/target/product/security/media = dir/media build/target/product/security/networkstack = dir/networkstack
ใช้ --extra_apks apk_name1,apk_name2,... = key
คีย์ เพื่อระบุการแทนที่คีย์การเซ็นชื่อตามชื่อ APK หากปล่อย key
ว่างไว้ สคริปต์จะถือว่า APK ที่ระบุเป็นแบบลงนามล่วงหน้า
สำหรับผลิตภัณฑ์ควานหาสมมุติ คุณต้องมีคีย์ที่มีการป้องกันด้วยรหัสผ่านหกคีย์: ห้าคีย์เพื่อแทนที่ห้าคีย์ใน build/target/product/security
และอีกหนึ่งคีย์เพื่อแทนที่ device/yoyodyne/security/special
SpecialApp ต้องการในตัวอย่างข้างต้น หากคีย์อยู่ในไฟล์ต่อไปนี้:
vendor/yoyodyne/security/tardis/releasekey.x509.pem vendor/yoyodyne/security/tardis/releasekey.pk8 vendor/yoyodyne/security/tardis/platform.x509.pem vendor/yoyodyne/security/tardis/platform.pk8 vendor/yoyodyne/security/tardis/shared.x509.pem vendor/yoyodyne/security/tardis/shared.pk8 vendor/yoyodyne/security/tardis/media.x509.pem vendor/yoyodyne/security/tardis/media.pk8 vendor/yoyodyne/security/tardis/networkstack.x509.pem vendor/yoyodyne/security/tardis/networkstack.pk8 vendor/yoyodyne/security/special.x509.pem vendor/yoyodyne/security/special.pk8 # NOT password protected vendor/yoyodyne/security/special-release.x509.pem vendor/yoyodyne/security/special-release.pk8 # password protected
จากนั้นคุณจะต้องเซ็นชื่อแอปทั้งหมดดังนี้:
./build/make/tools/releasetools/sign_target_files_apks \
--default_key_mappings vendor/yoyodyne/security/tardis \
--key_mapping vendor/yoyodyne/security/special=vendor/yoyodyne/security/special-release \
--extra_apks PresignedApp= \
-o tardis-target_files.zip \
signed-tardis-target_files.zip
สิ่งนี้จะแสดงสิ่งต่อไปนี้:
Enter password for vendor/yoyodyne/security/special-release key> Enter password for vendor/yoyodyne/security/tardis/networkstack key> Enter password for vendor/yoyodyne/security/tardis/media key> Enter password for vendor/yoyodyne/security/tardis/platform key> Enter password for vendor/yoyodyne/security/tardis/releasekey key> Enter password for vendor/yoyodyne/security/tardis/shared key> signing: Phone.apk (vendor/yoyodyne/security/tardis/platform) signing: Camera.apk (vendor/yoyodyne/security/tardis/media) signing: NetworkStack.apk (vendor/yoyodyne/security/tardis/networkstack) signing: Special.apk (vendor/yoyodyne/security/special-release) signing: Email.apk (vendor/yoyodyne/security/tardis/releasekey) [...] signing: ContactsProvider.apk (vendor/yoyodyne/security/tardis/shared) signing: Launcher.apk (vendor/yoyodyne/security/tardis/shared) NOT signing: PresignedApp.apk (skipped due to special cert string) rewriting SYSTEM/build.prop: replace: ro.build.description=tardis-user Eclair ERC91 15449 test-keys with: ro.build.description=tardis-user Eclair ERC91 15449 release-keys replace: ro.build.fingerprint=generic/tardis/tardis/tardis:Eclair/ERC91/15449:user/test-keys with: ro.build.fingerprint=generic/tardis/tardis/tardis:Eclair/ERC91/15449:user/release-keys signing: framework-res.apk (vendor/yoyodyne/security/tardis/platform) rewriting RECOVERY/RAMDISK/default.prop: replace: ro.build.description=tardis-user Eclair ERC91 15449 test-keys with: ro.build.description=tardis-user Eclair ERC91 15449 release-keys replace: ro.build.fingerprint=generic/tardis/tardis/tardis:Eclair/ERC91/15449:user/test-keys with: ro.build.fingerprint=generic/tardis/tardis/tardis:Eclair/ERC91/15449:user/release-keys using: vendor/yoyodyne/security/tardis/releasekey.x509.pem for OTA package verification done.
หลังจากแจ้งให้ผู้ใช้ป้อนรหัสผ่านสำหรับคีย์ที่มีการป้องกันด้วยรหัสผ่านแล้ว สคริปต์จะลงนามไฟล์ APK ทั้งหมดในเป้าหมายอินพุต .zip
ด้วยคีย์ปลดล็อค ก่อนที่จะรันคำสั่ง คุณยังสามารถตั้งค่าตัวแปรสภาพแวดล้อม ANDROID_PW_FILE
เป็นชื่อไฟล์ชั่วคราวได้ จากนั้นสคริปต์จะเรียกใช้โปรแกรมแก้ไขของคุณเพื่อให้คุณสามารถป้อนรหัสผ่านสำหรับคีย์ทั้งหมด (ซึ่งอาจเป็นวิธีที่สะดวกกว่าในการป้อนรหัสผ่าน)
การเปลี่ยนกุญแจลงนาม APEX
Android 10 แนะนำ รูปแบบไฟล์ APEX สำหรับการติดตั้งโมดูลระบบระดับล่าง ตามที่อธิบายไว้ใน APEX Signing ไฟล์ APEX แต่ละไฟล์จะถูกเซ็นชื่อด้วยสองคีย์: อันหนึ่งสำหรับอิมเมจระบบไฟล์ขนาดเล็กภายใน APEX และอีกอันสำหรับ APEX ทั้งหมด
เมื่อเซ็นชื่อเพื่อรีลีส คีย์การลงนามทั้งสองคีย์สำหรับไฟล์ APEX จะถูกแทนที่ด้วยคีย์รีลีส คีย์เพย์โหลดระบบไฟล์ถูกระบุด้วยแฟล็ก --extra_apex_payload
และคีย์การเซ็นชื่อไฟล์ APEX ทั้งหมดถูกระบุด้วยแฟล็ก --extra_apks
สำหรับผลิตภัณฑ์ควานหา สมมติว่าคุณมีการกำหนดค่าคีย์ต่อไปนี้สำหรับไฟล์ com.android.conscrypt.apex
, com.android.media.apex
และ com.android.runtime.release.apex
APEX
name="com.android.conscrypt.apex" public_key="PRESIGNED" private_key="PRESIGNED" container_certificate="PRESIGNED" container_private_key="PRESIGNED" name="com.android.media.apex" public_key="PRESIGNED" private_key="PRESIGNED" container_certificate="PRESIGNED" container_private_key="PRESIGNED" name="com.android.runtime.release.apex" public_key="vendor/yoyodyne/security/testkeys/com.android.runtime.avbpubkey" private_key="vendor/yoyodyne/security/testkeys/com.android.runtime.pem" container_certificate="vendor/yoyodyne/security/testkeys/com.google.android.runtime.release_container.x509.pem" container_private_key="vendor/yoyodyne/security/testkeys/com.google.android.runtime.release_container.pk8"
และคุณมีไฟล์ต่อไปนี้ที่มีปุ่มปลดล็อค:
vendor/yoyodyne/security/runtime_apex_container.x509.pem vendor/yoyodyne/security/runtime_apex_container.pk8 vendor/yoyodyne/security/runtime_apex_payload.pem
คำสั่งต่อไปนี้จะแทนที่คีย์การเซ็นชื่อสำหรับ com.android.runtime.release.apex
และ com.android.tzdata.apex
ระหว่างการลงนามรีลีส โดยเฉพาะอย่างยิ่ง com.android.runtime.release.apex
ได้รับการลงนามด้วยคีย์รีลีสที่ระบุ ( runtime_apex_container
สำหรับไฟล์ APEX และ runtime_apex_payload
สำหรับเพย์โหลดอิมเมจของไฟล์) com.android.tzdata.apex
ถือเป็นการลงนามล่วงหน้า ไฟล์ APEX อื่นๆ ทั้งหมดได้รับการจัดการโดยการกำหนดค่าเริ่มต้นตามที่ระบุไว้ในไฟล์เป้าหมาย
./build/make/tools/releasetools/sign_target_files_apks \
--default_key_mappings vendor/yoyodyne/security/tardis \
--extra_apks com.android.runtime.release.apex=vendor/yoyodyne/security/runtime_apex_container \
--extra_apex_payload_key com.android.runtime.release.apex=vendor/yoyodyne/security/runtime_apex_payload.pem \
--extra_apks com.android.media.apex= \
--extra_apex_payload_key com.android.media.apex= \
-o tardis-target_files.zip \
signed-tardis-target_files.zip
การรันคำสั่งด้านบนจะให้บันทึกต่อไปนี้:
[...] signing: com.android.runtime.release.apex container (vendor/yoyodyne/security/runtime_apex_container) : com.android.runtime.release.apex payload (vendor/yoyodyne/security/runtime_apex_payload.pem) NOT signing: com.android.conscrypt.apex (skipped due to special cert string) NOT signing: com.android.media.apex (skipped due to special cert string) [...]
ตัวเลือกอื่น
สคริปต์การเซ็นชื่อ sign_target_files_apks
จะเขียนคำอธิบายบิลด์และลายนิ้วมือใหม่ในไฟล์คุณสมบัติบิลด์เพื่อแสดงว่าบิลด์นั้นเป็นบิลด์ที่ลงนาม ธง --tag_changes
ควบคุมการแก้ไขที่ทำกับลายนิ้วมือ รันสคริปต์ด้วย -h
เพื่อดูเอกสารเกี่ยวกับแฟล็กทั้งหมด
สร้างคีย์ด้วยตนเอง
Android ใช้คีย์ RSA 2048 บิตพร้อมเลขชี้กำลังสาธารณะ 3 คุณสามารถสร้างคู่ใบรับรอง/คีย์ส่วนตัวโดยใช้เครื่องมือ openssl จาก openssl.org :
# generate RSA keyopenssl genrsa -3 -out temp.pem 2048
Generating RSA private key, 2048 bit long modulus ....+++ .....................+++ e is 3 (0x3) # create a certificate with the public part of the keyopenssl req -new -x509 -key temp.pem -out releasekey.x509.pem -days 10000 -subj '/C=US/ST=California/L=San Narciso/O=Yoyodyne, Inc./OU=Yoyodyne Mobility/CN=Yoyodyne/emailAddress=yoyodyne@example.com'
# create a PKCS#8-formatted version of the private keyopenssl pkcs8 -in temp.pem -topk8 -outform DER -out releasekey.pk8 -nocrypt
# securely delete the temp.pem fileshred --remove temp.pem
คำสั่ง openssl pkcs8 ที่ให้ไว้ข้างต้นจะสร้างไฟล์ .pk8 ที่ ไม่มี รหัสผ่าน เหมาะสำหรับใช้กับระบบบิลด์ หากต้องการสร้าง .pk8 ที่ปลอดภัยด้วยรหัสผ่าน (ซึ่งคุณควรทำกับคีย์รีลีสจริงทั้งหมด) ให้แทนที่อาร์กิวเมนต์ -nocrypt
ด้วย -passout stdin
; จากนั้น openssl จะเข้ารหัสคีย์ส่วนตัวด้วยรหัสผ่านที่อ่านจากอินพุตมาตรฐาน ไม่มีการพิมพ์พรอมต์ ดังนั้นหาก stdin เป็นเทอร์มินัล โปรแกรมจะปรากฏขึ้นเพื่อหยุดทำงานทั้งๆ ที่จริงๆ แล้วเป็นเพียงการรอให้คุณป้อนรหัสผ่าน ค่าอื่นๆ สามารถใช้สำหรับอาร์กิวเมนต์-passout เพื่ออ่านรหัสผ่านจากตำแหน่งอื่น สำหรับรายละเอียด โปรดดู เอกสารประกอบ openssl
ไฟล์ระดับกลาง temp.pem มีคีย์ส่วนตัวที่ไม่มีการป้องกันด้วยรหัสผ่าน ดังนั้นควรกำจัดทิ้งอย่างระมัดระวังเมื่อสร้างคีย์ปลดล็อค โดยเฉพาะอย่างยิ่งยูทิลิตี้ GNUshred อาจไม่มีผลกับเครือข่ายหรือระบบไฟล์ที่ถูกเจอร์นัล คุณสามารถใช้ไดเร็กทอรีการทำงานที่อยู่ในดิสก์ RAM (เช่น พาร์ติชัน tmpfs) เมื่อสร้างคีย์เพื่อให้แน่ใจว่าตัวกลางจะไม่ถูกเปิดเผยโดยไม่ได้ตั้งใจ
สร้างไฟล์รูปภาพ
เมื่อคุณได้ signed-target_files.zip
แล้ว คุณจะต้องสร้างภาพเพื่อให้สามารถใส่ลงในอุปกรณ์ได้ หากต้องการสร้างอิมเมจที่เซ็นชื่อจากไฟล์เป้าหมาย ให้รันคำสั่งต่อไปนี้จากรากของแผนผัง Android:
img_from_target_files signed-target_files.zip signed-img.zipไฟล์ผลลัพธ์
signed-img.zip
มีไฟล์ .img
ทั้งหมด หากต้องการโหลดรูปภาพลงในอุปกรณ์ ให้ใช้ fastboot ดังนี้:fastboot update signed-img.zip