ByteScope

APK Installer

Android パッケージを USB でドロップしてインストール。split の選択理由、版と署名の事前確認、INSTALL_FAILED コードの解説つき。

APK はこのブラウザーで開き、USB 経由でそのまま端末へ送ります。どこにもアップロードしません。

ブラウザの対応を確認中…

INSTALL_FAILED_* リファレンス

このページが認識する失敗コードと、その意味・対処です。コードは Android 自身の定数で、デスクトップの `adb install` が出すものと同じです。

既にあるものが邪魔している

INSTALL_FAILED_ALREADY_EXISTS
このパッケージはすでにインストールされていて、今回のインストールに置き換えの指定がありませんでした。
  • 先に入っているほうをアンインストールしてから入れ直します。そのアプリのデータは失われます。
INSTALL_FAILED_UPDATE_INCOMPATIBLE
同じパッケージ名のアプリがすでに入っていますが、署名鍵が違うため Android はこれを更新として扱いません。
  • 署名証明書をインストール済みのアプリと見比べてください。Android は鍵の違うアプリで上書きすることを許しません。
  • 先に入っているほうをアンインストールしてから入れ直します。そのアプリのデータは失われます。
INSTALL_FAILED_VERSION_DOWNGRADE
APK のバージョンコードがインストール済みのものより低く、ダウングレードは既定で拒否されます。
  • 「ダウングレードを許可」(`-d`)を有効にして再試行するか、新しいほうを先に削除します。新しい版が書いたデータは古い版で読めないことがあります。
  • 先に入っているほうをアンインストールしてから入れ直します。そのアプリのデータは失われます。
INSTALL_FAILED_DUPLICATE_PACKAGE
このパッケージ名は端末上の別のパッケージがすでに使っています。
  • 先に入っているほうをアンインストールしてから入れ直します。そのアプリのデータは失われます。
INSTALL_FAILED_SHARED_USER_INCOMPATIBLE
APK が宣言している `sharedUserId` が、その共有ユーザーで動いている既存アプリと衝突しています。
  • 先に入っているほうをアンインストールしてから入れ直します。そのアプリのデータは失われます。
  • 署名証明書をインストール済みのアプリと見比べてください。Android は鍵の違うアプリで上書きすることを許しません。
INSTALL_FAILED_UID_CHANGED
インストール済みのアプリが持つ Linux UID を変更することになり、既存データが行き場を失います。
  • 先に入っているほうをアンインストールしてから入れ直します。そのアプリのデータは失われます。
INSTALL_FAILED_REPLACE_COULDNT_DELETE
置き換えのために前のバージョンを削除しようとして失敗しました。
  • 端末を再起動してから、もう一度試してください。
  • 先に入っているほうをアンインストールしてから入れ直します。そのアプリのデータは失われます。
INSTALL_FAILED_DUPLICATE_PERMISSION
APK が定義している権限名を、すでに別のアプリが定義しています。
  • 同じ content authority または権限名を、すでに別のアプリが押さえています。そのアプリを見つけて削除してから再試行してください。
INSTALL_FAILED_CONFLICTING_PROVIDER
APK が宣言している content provider の authority を、すでに別のアプリが持っています。
  • 同じ content authority または権限名を、すでに別のアプリが押さえています。そのアプリを見つけて削除してから再試行してください。
INSTALL_FAILED_PERMISSION_MODEL_DOWNGRADE
インストール済みのアプリは実行時権限を使っており、この APK はインストール時権限モデルの古い Android 向けです。その方向の入れ替えは許されません。
  • 先に入っているほうをアンインストールしてから入れ直します。そのアプリのデータは失われます。

APK と端末が噛み合わない

INSTALL_FAILED_OLDER_SDK
APK がこの端末より新しい Android を要求しています(`minSdkVersion` が端末の API レベルより上)。
  • APK が宣言している SDK の範囲がこの Android バージョンに合っていません。`minSdkVersion` / `targetSdkVersion` を端末のリリースと突き合わせてください。
