Bozuk APK Dosyası Nasıl Onarılır ve Varlıklar Nasıl Çıkarılır

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

2 GB'lık bir oyun paketini indirmek için saatler harcadınız, ancak tarayıcınız %99'da "İndirme Başarısız Oldu" diyor veya daha kötüsü Android çığlık atıyor "Ayrıştırma Hatası: Paket ayrıştırılırken bir sorun oluştu." Bozuk bir APK mutlaka ölü bir dosya değildir. APK'lar ZIP sıkıştırma standardına göre oluşturulduğundan, çoğu zaman onarılabilirler, en azından içindeki değerli varlıkları çıkarmaya yetecek kadar.

Aşağıda bir APK'nın içinde gerçekte neyin bozulduğunu, ulaşmaya değer onarım araçlarını ve bozuk bir paketle uğraşırken XAPK Dönüştürücü ürünümüzün nasıl yardımcı olabileceğini ele alıyoruz.

Hızlı Özet. Beş saniyelik özet: Çoğu bozuk APK'nın ZIP merkezi dizininde veya classes.dex. ZIP düzeyindeki hasar şu şekilde onarılabilir: zip -FF veya 7-Zip'i kullanın. DEX düzeyindeki hasar; bu durumda, kurtarabileceğiniz varlıkları kurtarın ve temiz bir APK'yı yeniden indirin. zipalign hatalar gerçek bozulma değildir ve tek komutla düzeltilir.

APK Yolsuzluğunun Anatomisi

APK aslında belirli bir yapıya sahip bir ZIP arşividir. Yolsuzluk genellikle üç yerden birinde meydana gelir:

  1. Başlık: Dosyanın en başındaki baytlar eksik veya değiştirilmiş.
  2. Manifest (XML): AndroidManifest.xml hatalı biçimlendirilmiş veya desteklenmeyen bir kodlama kullanıyor.
  3. DEX Kodu: Gerçek Java/Kotlin bayt kodu kesilerek uygulamayı çalıştırılamaz hale getirir.

Yöntem 1: Başsız ZIP Onarımı (En Kolay)

Dosya "okunabilir" olmasına rağmen açılmıyorsa, DiskInternals ZIP Onarımı (Ücretsiz) gibi bir araç veya Linux/macOS'ta zip -FF komut satırı komutunu kullanın. Bu araçlar, dosyaların "imzalarını" bulmak için dosyayı tarar ve merkezi dizini sıfırdan yeniden oluşturur.

Terminal kullanıcıları için kod: zip -FF corrupt_app.apk --out fixed_app.apk

Yöntem 2: Zipalign/Hizalamayı Düzeltme

Bazen bir APK, 4 baytlık sınırlara göre hizalanmadığı için "bozuktur". Android'in hafıza yönetimi bunu gerektiriyor. Bunu Android SDK'daki sıkıştırılmış hizalama aracını kullanarak düzeltebilirsiniz:

zipalign -v 4 input.apk output.apk

Bit-Rot Uyarısı

DEX (sınıflar.dex) dosyasının kendisinde veri eksikse hiçbir ZIP onarımı uygulamanın çalışmasını sağlamaz. Bu durumda tek hedefiniz Varlıklar/Kaynaklar'yi çıkarmak ve uygulamanın yeni bir kopyasını bulmak olmalıdır.

Gerçekte Neyin Yanlış Olduğu Nasıl Anlaşılır

Bir onarım aleti seçmeden önce arızayı tanımlayın. Android'in (veya arşiv aracınızın) gösterdiği hata mesajı genellikle bir ipucudur:

Gördüğünüz belirti Genellikle ne anlama gelir? İlk önce ne denemeli
"Paket ayrıştırma" başarısız oldu (Android) ZIP merkezi dizini okunamıyor veya sürüm uyumsuzluğu bildiriliyor ZIP başlığı onarımı (Yöntem 1)
"Paket ayrıştırılırken bir sorun oluştu" + APK beklenenden biraz daha küçük Kesilmiş indirme: son birkaç KB hiç ulaşmadı Aynı kaynaktan yeniden indirin; Yeniden indirme kullanılamıyorsa ZIP onarımı
7-Zip / WinRAR onu açıyor ancak tek tek dosyalarda "CRC hatası" rapor ediyor ZIP içindeki bireysel dosya zarar görmüş Hasarlı üyedeki hariç her şeyi çıkarın, ardından neyin eksik olduğuna bakın
Daha fazla ayrıntı olmadan "Uygulama yüklenmedi" Genellikle imza uyumsuzluğu veya hizalama sorunu, gerçek yolsuzluk değil zipalign + imzanın yeniden kontrolü (Yöntem 2)
java.lang.VerifyError ile kurulumdan hemen sonra çöküyor classes.dex bayt kodu hasarlı veya sürümle uyumlu değil Onarımla kurtarılamaz. Temiz bir kopyayı yeniden edinin.

Somut Bir Geçiş

İndirme işlemi yaklaşık %99 oranında kesintiye uğrayan 320 MB'lık bir APK ile karşılaştığınızı düşünün. Telefonunuz "Paket ayrıştırma başarısız oldu" mesajıyla yüklemeyi reddediyor. Windows veya macOS iş istasyonunda, aslında deneyeceğiniz sıraya göre nasıl saldıracağınız aşağıda açıklanmıştır.

1. Adım. Dosyanın en azından çoğunlukla orada olduğunu doğrulayın

Kaynağın reklamını yaptığı şeye göre dosya boyutunu kontrol edin. Dosya çok daha küçükse (örneğin, 320 MB yerine 220 MB), indirme ciddi şekilde kesilmiştir ve sarmalayıcıyı onarmanın pek bir anlamı yoktur: classes.dex'nin büyük parçaları veya varlıklar tamamen eksiktir. Bu durumda indirmeyi yeniden başlatın.

2. Adım. ZIP yapısını test edin

APK'yı içeren klasörde bir terminal açın ve macOS veya Linux'ta çalıştırın:

unzip -t broken.apk

Araç, arşivdeki her dosyayı ve tüm CRC hatalarını raporlayacaktır. Yalnızca birkaç girişte hata oluşursa ve bunlar classes*.dex veya resources.arsc değilse, çalışan bir kurulum oluşturma şansınız oldukça yüksektir.

3. Adım. Merkezi dizini yeniden oluşturun

unzip -t merkezi dizinin kendisinden şikayetçi olursa ("merkezi dizin sonu imzası bulunamadı", "1 EOCD eksik"), "düzeltme" modunu kullanın:

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

-FF bayrağı, zip'ye dosyayı yerel dosya başlığı imzaları için taramasını ve dizini giriş bazında yeniden oluşturmasını söyler. Çıktı, fixed.apk, aslında yüklemeye çalıştığınız şeydir.

4. Adım. Gerekirse yeniden hizalayın ve yeniden imzalayın

Herhangi bir yapısal değişiklikten sonra APK'nın imzası artık geçerli değildir çünkü bir baytın değiştirilmesi bile v2/v3 imza bloklarını geçersiz kılar. Kendi imzalama anahtarınız varsa (sahip olduğunuz yapılar için bu uygundur), hizalayın ve yeniden imzalayın:

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

Kendi anahtarınız olmadan dosyayı yüklemenin tek yolu, aynı imzalama sertifikasıyla mevcut yüklemesidir; bu, imzalama zinciri değiştiğinden, üçüncü bir taraftan onarılan APK'nın mevcut bir Play Store kurulumunun üzerine yüklenmeyeceği anlamına gelir.

Onarım Yanlış Hedef Olduğunda

"Düzeltme"nin neyi yapıp neyi yapamayacağı konusunda dürüst olmaya değer:

Amacınız yalnızca indirme işlemi %99'da biten bir oyunu oynamaksa, en az dirençle karşılaşılacak yol neredeyse her zaman kısmi dosyayı temizlemek, disk alanını boşaltmak ve güvenilir bir bağlantıdan tekrar indirmektir. Yeniden indirmenin imkansız olduğu durumlarda onarım araçları parlıyor: eski arşivlenmiş APK'lar, kesintili LAN aktarımı üzerinden alınan dosyalar veya orijinal kaynağı kaybolan yedeklemeler.

Sıkça Sorulan Sorular (SSS)

Bozuk bir APK'dan simgeleri ve ekran görüntülerini çıkarabilir miyim?

Genellikle evet. Simge dosyaları res/mipmap-* altında bulunur ve başlangıçta APK'larda ekran görüntüsü verileri nadirdir. Merkezi dizin hasar görse bile, tek tek dosya başlıkları yeterince sağlam kalır ve 7-Zip'in "Hataları göz ardı ederek çıkar" seçeneği çoğu görüntüyü dışarı çeker.

Onarılmış bir APK, yüklü bir uygulamayı günceller mi?

Yalnızca onarımın orijinal imzayı koruması durumunda ki bu, yapısal bir onarımdan sonra genellikle imkansızdır. Onarılmış bir APK'yı yeni bir yükleme olarak değerlendirin: önce eski sürümü kaldırın (verilerini kaybedersiniz) veya henüz uygulamanın bulunmadığı bir cihaza yükleyin.

Tüm bunları yapan çevrimiçi bir araç var mı?

Tarayıcı tabanlı araçlar bir APK'nın yapısını okuyabilir ve size neyin bozuk olduğunu söyleyebilir (APK Bilgisi aracı'miz tam olarak bunu yapar), ancak aslında ZIP'i yeniden yazmak ve yeniden imzalamak için ya bir masaüstü aracı ya da sunucu gerekir. Yeniden imzalama adımını kasıtlı olarak bir sunucuda çalıştırmıyoruz çünkü bu, dosyanızı yüklemek anlamına gelecektir: Bu sitenin gizlilik vaadi, tarayıcınızdan hiçbir şeyin ayrılmamasıdır.

Çıkarılamayan XAPK dosyalarına ne dersiniz?

XAPK yalnızca bir ZIP olduğundan aynı teknikler geçerlidir. Dahili APK'yı ve tüm OBB dosyalarını kurtarmak için zip -FF'yi çalıştırın, ardından hasarlı bir APK'nız ve ayrı bir OBB'niz varmış gibi devam edin.

Amacınız yalnızca başarısız bir indirme işleminden grafikleri, sesleri veya OBB verilerini almaksa 7-Zip'yi kullanın. 7-Zip, Windows Gezgini ZIP aracından daha agresiftir ve genellikle yalnızca kısmen indirilen dosyaları ayıklamak için "Hataları görmezden gelmenize" olanak tanır.

APK'nızı Derinlemesine Tarayın

Yapının geçerli olup olmadığını veya bildirimin okunamaz durumda olup olmadığını görmek için dosyayı analizörümüze yükleyin.

Dosya Sağlığını Analiz Edin

Çözüm

"Ayrıştırma Hatası" işletim sisteminin vazgeçmesidir. Yukarıda belirtilen araçları kullanarak kontrolü geri alırsınız. Bozuk bir uygulamayı çalıştırmak için her zaman "düzeltemezsiniz", ancak neredeyse her zaman içeride verileri kurtar yapabilirsiniz. Büyük dosyaları yönetmeye ilişkin daha fazla ipucu için Bölünmüş APK'ları Birleştirme veya OBB Oyun Verilerini Çıkarma hakkındaki kılavuzumuza göz atın.

Mst Shaefale Tarafından Tasarlandı ve Belgelendi Baş Geliştirici ve Android Paket Mimarı • Android 12–15'te Doğrulandı

Mst Shaefale, xapktoapk.com'de istemci tarafı XAPK/APKS birleştirmesini, ikili bildirim ayrıştırıcısını ve APK v1+v2 imzalama araçlarını korur. Eski bir komutu veya işletim sistemi değişikliğini mi fark ettiniz? Bir editör notu gönderin.