วิธีแก้ไขไฟล์ APK ที่เสียหายและแตกไฟล์

A smartphone showing a file error with a small toolbox, illustrating fixing a corrupt APK

คุณใช้เวลาหลายชั่วโมงในการดาวน์โหลดชุดเกม 2GB เพียงเพื่อให้เบราว์เซอร์ของคุณแจ้งว่า "ดาวน์โหลดล้มเหลว" ที่ 99% หรือแย่กว่านั้น สำหรับ Android ที่กรีดร้อง "ข้อผิดพลาดในการแยกวิเคราะห์: มีปัญหาในการแยกวิเคราะห์แพ็คเกจ" APK ที่เสียหายไม่จำเป็นต้องเป็นไฟล์ที่เสียหาย เนื่องจาก APK สร้างขึ้นบนมาตรฐานการบีบอัด ZIP จึงมักจะสามารถซ่อมแซมได้ อย่างน้อยก็เพียงพอที่จะดึงทรัพย์สินอันมีค่าภายในออกมา

ด้านล่างนี้เราจะพูดถึงสิ่งที่เสียหายจริงๆ ภายใน APK เครื่องมือซ่อมแซมที่ควรค่าแก่การเข้าถึง และวิธีที่ โปรแกรมแปลงไฟล์ XAPK ของเราสามารถช่วยได้เมื่อคุณจัดการกับชุดรวมที่เสียหาย

TL;ดร. สรุปห้าวินาที: APK ที่เสียหายส่วนใหญ่มีความเสียหายในไดเรกทอรีกลาง ZIP หรือใน classes.dex. ความเสียหายระดับ ZIP สามารถซ่อมแซมได้ด้วย zip -FF หรือ 7-Zip ความเสียหายระดับ DEX ไม่ใช่; ในกรณีนั้น ให้กู้คืนเนื้อหาที่คุณสามารถทำได้และดาวน์โหลด APK ที่ปลอดภัยอีกครั้ง zipalign ข้อผิดพลาดไม่ใช่ความเสียหายจริงและได้รับการแก้ไขในคำสั่งเดียว

กายวิภาคของการทุจริต APK

APK นั้นเป็นไฟล์ ZIP ที่มีโครงสร้างเฉพาะ การทุจริตมักเกิดขึ้นที่หนึ่งในสามแห่ง:

  1. ส่วนหัว: ไบต์ที่จุดเริ่มต้นของไฟล์หายไปหรือมีการเปลี่ยนแปลง
  2. รายการ (XML): AndroidManifest.xml มีรูปแบบไม่ถูกต้องหรือใช้การเข้ารหัสที่ไม่รองรับ
  3. รหัส DEX: ไบต์ Java/Kotlin จริงถูกตัดทอน ทำให้แอปไม่สามารถทำงานได้

วิธีที่ 1: การซ่อมแซม ZIP ที่ไม่มีหัว (ง่ายที่สุด)

หากไฟล์ "อ่านได้" แต่ไม่สามารถเปิดได้ ให้ใช้เครื่องมือเช่น การซ่อมแซม ZIP ของ DiskInternals (ฟรี) หรือคำสั่ง zip -FF บรรทัดคำสั่งใน Linux/macOS เครื่องมือเหล่านี้จะสแกนไฟล์เพื่อหา "ลายเซ็น" ของไฟล์และสร้างไดเร็กทอรีกลางใหม่ตั้งแต่ต้น

รหัสสำหรับผู้ใช้ Terminal: zip -FF corrupt_app.apk --out fixed_app.apk

วิธีที่ 2: การแก้ไข Zipalign/Alignment

บางครั้ง APK "เสียหาย" เพียงเพราะไม่ได้จัดแนวตามขอบเขตขนาด 4 ไบต์ การจัดการหน่วยความจำของ Android ต้องการสิ่งนี้ คุณสามารถแก้ไขได้โดยใช้เครื่องมือ ซิปไลน์ จาก Android SDK:

zipalign -v 4 input.apk output.apk

คำเตือน Bit-Rot

หากไฟล์ DEX (คลาส.เด็กซ์) ไม่มีข้อมูล การซ่อมแซม ZIP จะทำให้แอปทำงานได้ ในกรณีนี้ เป้าหมายเดียวของคุณควรคือการแยก สินทรัพย์/ทรัพยากร และค้นหาสำเนาใหม่ของแอป

จะบอกได้อย่างไรว่ามีอะไรผิดปกติจริงๆ

ก่อนที่คุณจะเลือกเครื่องมือซ่อมแซม ให้ระบุความล้มเหลว ข้อความแสดงข้อผิดพลาดที่ Android (หรือเครื่องมือเก็บถาวรของคุณ) แสดงมักเป็นเบาะแส:

อาการที่คุณเห็น. มันมักจะหมายถึงอะไร สิ่งที่ต้องลองก่อน
"การแยกวิเคราะห์แพ็คเกจ" ล้มเหลว (Android) ไดเรกทอรีกลาง ZIP ไม่สามารถอ่านได้ หรือเวอร์ชันไฟล์ Manifest ไม่ตรงกัน การซ่อมแซมส่วนหัว ZIP (วิธีที่ 1)
"เกิดปัญหาในการแยกวิเคราะห์แพ็กเกจ" + APK เล็กกว่าที่คาดไว้เล็กน้อย การดาวน์โหลดที่ถูกตัดทอน: KB สองสามอันสุดท้ายยังมาไม่ถึง ดาวน์โหลดซ้ำจากแหล่งเดียวกัน การซ่อมแซม ZIP หากไม่สามารถดาวน์โหลดซ้ำได้
7-Zip / WinRAR เปิดขึ้นมาแต่รายงาน "ข้อผิดพลาด CRC" ในแต่ละไฟล์ ไฟล์แต่ละไฟล์ภายใน ZIP เสียหาย แยกชิ้นส่วน ยกเว้น ทั้งหมดออกจากชิ้นส่วนที่เสียหาย จากนั้นดูว่ามีอะไรหายไป
"ไม่ได้ติดตั้งแอป" โดยไม่มีรายละเอียดเพิ่มเติม บ่อยครั้งปัญหาลายเซ็นไม่ตรงกันหรือการจัดตำแหน่ง ไม่ใช่ความเสียหายที่แท้จริง zipalign + ตรวจสอบลายเซ็นอีกครั้ง (วิธีที่ 2)
ขัดข้องทันทีหลังจากติดตั้งด้วย java.lang.VerifyError รหัสไบต์ classes.dex เสียหายหรือเข้ากันไม่ได้กับเวอร์ชัน ไม่สามารถกู้คืนได้ด้วยการซ่อมแซม รับสำเนาที่สะอาดอีกครั้ง

การเดินทะลุคอนกรีต

ลองจินตนาการว่าคุณได้ APK ขนาด 320 MB ซึ่งการดาวน์โหลดถูกขัดจังหวะประมาณ 99% โทรศัพท์ของคุณปฏิเสธที่จะติดตั้งด้วยข้อความ "การแยกวิเคราะห์แพ็คเกจล้มเหลว" ต่อไปนี้คือวิธีโจมตีบนเวิร์กสเตชัน Windows หรือ macOS ตามลำดับที่คุณจะลองทำสิ่งต่างๆ

ขั้นตอนที่ 1 ยืนยันว่าไฟล์ส่วนใหญ่อยู่ที่นั่นเป็นอย่างน้อย

