Cara Membetulkan Fail APK yang Korup dan Ekstrak Aset
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.
Anatomi Rasuah APK
APK pada asasnya ialah arkib ZIP dengan struktur tertentu. Rasuah biasanya berlaku di salah satu daripada tiga tempat:
- Tajuk: Bait pada permulaan fail hilang atau ditukar.
- Manifes (XML): AndroidManifest.xml salah bentuk atau menggunakan pengekodan yang tidak disokong.
- 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":
- Anda tidak boleh memulihkan bait yang tidak pernah tiba. Jika muat turun telah dipotong, tiada pembaikan pengepala akan membina semula data yang hilang. Muat turun semula.
- Bit-rot adalah kekal. Jika fail terletak pada storan yang terbalik beberapa bit di dalam classes.dex, langkah pengesahan kod bait pada masa pemasangan akan menolaknya dan tidak ada cara untuk mengetahui bait asal yang sepatutnya.
- Fail yang dibaiki mempunyai tandatangan baharu. Malah APK yang telah ditetapkan dengan sempurna tidak lagi ditandatangani oleh penerbit asal. Itu adalah ciri, bukan pepijat: ia menghalang penyerang daripada menyelitkan kod hasad ke dalam apl popular dan menandatangani semula seolah-olah mereka adalah penerbit asal.
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 FailKesimpulan
"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.