INSTALL_FAILED_NEWER_SDK
APK はこの端末より古い Android 向けに作られており、宣言された最大 SDK がこの端末を除外しています。
  • APK が宣言している SDK の範囲がこの Android バージョンに合っていません。`minSdkVersion` / `targetSdkVersion` を端末のリリースと突き合わせてください。
INSTALL_FAILED_NO_MATCHING_ABIS
APK にネイティブライブラリは入っていますが、この端末が対応する CPU アーキテクチャ向けのものがありません。
  • この APK にはこの端末の CPU 向けのネイティブコードが入っていません。端末の ABI 向けのビルドを入手するか、単体の APK ではなく分割セット全体をインストールしてください。
  • コンテナに入っている分割セット全体をインストールしてください。分割 APK は単体ではインストールできません。
INSTALL_FAILED_CPU_ABI_INCOMPATIBLE
APK のネイティブコードが端末の CPU アーキテクチャと合いません。
  • この APK にはこの端末の CPU 向けのネイティブコードが入っていません。端末の ABI 向けのビルドを入手するか、単体の APK ではなく分割セット全体をインストールしてください。
INSTALL_FAILED_MISSING_FEATURE
APK が要求しているハードウェアまたはソフトウェア機能を、この端末は持っていると申告していません。
  • APK が宣言している SDK の範囲がこの Android バージョンに合っていません。`minSdkVersion` / `targetSdkVersion` を端末のリリースと突き合わせてください。
INSTALL_FAILED_MISSING_SPLIT
これは分割アプリの一部で、依存している他の部分が入っていません。config 分割や機能モジュールは単独では成立しません。
  • コンテナに入っている分割セット全体をインストールしてください。分割 APK は単体ではインストールできません。
INSTALL_FAILED_DEPRECATED_SDK_VERSION
Android 14 以降は、非常に古い SDK レベルを対象とするアプリのインストールを、署名にかかわらず拒否します。
  • APK が宣言している SDK の範囲がこの Android バージョンに合っていません。`minSdkVersion` / `targetSdkVersion` を端末のリリースと突き合わせてください。

ストレージ

INSTALL_FAILED_INSUFFICIENT_STORAGE
このアプリを入れるだけの空き容量が端末にありません。
  • 端末の空き容量を空けてから再試行します。インストールには APK 本体に加えてコンパイル後のコードの分も必要です。
INSTALL_FAILED_MEDIA_UNAVAILABLE
インストール先のストレージがマウントされていないか、インストール中に外れました。
  • もう一度試してください。この失敗はたいてい一時的なものです。
  • 端末を再起動してから、もう一度試してください。
INSTALL_FAILED_CONTAINER_ERROR
アプリのファイルをコピーする入れ物を Android が用意できませんでした。多くは下層のストレージの問題です。
  • 端末の空き容量を空けてから再試行します。インストールには APK 本体に加えてコンパイル後のコードの分も必要です。
  • もう一度試してください。この失敗はたいてい一時的なものです。

検証・ポリシー・ビルドフラグによる拒否

INSTALL_FAILED_TEST_ONLY
APK に `android:testOnly` が付いており、通常のインストールでは拒否されます。
  • 「テストビルドを許可」(`-t`)を有効にして再試行します。この APK はデバッグ/テスト用として作られています。
INSTALL_FAILED_VERIFICATION_FAILURE
パッケージ検証機構(多くの端末では Play プロテクト)が APK を調べて拒否しました。
  • Play プロテクトが APK を検査して拒否しました。「Play プロテクトによるアプリのスキャン」または開発者向けオプションの「USB 経由のアプリを確認」を切ってから再試行します。
  • もう一度試してください。この失敗はたいてい一時的なものです。
INSTALL_FAILED_VERIFICATION_TIMEOUT
パッケージ検証機構が時間内に応答せず、インストールが取り消されました。
  • もう一度試してください。この失敗はたいてい一時的なものです。
  • Play プロテクトが APK を検査して拒否しました。「Play プロテクトによるアプリのスキャン」または開発者向けオプションの「USB 経由のアプリを確認」を切ってから再試行します。
