Cara Membetulkan Fail APK yang Korup dan Ekstrak Aset

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

Anda telah menghabiskan berjam-jam memuat turun himpunan permainan 2GB, hanya untuk penyemak imbas anda menyatakan "Muat Turun Gagal" pada 99%, atau lebih teruk lagi, untuk Android menjerit "Ralat Penghuraian: Terdapat masalah menghuraikan pakej." APK yang rosak tidak semestinya fail mati. Oleh kerana APK dibina pada standard pemampatan ZIP, ia selalunya boleh dibaiki, sekurang-kurangnya cukup untuk mengekstrak aset berharga di dalamnya.

Di bawah ini kami membincangkan perkara yang sebenarnya pecah dalam APK, alat pembaikan yang patut dicapai dan cara Penukar XAPK kami boleh membantu apabila anda berhadapan dengan berkas yang rosak.

Ringkasan Pantas. Ringkasan lima saat: Kebanyakan APK yang rosak mempunyai kerosakan dalam direktori pusat ZIP atau dalam classes.dex. Kerosakan peringkat ZIP boleh dibaiki dengan zip -FF atau 7-Zip. Kerosakan peringkat DEX tidak; dalam kes itu, pulihkan aset yang anda boleh dan muat turun semula APK yang bersih. zipalign ralat bukan rasuah sebenar dan ditetapkan dalam satu arahan.

Anatomi Rasuah APK

APK pada asasnya ialah arkib ZIP dengan struktur tertentu. Rasuah biasanya berlaku di salah satu daripada tiga tempat:

  1. Tajuk: Bait pada permulaan fail hilang atau ditukar.
  2. Manifes (XML): AndroidManifest.xml salah bentuk atau menggunakan pengekodan yang tidak disokong.
  3. Kod DEX: Kod bait Java/Kotlin sebenar dipenggal, menjadikan apl tidak boleh dijalankan.

Kaedah 1: Pembaikan ZIP Tanpa Kepala (Paling Mudah)

Jika fail "boleh dibaca" tetapi tidak dapat dibuka, gunakan alat seperti Pembaikan ZIP DiskInternals (Percuma) atau arahan baris perintah zip -FF dalam Linux/macOS. Alat ini mengimbas fail untuk "tandatangan" fail dan membina semula direktori pusat dari awal.

Kod untuk pengguna Terminal: zip -FF corrupt_app.apk --out fixed_app.apk

Kaedah 2: Membetulkan Zipalign/Penjajaran

Kadangkala APK adalah "rasuah" hanya kerana ia tidak sejajar pada sempadan 4-bait. Pengurusan memori Android memerlukan ini. Anda boleh membetulkannya menggunakan alat zipalign daripada Android SDK:

zipalign -v 4 input.apk output.apk

Amaran Bit-Rot

Jika fail DEX (classes.dex) itu sendiri tiada data, tiada jumlah pembaikan ZIP akan menjadikan apl itu berfungsi. Dalam kes ini, satu-satunya matlamat anda ialah untuk mengekstrak Aset/Sumber dan mencari salinan apl baharu.

Cara Memberitahu Apa Yang Salah

Sebelum anda memilih alat pembaikan, kenal pasti kegagalannya. Mesej ralat Android (atau alat arkib anda) yang ditunjukkan biasanya merupakan petunjuk:

Gejala yang anda lihat Maksudnya biasanya Apa yang perlu dicuba dahulu
"Menghuraikan pakej" gagal (Android) Direktori pusat ZIP tidak boleh dibaca atau versi manifes tidak sepadan Pembaikan pengepala ZIP (Kaedah 1)
"Terdapat masalah menghuraikan pakej" + APK lebih kecil sedikit daripada yang dijangkakan Muat turun terpotong: beberapa KB terakhir tidak pernah tiba Muat turun semula dari sumber yang sama; Pembaikan ZIP jika muat turun semula tidak tersedia
7-Zip / WinRAR membukanya tetapi melaporkan "ralat CRC" pada fail individu Fail individu di dalam ZIP rosak Ekstrak semua kecuali ahli yang rosak, kemudian lihat apa yang hilang
"Apl tidak dipasang" tanpa butiran lanjut Selalunya isu ketidakpadanan tandatangan atau penjajaran, bukan rasuah sebenar zipalign + semakan semula tandatangan (Kaedah 2)
Ranap sejurus selepas dipasang dengan java.lang.VerifyError classes.dex bytecode rosak atau versi tidak serasi Tidak boleh dipulihkan melalui pembaikan. Dapatkan semula salinan yang bersih.

Laluan Konkrit

Bayangkan anda mendapat APK 320 MB yang muat turunnya terganggu pada kira-kira 99%. Telefon anda enggan memasangnya dengan "Menghuraikan pakej gagal." Berikut ialah cara untuk menyerangnya pada stesen kerja Windows atau macOS, mengikut susunan anda sebenarnya akan mencuba sesuatu.

Langkah 1. Sahkan fail sekurang-kurangnya kebanyakannya ada

Semak saiz fail terhadap apa sahaja sumber yang diiklankan. Jika fail secara mendadak lebih kecil (katakan, 220 MB dan bukannya 320 MB), muat turun telah dipotong dengan teruk dan tiada gunanya membaiki pembalut: sebahagian besar classes.dex atau asetnya hilang begitu saja. Dalam kes itu, mulakan semula muat turun.

Langkah 2. Uji struktur ZIP

Buka terminal dalam folder yang mengandungi APK dan jalankan, pada macOS atau Linux:

unzip -t broken.apk

Alat ini akan melaporkan setiap fail di dalam arkib dan sebarang ralat CRC. Jika hanya segelintir entri ralat dan ia bukan classes*.dex atau resources.arsc, anda mempunyai peluang yang baik untuk menghasilkan pemasangan yang berfungsi.

Langkah 3. Bina semula direktori pusat

Jika unzip -t mengadu tentang direktori pusat itu sendiri ("tandatangan end-of-central-directory not found", "missing 1 EOCD"), gunakan mod "fix":

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

Bendera -FF memberitahu zip untuk mengimbas fail untuk tandatangan pengepala fail setempat dan membina semula entri demi entri direktori. Output, fixed.apk, ialah apa yang sebenarnya anda cuba pasang.

Langkah 4. Selaraskan semula dan tandatangan semula jika perlu

Selepas sebarang perubahan struktur, tandatangan APK tidak lagi sah, kerana mengubah suai walaupun satu bait akan membatalkan blok tandatangan v2/v3. Jika anda mempunyai kunci tandatangan anda sendiri (ini baik untuk binaan yang anda miliki), selaraskan dan tandatangan semula:

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

Tanpa kunci anda sendiri, satu-satunya cara untuk memasang fail adalah melalui pemasangan sedia ada dengan sijil tandatangan yang sama, yang bermaksud APK yang dibaiki daripada pihak ketiga tidak akan dipasang di atas pemasangan Gedung Play sedia ada, memandangkan rantaian tandatangan telah berubah.

Apabila Pembaikan Adalah Matlamat Yang Salah

Adalah wajar untuk jujur ​​tentang perkara yang boleh dan tidak boleh dilakukan oleh "pembetulan":

Jika matlamat anda adalah semata-mata untuk bermain permainan yang muat turunnya mati pada 99%, laluan yang paling sedikit rintangan adalah hampir selalu untuk mengosongkan fail separa, mengosongkan ruang cakera dan memuat turun semula daripada sambungan yang boleh dipercayai. Alat pembaikan bersinar apabila muat turun semula adalah mustahil: APK arkib lama, fail yang diterima melalui pemindahan LAN yang mengelupas atau sandaran yang sumber asalnya hilang.

Soalan Lazim (FAQ)

Bolehkah saya mengekstrak ikon dan tangkapan skrin daripada APK yang rosak?

Biasanya ya. Fail ikon hidup di bawah res/mipmap-* dan data tangkapan skrin jarang berlaku dalam APK untuk bermula. Walaupun apabila direktori pusat rosak, pengepala fail individu cukup kerap sehingga pilihan "Ekstrak dengan ralat diabaikan" 7-Zip akan mengeluarkan kebanyakan imej.

Adakah APK yang dibaiki akan mengemas kini apl yang dipasang?

Hanya jika pembaikan mengekalkan tandatangan asal, yang biasanya mustahil selepas pembaikan struktur. Anggap APK yang telah dibaiki sebagai pemasangan baharu: nyahpasang versi lama dahulu (anda akan kehilangan datanya) atau pasang pada peranti yang belum mempunyai apl itu.

Adakah terdapat alat dalam talian yang melakukan semua ini?

Alat berasaskan penyemak imbas boleh membaca struktur APK dan memberitahu anda perkara yang rosak (Alat Maklumat APK kami melakukan perkara itu), tetapi sebenarnya menulis semula ZIP dan menandatangani semula memerlukan sama ada alat desktop atau pelayan. Kami sengaja tidak menjalankan langkah tandatangan semula pada pelayan kerana ini bermakna memuat naik fail anda: janji privasi tapak ini ialah tiada apa yang meninggalkan pelayar anda.

Bagaimana dengan fail XAPK yang gagal diekstrak?

XAPK hanyalah ZIP, jadi teknik yang sama digunakan. Jalankan zip -FF padanya untuk memulihkan APK dalaman serta mana-mana fail OBB, kemudian teruskan seolah-olah anda mempunyai APK yang rosak dan OBB yang berasingan.

Jika matlamat anda hanyalah untuk mendapatkan grafik, bunyi atau data OBB daripada muat turun yang gagal, gunakan 7-Zip. 7-Zip adalah lebih agresif daripada alat ZIP Windows Explorer dan selalunya akan membenarkan anda "Abaikan ralat" untuk mengekstrak fail yang hanya dimuat turun sebahagian sahaja.

Imbas Dalam APK Anda

Muat naik fail ke penganalisis kami untuk melihat sama ada struktur itu sah atau jika manifes tidak boleh dibaca.

Menganalisis Kesihatan Fail

Kesimpulan

"Ralat Penghuraian" ialah OS menyerah. Dengan menggunakan alat yang disebutkan di atas, anda mengawal semula. Walaupun anda tidak boleh sentiasa "membetulkan" apl yang rosak untuk menjalankannya, anda hampir selalu boleh memulihkan data di dalam. Untuk lebih banyak petua tentang mengurus fail besar, lihat panduan kami tentang Menggabungkan APK Split atau Mengekstrak Data Permainan OBB.

Kejuruteraan & Didokumentasikan oleh Mst Shaefale Pemaju Utama & Arkitek Pakej Android • Disahkan pada Android 12–15

Mst Shaefale mengekalkan penggabungan XAPK/APKS pihak pelanggan, penghurai manifes binari dan alat tandatangan APK v1+v2 di xapktoapk.com. Lihat arahan atau perubahan OS yang sudah lapuk? Hantar nota editorial.