ตรวจสอบขนาดไฟล์กับแหล่งที่มาที่โฆษณา หากไฟล์มีขนาดเล็กลงอย่างมาก (เช่น 220 MB แทนที่จะเป็น 320 MB) การดาวน์โหลดจะถูกตัดทอนอย่างรุนแรง และแทบไม่มีประโยชน์ในการซ่อมแซม wrapper: ส่วนใหญ่ของ classes.dex หรือเนื้อหาหายไป ในกรณีนั้น ให้เริ่มการดาวน์โหลดใหม่

ขั้นตอนที่ 2 ทดสอบโครงสร้าง ZIP

เปิดเทอร์มินัลในโฟลเดอร์ที่มี APK และเรียกใช้บน macOS หรือ Linux:

unzip -t broken.apk

เครื่องมือจะรายงานแต่ละไฟล์ภายในไฟล์เก็บถาวรและข้อผิดพลาด CRC หากมีข้อผิดพลาดเพียงไม่กี่รายการและไม่ใช่ classes*.dex หรือ resources.arsc คุณมีโอกาสที่ดีที่จะสร้างการติดตั้งที่ใช้งานได้

ขั้นตอนที่ 3 สร้างไดเร็กทอรีกลางใหม่

หาก unzip -t บ่นเกี่ยวกับไดเร็กทอรีกลางเอง ("ไม่พบลายเซ็นสิ้นสุดไดเร็กทอรีกลาง", "ขาด 1 EOCD") ให้ใช้โหมด "แก้ไข":

zip -FF broken.apk --out fixed.apk

ธง -FF บอกให้ zip สแกนไฟล์เพื่อหาลายเซ็นส่วนหัวไฟล์ในเครื่อง และสร้างรายการไดเรกทอรีใหม่ทีละรายการ เอาต์พุต fixed.apk คือสิ่งที่คุณพยายามติดตั้งจริงๆ

ขั้นตอนที่ 4 จัดตำแหน่งใหม่และลงนามใหม่หากจำเป็น

หลังจากการเปลี่ยนแปลงโครงสร้าง ลายเซ็นของ APK จะใช้ไม่ได้อีกต่อไป เนื่องจากการแก้ไขแม้แต่ไบต์เดียวจะทำให้บล็อกลายเซ็น v2/v3 เป็นโมฆะ หากคุณมีคีย์การลงนามของคุณเอง (ซึ่งเป็นเรื่องปกติสำหรับบิลด์ที่คุณเป็นเจ้าของ) ให้จัดเรียงและลงนามใหม่:

zipalign -v 4 fixed.apk aligned.apk
apksigner sign --ks my.keystore aligned.apk

หากไม่มีรหัสของคุณเอง วิธีเดียวที่จะติดตั้งไฟล์ได้คือติดตั้งผ่าน ที่มีอยู่เดิม ด้วยใบรับรองการลงนามเดียวกัน ซึ่งหมายความว่า APK ที่ได้รับการซ่อมแซมจากบุคคลที่สามจะไม่ติดตั้งทับการติดตั้ง Play Store ที่มีอยู่ เนื่องจากห่วงโซ่การลงนามมีการเปลี่ยนแปลง

เมื่อการซ่อมแซมเป็นเป้าหมายที่ผิด

คุ้มค่าที่จะซื่อสัตย์ว่า "การแก้ไข" ทำได้และไม่สามารถทำได้:

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

คำถามที่พบบ่อย (FAQ)

ฉันสามารถแยกไอคอนและภาพหน้าจอออกจาก APK ที่เสียหายได้หรือไม่

ปกติแล้วใช่ ไฟล์ไอคอนอยู่ภายใต้ res/mipmap-* และข้อมูลภาพหน้าจอนั้นหาได้ยากใน APK ในตอนแรก แม้ว่าไดเร็กทอรีส่วนกลางจะเสียหาย แต่ส่วนหัวของไฟล์แต่ละไฟล์ก็ยังสมบูรณ์อยู่บ่อยครั้งมากพอที่ตัวเลือก "แยกไฟล์โดยละเว้นข้อผิดพลาด" ของ 7-Zip จะดึงรูปภาพส่วนใหญ่ออกมา