INSTALL_FAILED_USER_RESTRICTED
デバイスポリシーまたはユーザー制限が、この方法でのアプリインストールを禁止しています。
  • 画面のロックを解除し、端末側に出るダイアログに答えてください。端末での確認を必要とするインストールは、放置すると黙ってタイムアウトします。
  • 仕事用プロファイル、デバイスオーナー、または保護者による制限がインストールを止めています。設定 → ユーザーを確認するか、端末の管理者に確認してください。
INSTALL_FAILED_ABORTED
インストールセッションがコミット前に取り消されました。端末側のダイアログに応答していない、画面がロックされている、別のインストールにセッションを奪われた、などが典型です。
  • 画面のロックを解除し、端末側に出るダイアログに答えてください。端末での確認を必要とするインストールは、放置すると黙ってタイムアウトします。
  • もう一度試してください。この失敗はたいてい一時的なものです。

APK として読めない

INSTALL_FAILED_INVALID_APK
Android が APK を正しいパッケージとして受け付けませんでした。アーカイブの破損、分割セットの不整合、同じ分割の二重書き込みなどです。
  • コンテナに入っている分割セット全体をインストールしてください。分割 APK は単体ではインストールできません。
  • ファイルが正しい APK ではないか、壊れた状態で届いています。元の配布元から取り直してください。
INSTALL_FAILED_BAD_SIGNATURE
APK の署名が検証できませんでした。署名後にファイルが変更されたか、署名ブロックが壊れています。
  • 署名証明書をインストール済みのアプリと見比べてください。Android は鍵の違うアプリで上書きすることを許しません。
  • ファイルが正しい APK ではないか、壊れた状態で届いています。元の配布元から取り直してください。
INSTALL_PARSE_FAILED_NOT_APK
そもそも APK ではありません。インストーラーが APK として読めませんでした。
  • ファイルが正しい APK ではないか、壊れた状態で届いています。元の配布元から取り直してください。
INSTALL_PARSE_FAILED_NO_CERTIFICATES
APK に有効な署名がありません。未署名の APK や、再パック時に署名ファイルが落ちた APK がここに来ます。
  • ファイルが正しい APK ではないか、壊れた状態で届いています。元の配布元から取り直してください。
  • 署名証明書をインストール済みのアプリと見比べてください。Android は鍵の違うアプリで上書きすることを許しません。
INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES
このセットの APK が同じ鍵で署名されていません。一つのアプリの分割はすべて base と同じ署名である必要があります。
  • 署名証明書をインストール済みのアプリと見比べてください。Android は鍵の違うアプリで上書きすることを許しません。
  • ファイルが正しい APK ではないか、壊れた状態で届いています。元の配布元から取り直してください。
INSTALL_PARSE_FAILED_MANIFEST_MALFORMED
APK の `AndroidManifest.xml` を解析できませんでした。
  • ファイルが正しい APK ではないか、壊れた状態で届いています。元の配布元から取り直してください。

インストールセッションやフレームワークの失敗

INSTALL_FAILED_INTERNAL_ERROR
パッケージインストーラーが内部エラーを起こし、それ以上の説明はありませんでした。
  • もう一度試してください。この失敗はたいてい一時的なものです。
  • 端末を再起動してから、もう一度試してください。
INSTALL_FAILED_DEXOPT
コピー後のコードのコンパイルに失敗しました。多くは空き容量不足、まれに DEX の破損です。
  • 端末の空き容量を空けてから再試行します。インストールには APK 本体に加えてコンパイル後のコードの分も必要です。
  • 端末を再起動してから、もう一度試してください。
  • もう一度試してください。この失敗はたいてい一時的なものです。
このツールについて・FAQ・関連ツール

このツールについて

