破損したAPKファイルを修復してアセットを抽出する方法

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

2 GB のゲーム バンドルをダウンロードするのに何時間も費やしましたが、ブラウザでは 99% で「ダウンロードに失敗しました」と表示されるだけで、最悪の場合、Android では 「解析エラー: パッケージの解析中に問題が発生しました。」 というエラーが表示されます。破損した APK は必ずしもファイルが死んでいるとは限りません。 APKはZIP圧縮規格に基づいて構築されているため、少なくとも内部の貴重なアセットを抽出できる程度には修復できる場合が多くあります。

以下では、APK 内で実際に何が壊れているのか、利用する価値のある修復ツール、そして壊れたバンドルに対処するときに XAPKコンバータ がどのように役立つのかについて説明します。

概要まとめ. 5 秒間の要約: 破損した APK のほとんどは、ZIP 中央ディレクトリまたは classes.dex。 ZIP レベルの損傷は次の方法で修復できます。 zip -FF または7-Zip。 DEXレベルのダメージはありません。その場合は、可能な限りアセットを復元し、クリーンな APK を再ダウンロードしてください。 zipalign エラーは実際の破損ではなく、1 つのコマンドで修正されます。

APK破損の構造

APK は本質的に、特定の構造を持つ ZIP アーカイブです。通常、破損は次の 3 つの場所のいずれかで発生します。

  1. ヘッダー: ファイルの先頭のバイトが欠落しているか、変更されています。
  2. マニフェスト (XML): AndroidManifest.xml の形式が不正であるか、サポートされていないエンコーディングが使用されています。
  3. DEX コード: 実際の Java/Kotlin バイトコードが切り詰められているため、アプリが実行できなくなります。

方法 1: ヘッドレス ZIP 修復 (最も簡単)

ファイルが「読み取り可能」であるにもかかわらず開かない場合は、DiskInternals ZIP 修復 (無料) などのツール、または Linux/macOS のコマンドライン zip -FF コマンドを使用してください。これらのツールは、ファイルの「署名」をスキャンして、中央ディレクトリを最初から再構築します。

ターミナルユーザーのコード: zip -FF corrupt_app.apk --out fixed_app.apk

方法 2: Zipalign/位置合わせを修正する

場合によっては、APK が 4 バイト境界に整列していないという理由だけで「破損」していることがあります。 Android のメモリ管理にはこれが必要です。 Android SDK の ジップアライン ツールを使用してこれを修正できます。

zipalign -v 4 input.apk output.apk

ビットロット警告

DEX (クラス.dex) ファイル自体のデータが欠落している場合、いくら ZIP を修復してもアプリは動作しません。この場合、唯一の目標は、資産/リソース を抽出し、アプリの新しいコピーを見つけることです。

実際に何が間違っているかを見分ける方法

修復ツールを選択する前に、障害を特定してください。通常、Android (またはアーカイブ ツール) が表示するエラー メッセージが手がかりになります。

見られる症状 通常それが意味するもの 最初に試してみること
「パッケージの解析」に失敗しました(Android) ZIP 中央ディレクトリが読み取れない、またはマニフェストのバージョンが一致しない ZIP ヘッダーの修復 (方法 1)
「パッケージの解析中に問題が発生しました」 + APK が予想よりわずかに小さい 切り詰められたダウンロード: 最後の数 KB が到着しませんでした 同じソースから再ダウンロードします。再ダウンロードできない場合の ZIP 修復
7-Zip / WinRAR は開きますが、個々のファイルで「CRC エラー」が報告されます ZIP内の個々のファイルが破損しています 破損したメンバーをすべて を除外する 抽出し、欠落しているものを確認します。
「アプリがインストールされていません」と表示され、詳細は不明 多くの場合、実際の破損ではなく、署名の不一致または位置合わせの問題 zipalign + 署名の再チェック (方法 2)
java.lang.VerifyError でインストール直後にクラッシュする classes.dex バイトコードが破損しているか、バージョンに互換性がありません 修理では回復できません。クリーン コピーを再取得します。

具体的なウォークスルー

最終的に 320 MB の APK が作成され、そのダウンロードが約 99% で中断されたと想像してください。携帯電話は「パッケージの解析に失敗しました」というメッセージを表示してインストールを拒否します。ここでは、Windows または macOS ワークステーションで攻撃する方法を、実際に試す順序で示します。

ステップ 1. ファイルの大部分がそこにあることを確認します

ソースが宣伝しているものと比較してファイル サイズを確認してください。ファイルが大幅に小さい場合 (たとえば、320 MB ではなく 220 MB)、ダウンロードは大幅に切り詰められており、ラッパーを修復する意味はほとんどありません。classes.dex の大部分またはアセットが単純に欠落しています。その場合はダウンロードを再開してください。

ステップ 2. ZIP 構造をテストする

macOS または Linux 上で、APK が含まれるフォルダーでターミナルを開いて実行します。

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 の署名は無効になります。1 バイトでも変更すると v2/v3 署名ブロックが無効になるためです。独自の署名キーがある場合 (所有するビルドには問題ありません)、位置合わせして再署名します。

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

独自のキーがない場合、ファイルをインストールする唯一の方法は、同じ署名証明書を使用した 既存 インストールを介することです。つまり、署名チェーンが変更されているため、サードパーティからの修復された APK は既存の Play ストア インストールの上にインストールされません。

修理が間違った目標の場合

「修正」で何ができるか、何ができないかについて正直になる価値があります。

ダウンロードが 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 は Windows Explorer ZIP ツールよりも積極的で、多くの場合、部分的にしかダウンロードされていないファイルを「エラーを無視」して抽出できます。

APK のディープスキャン

ファイルをアナライザーにアップロードして、構造が有効かどうか、またはマニフェストが読み取れないかどうかを確認します。

ファイルの健全性を分析する

結論

「解析エラー」とは、OS が諦めることです。上記のツールを使用すると、制御を取り戻します。壊れたアプリを常に「修正」して実行できるようにすることはできませんが、内部で データを回復する を実行することはほとんどの場合可能です。大きなファイルの管理に関するヒントについては、分割された APK を結合する または OBB ゲームデータの抽出 に関するガイドをご覧ください。

Mst Shaefale による設計と文書化 リード開発者兼 Android パッケージ アーキテクト • Android 12 ~ 15 で検証済み

Mst Shaefale は、クライアント側の XAPK/APKS マージ、バイナリ マニフェスト パーサー、APK v1+v2 署名ツールを xapktoapk.com で保守しています。古いコマンドや OS の変更を見つけましたか?編集メモを送信します。