zipalign

zipalign เป็นเครื่องมือจัดตำแหน่งไฟล์ ZIP ที่ช่วยให้มั่นใจได้ว่าไฟล์ที่ไม่ได้บีบอัดทั้งหมด ในที่เก็บถาวร จะปรับแนวที่สัมพันธ์กับส่วนต้นของไฟล์ ซึ่งจะช่วยให้เข้าถึงไฟล์ได้โดยตรงผ่าน mmap(2) ทำให้ไม่จำเป็นต้องคัดลอกข้อมูลนี้ใน RAM และลดการใช้หน่วยความจำของแอป

ใช้ zipalign เพื่อเพิ่มประสิทธิภาพไฟล์ APK ของคุณก่อนเผยแพร่ ผู้ใช้ปลายทาง หากคุณสร้างโดยใช้ Android Studio ซึ่งใช้ปลั๊กอิน Android Gradle (AGP) ทำโดยอัตโนมัติ ในกรณีนี้ คุณควรใช้ zipalign เพื่อยืนยันว่า APK อยู่ในแนวเดียวกัน แต่คุณไม่จำเป็นต้องจัดวาง เอกสารนี้มีไว้สำหรับผู้ดูแล ระบบการสร้างที่กำหนดเอง

ข้อควรระวัง: คุณต้องใช้ zipalign ณ เวลาที่เฉพาะเจาะจงใน ขั้นตอนการสร้าง จุดนี้ขึ้นอยู่กับเครื่องมือลงนามแอปที่คุณใช้ ดังนี้

  • หากคุณใช้ apksigner, zipalign จะต้องใช้ก่อนที่ไฟล์ APK จะได้รับการลงนาม หากคุณลงนาม APK ที่ใช้ apksigner และทำการเปลี่ยนแปลงเพิ่มเติมกับ APK ลายเซ็นของ APK จะใช้งานไม่ได้
  • หากคุณใช้ jarsigner (ไม่แนะนำ) ต้องใช้ zipalign หลังจากไฟล์ APK ได้รับการลงนามแล้ว

เพื่อปรับให้ตรงกัน zipalign จะปรับขนาดของช่อง "extra" ในส่วนหัวของไฟล์ในเครื่อง ZIP กระบวนการนี้ยังปรับเปลี่ยนข้อมูลที่มีอยู่ในช่อง "extra" ได้ด้วย

การใช้งาน

หาก APK ของคุณมีไลบรารีที่แชร์ (.so ไฟล์) ให้ใช้ -P 16 เพื่อให้มั่นใจว่ามิติข้อมูลอยู่ในแนวเดียวกับขอบเขตหน้า 16KiB ที่เหมาะกับ mmap(2) ในอุปกรณ์ 16KiB และ 4KiB สำหรับไฟล์อื่นๆ ซึ่งระบบจะกำหนดการจัดข้อความตาม อาร์กิวเมนต์การจัดแนวที่จำเป็นกับ zipalign ควรสอดคล้องกับขนาด 4 ไบต์ ทั้งในระบบ 32 บิตและ 64 บิต

หากต้องการปรับแนว infile.apk และบันทึกเป็น outfile.apk ให้ทำดังนี้

zipalign -P 16 -f -v 4 infile.apk outfile.apk

หากต้องการยืนยันการจัดข้อความ existing.apk ให้ใช้คำสั่งต่อไปนี้

zipalign -c -P 16 -v 4 existing.apk

ตัวเลือก

ตารางต่อไปนี้แสดงตัวเลือก zipalign ที่ใช้ได้

ตัวเลือก คำอธิบาย
-ค ตรวจสอบเฉพาะการจัดแนวข้อความ (ไม่แก้ไขไฟล์)
-f เขียนทับไฟล์เอาต์พุตที่มีอยู่
-ชม. แสดงความช่วยเหลือของเครื่องมือ
-P <pagesize_kb> จัดเรียงไฟล์ .so ที่ไม่ได้บีบอัดให้เท่ากับขนาดหน้าที่ระบุใน KiB ตัวเลือกที่ใช้ได้ สำหรับ <pagesize_kb> เท่ากับ 4, 16 และ 64
-P ไฟล์ .so ที่จัดอยู่ในแนวเดียวกับหน้า 4KiB ที่ไม่ได้บีบอัด ขอแนะนำให้ใช้ -P 16แทน เนื่องจาก -p เลิกใช้งานแล้ว
-v เอาต์พุตแบบละเอียด
-z บีบอัดอีกครั้งโดยใช้ Zopfli