Android 端末を USB で Chromium 系ブラウザーにつなぎ、このページにパッケージをドロップすると順番にインストールします。.apk はそのまま端末のインストーラーへ。.apks / .xapk / .apkm は split APK のコンテナなので、ブラウザー内で展開し、この端末に必要な split を選び、1 つのインストールセッションにまとめて書き込みます。どこにもアップロードしません——ディスク上のファイルから cmd package install-write へ USB ケーブル経由で直接流し込むだけで、このページ自体はサーバーを持たない静的ファイルです。

split APK とは何か、なぜ配信されるアプリは分割されているのか

2018 年以降、Play ストアは 1 アプリ 1 APK では配信していません。配信されるのは *app bundle* で、ストアが端末ごとに APK の集合を組み立てます。コードを持つ base APK、CPU アーキテクチャーごとの config split、画面密度ごと、言語ごと、そして任意の機能モジュールごと。手元の端末はそのうち 4〜5 個だけを取得し、残りは他機種用です。だからストアでは 90 MB のアプリが、全部書き出すと 400 MB の .apks になります。そしてその集合から base APK だけを入れると、起動直後に UnsatisfiedLinkError で落ちます——ネイティブコードは置き去りにした ABI split の中にあるからです。Android が 1 セッションで受け付けるのは **各次元につき config split 1 つまで**。ABI 2 つ、密度 2 つは、全部アップロードし終えたあとで INSTALL_FAILED_INVALID_APK になります。

.apks / .xapk / .apkm — 同じ発想、作り手が三者三様

.apks は bundletool 自身の出力で、bundletool build-apks が作るファイルです。各 split と適用条件を記した toc.pb を持ちます。.xapk は APKPure 由来で、パッケージ名・バージョン・split 一覧を記した manifest.json を持ちます。.apkm は APKMirror のもので info.json 付き。ただし *古い* 暗号化 .apkm は APKMirror 自身のインストーラー以外では開けません。このページは黙って失敗せずそう表示します。SAI(Split APKs Installer)は meta.sai_v2.json を書きます。4 つとも中身はメタデータ付きの ZIP で、このページは存在するものを読み、手作業で再梱包されたコンテナではファイル名のパターンに退避します。

署名鍵が違うと必ず失敗する理由と、その代わりにできること

Android はアプリをパッケージ名 *と* 署名証明書で識別します。別の鍵で署名されたものに置き換えられてしまうと、パッケージ名を推測できる誰もが他人のアプリの更新を配れることになるため、プラットフォームは拒否します——INSTALL_FAILED_UPDATE_INCOMPATIBLE です。回避フラグはありません。通る道は 2 つだけ。既存のアプリを先にアンインストールする(データも消えるので必要なものは事前に取り出す)か、v3 署名で既存の鍵からのローテーションを証明できる APK を使うか。ストア版のアプリを誰かが再署名した APK で更新できないのも、デバッグビルドが同じアプリのリリースビルドに上書きできないのも、これが理由です。

1 バイトも送る前にこのページが確認すること

各パッケージをローカルで開いて読みます。アプリ名、パッケージ名、バージョン名とコード、minSdkVersiontargetSdkVersion、要求される実行時権限、そして署名証明書。次に同じパッケージ名で端末に何が入っているかを尋ね、両者を比較します——「10.2.1 → 10.3.0、更新」「入っている版より古い、ダウングレードフラグが必要」「API 33 が必要、この端末は API 30」。署名の比較には Android 自身の dumpsys package が各証明書について出力するハッシュを使い、同じ値を APK の証明書から計算します。その行を出さない端末では、**比較できなかった** と表示します。これは「一致した」とは違います。split の表にはコンテナ内の全 APK を、判定と理由(優先 ABI に一致/より上位の ABI に譲った/最も近い密度/使っていない言語)とともに並べます。どれも手動で変更でき、変更するとどうなりがちかを警告します。

別の入口から: Web ADB ツールキットのハブには端末ダッシュボードと単発インストール用のドロップゾーンがあり、APK アナライザーは端末なしで同じファイルをさらに深く解析し、Android デブロートは要らなくなったものを取り除きます。

よくある質問

.apks や .xapk、.apkm はどうやってインストールしますか?