APK ที่ได้รับการซ่อมแซมจะอัปเดตแอปที่ติดตั้งหรือไม่

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

มีเครื่องมือออนไลน์ที่ทำทั้งหมดนี้หรือไม่?

เครื่องมือที่ใช้เบราว์เซอร์สามารถอ่านโครงสร้างของ APK และบอกคุณได้ว่ามีอะไรเสียหาย (เครื่องมือข้อมูล APK ของเราทำเช่นนั้นได้) แต่จริงๆ แล้วการเขียน ZIP ใหม่และการลงนามใหม่ต้องใช้เครื่องมือเดสก์ท็อปหรือเซิร์ฟเวอร์ เราจงใจไม่ดำเนินการขั้นตอนการลงชื่อใหม่บนเซิร์ฟเวอร์ เนื่องจากนั่นหมายถึงการอัปโหลดไฟล์ของคุณ: คำมั่นสัญญาด้านความเป็นส่วนตัวของไซต์นี้คือ ไม่มีสิ่งใดออกจากเบราว์เซอร์ของคุณ

แล้วไฟล์ XAPK ที่ไม่สามารถแตกไฟล์ได้ล่ะ?

XAPK เป็นเพียง ZIP ดังนั้นจึงใช้เทคนิคเดียวกันนี้ เรียกใช้ zip -FF เพื่อกู้คืน APK ภายในพร้อมไฟล์ OBB ใด ๆ จากนั้นดำเนินการราวกับว่าคุณมี APK ที่เสียหายและ OBB แยกต่างหาก

หากเป้าหมายของคุณคือเพียงเพื่อให้ได้กราฟิก เสียง หรือข้อมูล OBB จากการดาวน์โหลดที่ล้มเหลว ให้ใช้ 7-Zip 7-Zip มีความเข้มงวดมากกว่าเครื่องมือ ZIP ของ Windows Explorer และมักจะให้คุณ "ละเว้นข้อผิดพลาด" เพื่อแยกไฟล์ที่ดาวน์โหลดเพียงบางส่วนเท่านั้น

สแกน APK ของคุณอย่างละเอียด

อัปโหลดไฟล์ไปยังตัววิเคราะห์ของเราเพื่อดูว่าโครงสร้างถูกต้องหรือไม่สามารถอ่านไฟล์ Manifest ได้

วิเคราะห์ความสมบูรณ์ของไฟล์

บทสรุป

"ข้อผิดพลาดในการแยกวิเคราะห์" คือระบบปฏิบัติการยอมแพ้ ด้วยการใช้เครื่องมือที่กล่าวมาข้างต้น คุณสามารถควบคุมกลับคืนมาได้ แม้ว่าคุณจะไม่สามารถ "แก้ไข" แอปที่เสียหายเพื่อให้ทำงานได้เสมอไป แต่คุณก็สามารถ กู้คืนข้อมูล เข้าไปข้างในได้เกือบตลอดเวลา หากต้องการเคล็ดลับเพิ่มเติมในการจัดการไฟล์ขนาดใหญ่ โปรดดูคำแนะนำของเราใน การรวม APK แบบแยกส่วน หรือ การแยกข้อมูลเกม OBB

ออกแบบและจัดทำเอกสารโดย Mst Shaefale หัวหน้านักพัฒนาและสถาปนิกแพ็คเกจ Android • ตรวจสอบแล้วบน Android 12–15

Mst Shaefale ดูแลการควบรวมกิจการ XAPK/APKS ฝั่งไคลเอ็นต์, ตัวแยกวิเคราะห์รายการไบนารี และเครื่องมือลงนาม APK v1+v2 ที่ xapktoapk.com พบคำสั่งที่ล้าสมัยหรือการเปลี่ยนแปลงระบบปฏิบัติการหรือไม่ ส่งบันทึกบรรณาธิการ