USB で端末をつないだ状態で、このページにドロップしてください。この 3 形式は base APK と config split を収めた ZIP で、アーカイブごと `pm install` に渡してもインストールできません。インストーラーは各 APK を `install-create` / `install-write` / `install-commit` の 1 セッションに書き込む必要があります。このページはコンテナを展開し、`toc.pb` / `manifest.json` / `info.json` を読み、端末の CPU ABI・画面密度・言語に合う split を選び、それだけを 1 つのセッションに書き込みます。

INSTALL_FAILED_UPDATE_INCOMPATIBLE はどういう意味ですか?

同じパッケージ名のアプリが既に入っていますが、署名証明書が違うため、Android はその APK を更新として扱いません。フラグで回避することはできません。既存のアプリを先にアンインストールする(データも一緒に消えます)か、同じ鍵で署名されたビルドを入手するかです。ストア由来のアプリの上にミラーサイトの APK を入れようとしたときに最も多く出る失敗で、ミラーの配布物とストアの配布物は署名が異なることが珍しくないからです。

.apks が INSTALL_FAILED_INVALID_APK や MISSING_SPLIT で失敗します

ほぼ確実に、セッションに入れた split の組み合わせが正しくありません。`MISSING_SPLIT` は、属する base なしに config/機能 split を入れた場合や、必須の機能モジュールを欠いたまま base を入れた場合です。split インストールでの `INVALID_APK` は、同じ次元の split(ABI 2 つ、密度 2 つ)が 1 セッションに入っていることが大半で、フレームワークがこれを拒否します。どちらもこのページの split 表が防ぐためにあります——各次元 1 つ、base は必ず含めます。選択を手動で変えたなら、あの警告はこの話でした。

adb を入れずに PC から APK をインストールできますか?

できます。それがこのページです。WebUSB により、USB デバッグを有効にした端末に Chromium 系ブラウザーが ADB プロトコルで話せるため、platform-tools のダウンロードも PATH 設定もコマンドの暗記も要りません。ただし制約は本物です。デスクトップ版の Chrome / Edge / Opera 限定(Firefox と Safari に WebUSB はなく、スマートフォンのブラウザーでは不可能)で、ADB インターフェイスを掴めるのは同時に 1 プログラムだけなので、起動中のデスクトップ `adb` サーバーは先に `adb kill-server` で止める必要があります。

アプリを古いバージョンに戻すには?

インストール前にダウングレードフラグ(`-d`)を有効にしてください。Android は既定で低いバージョンコードを `INSTALL_FAILED_VERSION_DOWNGRADE` で拒否しますが、その理由は尊重に値します。保存されたデータは新しい版が書いたもので、古いコードは見たこともない移行を要するデータベースを読めないことが多いのです。インストール自体は通っても、起動時に落ちたり中身が静かに失われたりします。確実なのは、先にアンインストールしてから古い版を新規インストールする道で、代償はデータです。

この方法だと Play プロテクトに引っかかりますか?保証はどうなりますか?

Play プロテクトには引っかかり得ます。パッケージ検証がサイドロードした APK を検査して拒否することがあり、`INSTALL_FAILED_VERIFICATION_FAILURE` として現れます。これは端末側の設定(「Play プロテクトによるアプリのスキャン」と開発者向けオプションの「USB 経由のアプリを確認」)であり、このページが勝手に切るべきものではありません。APK のインストールはシステムパーティションを書き換えず、ブートローダーのアンロックも root 化も不要なので、保証に触れる類の操作ではありません。ただし仕事用プロファイルや端末所有者ポリシーが禁止していることはあり、その場合は `INSTALL_FAILED_USER_RESTRICTED` になります。

  • Web ADB Toolkit

    端末ダッシュボードと、その他の ADB ツール。

  • APK Analyzer

    端末なしで APK を開く: 権限・署名・DEX・リソース。

  • APK Extractor

    逆方向: インストール済みアプリの APK と split を端末から取り出す。

  • Android Debloater

    USB 経由でプリインストールアプリを削除。ワンクリックで復元。