Wednesday, September 20, 2023

Androidカスタマイズの扉を開く:ADBとFastbootの核心に迫る

Androidスマートフォンやタブレットは、私たちの日常生活に深く根付いた強力なコンピューティングデバイスです。多くのユーザーは、メーカーが提供する標準的な機能とインターフェースに満足していますが、その表面下には、デバイスの真のポテンシャルを解放するための隠された扉が存在します。その扉を開く鍵となるのが、ADB (Android Debug Bridge)Fastboot です。これらは単なる開発者向けの専門ツールではありません。システムの奥深くにアクセスし、カスタマイズ、トラブルシューティング、そしてパフォーマンスの最適化を可能にする、パワーユーザーにとって不可欠な架け橋なのです。

この記事では、ADBとFastbootの基本的な概念から、そのインストール方法、多岐にわたるコマンドの具体的な使用例、そして実践的な応用シナリオまで、網羅的かつ詳細に解説していきます。アプリの強制終了やパフォーマンスの低下といった日常的な問題の解決から、カスタムROMの導入やカーネルの書き換えといった高度なカスタマイズまで、あなたのAndroid体験を根底から変える知識がここにあります。さあ、デバイスの制約を乗り越え、あなただけの究極のAndroid環境を構築する旅を始めましょう。

目次

第1章:基盤となる概念の理解 - ADBとFastbootとは何か?

ADBとFastbootを効果的に使用するためには、まずそれぞれが何であり、どのような役割を担っているのかを正確に理解することが不可欠です。これらは似ているようで、動作するレイヤーと目的が根本的に異なります。

1.1 ADB (Android Debug Bridge) の構造と役割

ADB (Android Debug Bridge) は、その名の通り、コンピュータとAndroidデバイスとの間の「デバッグ用の橋渡し」をするための、非常に多機能なコマンドラインツールです。Android OSが完全に起動している状態、またはリカバリーモードで動作し、デバイスのソフトウェアレベルでの広範な操作を可能にします。

ADBのアーキテクチャ

ADBは3つのコンポーネントから構成されるクライアント-サーバーモデルを採用しています。

  • クライアント (Client): ユーザーが操作するコンピュータ上で動作します。コマンドプロンプトやターミナルでadbコマンドを入力すると、このクライアントが起動します。
  • サーバー (Server): コンピュータ上でバックグラウンドプロセスとして動作します。クライアントからのコマンドを受け取り、それを適切なデバイス(エミュレータまたは実機)へ中継する役割を担います。また、USB経由で接続されたデバイスを常時監視しています。adb start-serverコマンドで手動起動も可能です。
  • デーモン (Daemon, adbd): Androidデバイス側で動作するバックグラウンドプロセスです。サーバーからのコマンドを受け取り、デバイス上でそれを実行します。

この構造により、一つのコンピュータから複数のAndroidデバイスを同時に管理することが可能になります。

ADBの主な用途

  • アプリケーションのインストールとデバッグ: 開発者がAPKファイルを直接デバイスにインストール(adb install)したり、アンインストール(adb uninstall)したり、デバッグ情報をリアルタイムで監視(adb logcat)するために使用します。
  • ファイル転送: コンピュータとデバイス間でファイルやフォルダを双方向に転送(adb push / adb pull)できます。バックアップやデータ移動に非常に便利です。
  • シェルアクセス: デバイスのLinuxベースのコマンドラインシェルにアクセス(adb shell)し、ファイルシステムの操作、パーミッションの変更、プロセスの確認など、高度な操作を行えます。
  • システムの制御: デバイスの再起動(adb reboot)、リカバリーモードへの移行(adb reboot recovery)、スクリーンショットの撮影(adb shell screencap)など、多岐にわたるシステム制御が可能です。

簡単に言えば、ADBは「起動中のAndroid OSと対話するための万能ツール」です。

1.2 Fastboot の本質とブートローダーとの関係

Fastbootは、ADBとは異なり、Android OSが起動する前の段階、すなわちブートローダー (Bootloader) モードで動作するプロトコルおよびツールです。ブートローダーは、デバイスの電源が投入された際に最初に実行される低レベルのソフトウェアであり、OSを起動させる役割を担っています。Fastbootはこのブートローダーと直接通信し、デバイスの根幹をなすパーティションを直接書き換えることを可能にします。

Fastbootの役割

Fastbootの主な目的は、デバイスのフラッシュメモリ(ストレージ)に存在する様々なパーティションを操作することです。Androidデバイスのストレージは、以下のような複数のパーティションに区切られています。

  • boot: OSの心臓部であるカーネルとRAMディスクが含まれています。
  • system: Android OSの本体、システムアプリ、ライブラリなどが格納されています。
  • recovery: システムのアップデートや修復を行うためのリカバリー環境が格納されています。
  • userdata: ユーザーデータ、インストールしたアプリ、設定などが保存されます。
  • vendor, radioなど: ハードウェア固有のドライバやベースバンドファームウェアなどが含まれます。

Fastbootは、これらのパーティションに対して新しいイメージファイル(.img)を書き込む(フラッシュする)ことができます。

Fastbootの主な用途

  • カスタムリカバリの導入: TWRP (Team Win Recovery Project) のような高機能なカスタムリカバリをrecoveryパーティションにフラッシュします。これにより、システムの完全なバックアップやカスタムROMのインストールが可能になります。
  • カスタムROMやファクトリーイメージの書き込み: デバイスを工場出荷状態に戻すための公式ファクトリーイメージや、LineageOSのようなサードパーティ製のカスタムROMをsystembootパーティションにフラッシュします。
  • ブートローダーのアンロック/ロック: Fastbootコマンドを使用するための前提条件として、ブートローダーをアンロックする必要があります。この操作自体もFastbootを介して行います。

Fastbootは「デバイスの設計図を直接書き換えるための外科手術用メス」と考えることができます。非常に強力ですが、誤った操作はデバイスを起動不能(文鎮化)にするリスクも伴います。

1.3 ADBとFastbootの決定的な違い

両者の違いを明確に理解することが、適切な場面で適切なツールを使い分ける鍵となります。

項目 ADB (Android Debug Bridge) Fastboot
動作モード Android OSが起動している状態、またはリカバリーモード ブートローダーモード(Fastbootモード)
主な目的 OSとの対話、デバッグ、ファイル転送、アプリ管理 パーティションの書き換え(フラッシュ)、システムの根本的な変更
前提条件 デバイス側で「USBデバッグ」が有効になっていること デバイスがブートローダーモードで起動しており、多くの場合「ブートローダーがアンロック」されていること
リスク 比較的低い。誤ったコマンドでもOSの再起動で回復することが多い。 高い。重要なパーティションを誤って書き換えるとデバイスが起動しなくなる可能性がある。
比喩 「OSと会話する通訳者」 「システムの設計図を書き換える外科医」

この違いを念頭に置き、次の章ではこれらのツールを実際に使用するための環境構築に進みます。

第2章:環境構築 - ADBとFastbootの導入と準備

強力なツールも、正しくセットアップされていなければ使うことはできません。この章では、Androidデバイスとコンピュータの両方で必要な準備を、OSごとに詳しく解説します。

2.1 Androidデバイス側の準備:開発者向けオプションの有効化

ADBを使用するには、まずお使いのAndroidデバイスで隠された設定メニューである「開発者向けオプション」を有効にする必要があります。

  1. 「設定」アプリを開く: デバイスのアプリ一覧から「設定」を探してタップします。
  2. 「デバイス情報」または「タブレット情報」へ移動: メニューの最下部にあることが多いです。
  3. 「ビルド番号」を探す: 「ソフトウェア情報」などのサブメニュー内にある場合があります。
  4. 「ビルド番号」を連続でタップする: 「ビルド番号」の項目を7回連続で素早くタップします。タップするたびに「デベロッパーになるまであとXステップです」というメッセージが表示されます。
  5. 開発者向けオプションの有効化: 7回タップすると、PINやパスワードの入力を求められた後、「これでデベロッパーになりました!」というメッセージが表示されます。
  6. 「開発者向けオプション」メニューへのアクセス: 「設定」メニューのメイン画面に戻ると、「システム」の中など、新たに追加された「開発者向けオプション」という項目が見つかります。

次に、開発者向けオプションの中で、ADBとFastbootに必要な設定を有効にします。

  • USBデバッグを有効にする: 「開発者向けオプション」メニューに入り、「USBデバッグ」という項目のスイッチをオンにします。警告メッセージが表示されますが、内容を理解した上で「OK」をタップします。これにより、USB接続を介したADB通信が許可されます。
  • (Fastboot用) OEMロック解除を有効にする: 同じく「開発者向けオプション」メニュー内にある「OEMロック解除」のスイッチをオンにします。これもPINやパスワードの入力と警告の確認が必要です。この設定は、Fastbootでブートローダーをアンロックするために必須です。この項目がないデバイスは、基本的にブートローダーのアンロックがメーカーによって許可されていません。

2.2 コンピュータ側の準備:プラットフォームツールのインストール

ADBとFastbootは、Googleが公式に提供している「SDK Platform-Tools」パッケージに含まれています。OSごとにインストール方法が異なります。

Windowsでのインストール

  1. Platform-Toolsのダウンロード: Android SDK Platform-Toolsの公式ページにアクセスし、「Download SDK Platform-Tools for Windows」のリンクをクリックしてZIPファイルをダウンロードします。
  2. ファイルの展開: ダウンロードしたZIPファイルを、わかりやすい場所(例: C:\platform-tools)に展開(解凍)します。フォルダ名に日本語やスペースが含まれない、シンプルなパスが推奨されます。
  3. 環境変数(PATH)の設定: これが最も重要なステップです。PATHを設定することで、コマンドプロンプトのどの場所からでもadbfastbootコマンドを実行できるようになります。
    1. スタートボタンを右クリックし、「システム」を選択します。
    2. 「システムの詳細設定」または「関連設定」内の「システムの詳細情報」をクリックします。
    3. 「システムのプロパティ」ウィンドウで「環境変数」ボタンをクリックします。
    4. 「システム環境変数」のリストから「Path」を選択し、「編集」をクリックします。
    5. 「新規」をクリックし、先ほど展開したフォルダのパス(例: C:\platform-tools)を入力して「OK」をクリックします。
    6. すべてのウィンドウを「OK」で閉じて設定を保存します。
  4. USBドライバのインストール: 多くのデバイスはWindowsに接続すると自動で認識されますが、特にFastbootモードで認識されない場合は、メーカー固有のUSBドライバが必要です。Google Pixelデバイスの場合は「Google USB Driver」を、その他のメーカー(Samsung, Sonyなど)の場合は各社のサポートページからドライバをダウンロードしてインストールしてください。

macOSでのインストール

macOSでは、手動でインストールする方法と、パッケージマネージャーであるHomebrewを使用する方法があります。

方法1: 手動インストール

  1. Platform-Toolsのダウンロード: 公式ページから「Download SDK Platform-Tools for Mac」を選択してZIPファイルをダウンロードします。
  2. ファイルの展開: ダウンロードしたZIPファイルをダブルクリックして展開します。例えば ~/platform-tools に配置します。
  3. PATHの設定:
    1. ターミナルアプリを開きます。
    2. お使いのシェルに合わせて設定ファイルを編集します(最近のmacOSはzshが標準です)。nano ~/.zshrc と入力します。
    3. ファイルの末尾に次の行を追加します。パスは実際に展開した場所に合わせてください。
      export PATH=$PATH:~/platform-tools
    4. Control + Xを押し、YEnterと続けてファイルを保存します。
    5. ターミナルで source ~/.zshrc を実行するか、ターミナルを再起動して変更を適用します。

方法2: Homebrewを使用(推奨)

Homebrewがインストールされている場合、非常に簡単にインストールできます。

  1. ターミナルを開きます。
  2. 次のコマンドを実行するだけです:
    brew install --cask android-platform-tools
  3. Homebrewが自動的にPATHを設定してくれるため、手動での設定は不要です。

Linux (Debian/Ubuntu系) でのインストール

Linuxでもパッケージマネージャーを使うのが最も簡単です。

  1. ターミナルを開きます。
  2. 次のコマンドでパッケージリストを更新し、ツールをインストールします:
    sudo apt update
    sudo apt install android-sdk-platform-tools
  3. udevルールの設定 (重要): Linuxでは、一般ユーザーがUSBデバイスに直接アクセスするためにパーミッションの設定が必要になる場合があります。
    1. ターミナルで lsusb を実行し、接続したAndroidデバイスのIDを確認します(例: Bus 001 Device 005: ID 18d1:4ee7 Google Inc.)。18d1がベンダーIDです。
    2. udevルールファイルを作成します: sudo nano /etc/udev/rules.d/51-android.rules
    3. ファイルに以下の内容を記述します。idVendorの部分は自分のデバイスのものに置き換えてください。
      SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", MODE="0666", GROUP="plugdev"
    4. ファイルを保存し、パーミッションを適用します: sudo udevadm control --reload-rules
    5. デバイスを再接続すると、正しく認識されるはずです。

2.3 接続の確認:最初のコミュニケーション

すべての設定が完了したら、実際にデバイスとコンピュータが通信できるか確認します。

  1. コマンドプロンプト/ターミナルを開く: WindowsならコマンドプロンプトやPowerShell、macOS/Linuxならターミナルを開きます。
  2. バージョン確認: インストールとPATH設定が正常に行われたかを確認するために、次のコマンドを実行します。バージョン情報が表示されれば成功です。
    adb version
  3. デバイスをUSBで接続: USBデバッグを有効にしたAndroidデバイスを、品質の良いUSBケーブルでコンピュータに接続します。
  4. USBデバッグの許可: デバイスの画面に「USBデバッグを許可しますか?」というポップアップが表示されます。コンピュータのRSAキーフィンガープリントが表示されるので、内容を確認し、「このパソコンからのUSBデバッグを常に許可する」にチェックを入れて「許可」または「OK」をタップします。これはセキュリティのための重要なステップです。
  5. ADB接続の確認: ターミナルで次のコマンドを実行します。
    adb devices

    次のように表示されれば、ADB接続は成功です。
    List of devices attached
    XXXXXXXXXXXXXX device
    (XXXXXXXXXXXXXXはデバイスのシリアルナンバーです)

    もし unauthorized と表示された場合は、デバイス側の許可ポップアップが正しく処理されていません。もう一度確認してください。offlineと表示される場合は、ケーブルやポート、ドライバの問題が考えられます。

  6. Fastboot接続の確認:
    1. まず、ADBコマンドでデバイスをブートローダーモードに再起動します。
      adb reboot bootloader
    2. デバイスが再起動し、ドロイド君が描かれた黒い画面(メーカーによって異なります)が表示されます。これがブートローダーモードです。
    3. 次に、ターミナルでFastbootの接続を確認します。
      fastboot devices
    4. ADBと同様に、シリアルナンバーと fastboot という文字が表示されれば成功です。
      XXXXXXXXXXXXXX fastboot
    5. 確認が終わったら、通常のAndroid OSに再起動します。
      fastboot reboot

これらの確認作業がすべて成功すれば、環境構築は完了です。次の章から、いよいよ具体的なコマンドの世界に飛び込みます。

第3章:コマンド詳解 - ADBでデバイスを自在に操る

この章では、ADBの多岐にわたるコマンドを機能別に分類し、具体的な使用例とともに詳しく解説します。これらのコマンドを習得することで、日常的なタスクの自動化から高度なトラブルシューティングまで、幅広い操作が可能になります。

3.1 基本的な接続とデバイス管理

これらのコマンドは、ADBの基本中の基本であり、デバイスとの接続状態を確認したり、サーバーを管理したりするために使用します。

  • 接続デバイスの確認:
    adb devices

    接続されているデバイスのシリアルナンバーと状態(device, offline, unauthorized)を表示します。-lオプションを付けると、モデル名などの詳細情報も表示されます。
    adb devices -l

  • ADBサーバーの制御:

    接続が不安定な場合や、ADBが応答しない場合に役立ちます。

    adb kill-server   # ADBサーバーを停止
    adb start-server  # ADBサーバーを起動

    通常、adb kill-serverの後に何らかのadbコマンドを実行すると、サーバーは自動的に再起動します。

  • デバイスの再起動:

    様々なモードでデバイスを再起動できます。

    adb reboot              # 通常の再起動
    adb reboot recovery     # リカバリーモードで再起動
    adb reboot bootloader   # ブートローダー(Fastboot)モードで再起動
  • デバイス情報の取得:
    adb get-serialno    # シリアルナンバーを取得
    adb get-state       # デバイスの状態(device, recovery, bootloader)を取得

3.2 アプリケーション(パッケージ)管理

Androidでは、アプリはパッケージ(APKファイル)として管理されています。ADBを使えば、GUIを介さずにアプリのインストールやアンインストール、データ管理が可能です。

  • アプリのインストール:
    adb install <path/to/app.apk>

    コンピュータ上にあるAPKファイルをデバイスにインストールします。便利なオプションも多数あります。

    • -r: アプリが既に存在する場合に、データを保持したまま上書きインストールします。
    • -d: ダウングレード(古いバージョンのインストール)を許可します。
    • -g: インストール時に、マニフェストで定義されている全てのランタイムパーミッションを許可します。(Android 6.0以降)

    例: adb install -r -g my-app-v2.apk

  • 複数APKのインストール(Split APKs):
    adb install-multiple <app.apk> <split1.apk> <split2.apk>

    ベースAPKと分割された設定APKなどをまとめてインストールします。

  • アプリのアンインストール:
    adb uninstall <package.name>

    パッケージ名を指定してアプリをアンインストールします。-kオプションを付けると、アプリ本体は削除されますが、データとキャッシュは保持されます。
    adb uninstall -k com.example.app

  • パッケージ名を確認する方法:
    adb shell pm list packages

    デバイスにインストールされている全てのパッケージ名の一覧を表示します。非常に長大なリストになるため、grep(macOS/Linux)やfindstr(Windows)と組み合わせて特定のアプリを探すと便利です。

    例 (Linux/macOS): adb shell pm list packages | grep "google"

  • アプリデータの消去:
    adb shell pm clear <package.name>

    特定のアプリのデータを消去し、インストール直後の状態に戻します。設定アプリから「ストレージを消去」を実行するのと同じ効果です。

3.3 ファイルシステムの操作

デバイスとコンピュータ間でファイルをやり取りするためのコマンドです。

  • デバイスからコンピュータへファイルをコピー:
    adb pull <device/path/to/file> <local/path/to/destination>

    例: スクリーンショットフォルダ全体をカレントディレクトリにコピーする
    adb pull /sdcard/Pictures/Screenshots/ .

  • コンピュータからデバイスへファイルをコピー:
    adb push <local/path/to/file> <device/path/to/destination>

    例: ダウンロードした音楽ファイルをデバイスのMusicフォルダにコピーする
    adb push my_song.mp3 /sdcard/Music/

3.4 ADB Shell:デバイス内部へのアクセス

adb shellは、デバイス上で直接Linuxコマンドを実行するための強力な機能です。これにより、GUIでは不可能な高度な操作が実現できます。

adb shell

このコマンドを実行すると、プロンプトがデバイス側のものに変わります。ここから先は、デバイス上でコマンドを実行していることになります。exitで元のプロンプトに戻れます。また、adb shell "command"のように、ワンライナーでコマンドを実行することも可能です。

便利なシェルコマンドの例

  • 画面の解像度と密度を確認/変更:
    # 確認
    adb shell wm size
    adb shell wm density
    
    # 変更 (注意: 予期せぬ表示崩れが起きる可能性あり)
    adb shell wm size 1080x1920
    adb shell wm density 420
    
    # 元に戻す
    adb shell wm size reset
    adb shell wm density reset
  • スクリーンショットを撮る:
    adb shell screencap /sdcard/screenshot.png
    adb pull /sdcard/screenshot.png

    デバイスのSDカードにスクリーンショットを保存し、それをPCにコピーする一連の流れです。

  • 画面を録画する:
    adb shell screenrecord /sdcard/myvideo.mp4

    録画を開始します。停止するにはCtrl + Cを押します。録画したファイルはadb pullでPCにコピーできます。--time-limit--sizeなどのオプションもあります。

  • キーイベントを送信:
    adb shell input keyevent <keycode>

    物理ボタンの押下をシミュレートします。主なキーコードは以下の通りです。

    • 3: HOME
    • 4: BACK
    • 26: POWER
    • 24: VOLUME_UP
    • 25: VOLUME_DOWN
    • 82: MENU

    例: 電源ボタンを押して画面をオン/オフする
    adb shell input keyevent 26

  • テキストを入力:
    adb shell input text "Hello Android"

    現在フォーカスが当たっているテキストフィールドに文字列を直接入力します。スペースは%sで表現します。
    adb shell input text "Hello%sAndroid"

3.5 デバッグと情報収集

ADBの本来の目的であるデバッグに関連するコマンドは、トラブルシューティングに絶大な効果を発揮します。

  • Logcat: システムログの表示:
    adb logcat

    デバイスで発生している全てのシステムイベントやアプリのログをリアルタイムで表示します。情報量が膨大なので、フィルタリングが重要です。

    • タグでフィルタ: adb logcat -s "MyTag" (MyTagというタグの付いたログのみ表示)
    • 優先度でフィルタ: ログには優先度(V: Verbose, D: Debug, I: Info, W: Warn, E: Error, F: Fatal, S: Silent)があります。
      adb logcat *:E (Error以上のログを全て表示)
    • 特定のアプリのログのみ表示:
      # まずアプリのプロセスID(PID)を調べる
      adb shell pidof com.example.app
      # PIDを指定してlogcatを実行
      adb logcat --pid=<PID>
    • ログをファイルに出力: adb logcat -d > log.txt
  • バグレポートの生成:
    adb bugreport ./bugreport-data

    デバイスの状態、ログ、各種情報を含む詳細なバグレポート(ZIPファイル)を生成します。アプリ開発者に問題を報告する際に非常に役立ちます。

  • システムサービス情報のダンプ:
    adb shell dumpsys <service>

    Androidの様々なシステムサービスの状態をダンプ(詳細表示)します。非常に多くの情報が含まれており、特定の情報を探すにはgrepなどとの組み合わせが必須です。

    例:

    # バッテリー状態の詳細情報を表示
    adb shell dumpsys battery
    
    # 現在のアクティビティスタックを表示
    adb shell dumpsys activity activities
    
    # ネットワークポリシー情報を表示
    adb shell dumpsys netpolicy

これらのADBコマンドを組み合わせることで、デバイスの挙動を深く理解し、様々な問題を解決する糸口を見つけることができます。

第4章:システムの核心に触れる - Fastbootコマンドの威力

Fastbootは、デバイスのソフトウェアの基盤を直接操作するためのコマンドです。ADBよりも低レベルで動作するため、より強力で、同時にリスクも高まります。この章のコマンドを実行する前には、必ずデータのバックアップを取り、これから行う操作の意味を完全に理解してください。

4.1 最も重要なステップ:ブートローダーのアンロック

ほとんどのFastbootコマンド、特にパーティションを書き換えるflashコマンドを使用するには、まずブートローダーをアンロックする必要があります。

警告: ブートローダーのアンロック操作は、デバイス上の全てのユーザーデータ(写真、アプリ、設定など)を完全に消去し、工場出荷状態に戻します。また、多くのメーカーでは保証が無効になります。

  1. 前提条件の確認:
    • 第2章で解説した通り、デバイスの「開発者向けオプション」で「OEMロック解除」が有効になっていることを確認します。
    • 重要なデータのバックアップが完了していることを確認します。
  2. ブートローダーモードへの移行:
    adb reboot bootloader
  3. アンロックコマンドの実行:

    コマンドはデバイスの世代によって異なります。

    比較的新しいデバイス (Pixel 2以降など):

    fastboot flashing unlock

    古いデバイス:

    fastboot oem unlock
  4. デバイス上での確認:

    コマンド実行後、デバイスの画面にアンロックを最終確認するメッセージが表示されます。音量ボタンで「Yes」や「Unlock the bootloader」を選択し、電源ボタンで決定します。この操作を完了すると、デバイスのデータが消去され、再起動します。

アンロックが完了すると、デバイス起動時に「The bootloader is unlocked...」という警告メッセージが表示されるようになります。これは正常な状態です。

ブートローダーを再ロックする

デバイスを売却する際など、セキュリティ上の理由からブートローダーを再ロックしたい場合があります。注意: 再ロックする前に、必ずデバイスが完全にストック(公式)の状態に戻っていることを確認してください。カスタムROMなどがインストールされた状態で再ロックすると、デバイスが起動しなくなる(ハードブリック)危険性があります。

# 新しいデバイス
fastboot flashing lock

# 古いデバイス
fastboot oem lock

この操作も同様に、デバイス上で最終確認が必要です。

4.2 パーティションへの書き込み:fastboot flash

fastboot flashは、Fastbootの核となるコマンドです。指定したパーティションに、指定したイメージファイル(.img)を書き込みます。

fastboot flash <partition_name> <filename.img>

主なパーティションとフラッシュの例

  • リカバリ (recovery):

    TWRPのようなカスタムリカバリを導入する際に使用します。これにより、NandroidバックアップやカスタムROMのインストールが可能になります。

    fastboot flash recovery twrp-3.7.0_12-0-oriole.img
  • ブート (boot):

    カーネルとRAMディスクを含むブートイメージを書き込みます。Magiskでパッチを当てたブートイメージをフラッシュしてroot化したり、カスタムカーネルを導入したりする際に使用します。

    fastboot flash boot magisk_patched-26400_abcdef.img
  • システム (system):

    Android OS本体を書き込みます。カスタムROMのイメージや、工場出荷時のファクトリーイメージをフラッシュする際に使用されます。(最近のデバイスでは、systemイメージが巨大なため、直接フラッシュすることは稀で、リカバリ経由でZIPファイルをインストールすることが多いです)

    fastboot flash system system.img

他にもvendor, vbmeta, radioなど、デバイスのファクトリーイメージには多くのパーティションイメージが含まれており、それらを一括で書き込むためのスクリプト(flash-all.batflash-all.sh)が同梱されていることが一般的です。

4.3 A/Bパーティションスキームの理解

近年のAndroidデバイスの多くは、シームレスアップデートを実現するためにA/Bパーティションスキームを採用しています。これは、bootsystemといった重要なパーティションがAとBの2つのスロット(例: boot_a, boot_b)を持っていることを意味します。

ユーザーがスロットAでデバイスを使用している間に、OTAアップデートは非アクティブなスロットBにバックグラウンドで適用されます。次回の再起動時に、デバイスはスロットBから起動し、ユーザーはダウンタイムなしでアップデートを完了できます。もしスロットBでの起動に失敗した場合は、自動的にスロットAにフォールバックする安全性も備えています。

A/BデバイスでのFastboot操作

このスキームにより、Fastbootのコマンドも少し変わります。

  • 現在のアクティブなスロットを確認:
    fastboot getvar current-slot

    出力は a または b になります。

  • 特定のスロットにフラッシュ:

    パーティション名の末尾に _a または _b を付けます。

    fastboot flash boot_a magisk_patched.img
    fastboot flash boot_b magisk_patched.img

    通常、両方のスロットに同じイメージをフラッシュすることが推奨されます。

  • アクティブなスロットを切り替え:
    fastboot --set-active=a
    fastboot --set-active=b
  • リカバリパーティションの不在:

    A/Bデバイスには、独立したrecoveryパーティションが存在しません。リカバリ機能はbootパーティションに統合されています。そのため、TWRPなどを導入する場合、fastboot flash recoveryではなく、fastboot flash boot を使用するか、後述のfastboot bootコマンドで一時的に起動します。

4.4 その他の重要なFastbootコマンド

  • 一時的なイメージの起動: fastboot boot
    fastboot boot <filename.img>

    このコマンドは、イメージをデバイスに恒久的にフラッシュするのではなく、そのイメージを使って一度だけデバイスを起動します。特にカスタムリカバリを試す際に非常に便利です。TWRPのイメージをこのコマンドで起動し、動作に問題がないことを確認してから、TWRP自体を使って恒久的にインストールすることができます。

    例: fastboot boot twrp.img

  • パーティションの消去: fastboot erase / format
    fastboot erase <partition_name>

    指定したパーティションのデータを消去します。ファクトリーリセットを行う際によく使われます。

    # ユーザーデータを全て消去 (工場出荷状態に戻す)
    fastboot erase userdata
    
    # キャッシュを消去
    fastboot erase cache

    formatコマンドも同様の目的で使用されますが、ファイルシステムを指定できる場合があります。通常はeraseで十分です。

  • デバイス情報の取得: fastboot getvar
    fastboot getvar <variable>

    ブートローダーが保持している様々な情報を取得できます。allを指定すると、全ての情報を一度に表示します。

    例: fastboot getvar all

    出力には、製品名、シリアルナンバー、ブートローダーのバージョン、パーティション情報、現在のスロットなど、非常に多くの有用な情報が含まれています。

第5章:問題解決 - 一般的なトラブルシューティング

ADBとFastbootは強力なツールですが、環境設定や操作の過程で様々な問題に遭遇することがあります。この章では、よくあるエラーメッセージとその原因、そして解決策を解説します。

5.1 接続に関する問題

エラー: `adb: command not found` (Linux/macOS) または `'adb' is not recognized as an internal or external command...` (Windows)

  • 原因: このエラーは、システムがadbコマンドの実行ファイルを見つけられないことを意味します。最も一般的な原因は、Platform-Toolsのフォルダへのパスが環境変数PATHに正しく設定されていないことです。
  • 解決策:
    1. 第2章の環境変数設定の手順を再度確認してください。パスのスペルミスがないか、フォルダの場所が正しいかを確認します。
    2. Windowsでは、環境変数を設定した後に開いていたコマンドプロンプトは、一度閉じてから新しく開く必要があります。
    3. 一時的な解決策として、コマンドプロンプト/ターミナルでPlatform-Toolsのフォルダに直接移動(cd C:\platform-toolsなど)してから、./adb(Linux/macOS)やadb(Windows)コマンドを実行することもできます。

`adb devices`で `unauthorized` と表示される

  • 原因: コンピュータがデバイスに接続しようとしましたが、デバイス側でUSBデバッグが許可されていません。
  • 解決策:
    1. デバイスの画面に「USBデバッグを許可しますか?」というポップアップが表示されていないか確認し、表示されていれば許可します。
    2. ポップアップが表示されない場合、一度USBケーブルを抜き差ししてみてください。
    3. 「開発者向けオプション」メニュー内にある「USBデバッグ許可の取り消し」を実行し、再度ケーブルを接続してポップアップを再表示させます。
    4. adb kill-serveradb start-serverを実行してADBサーバーを再起動してみます。

`adb devices`で `offline` と表示される、または何も表示されない

  • 原因: 物理的な接続に問題があるか、ドライバが正しく動作していない可能性があります。
  • 解決策:
    1. USBケーブルとポートを確認: 最も多い原因です。データ転送に対応した品質の良いUSBケーブルを使用してください(充電専用ケーブルでは動作しません)。コンピュータの別のUSBポート(特にUSB 2.0ポート)に接続してみることも有効です。USBハブを介している場合は、直接接続を試してください。
    2. ドライバの確認 (Windows): デバイスマネージャーを開き、デバイスが「ADB Interface」や「Android Device」として正しく認識されているか確認します。黄色の感嘆符が付いている場合は、ドライバに問題があります。
    3. USBデバッグの再有効化: デバイスの「開発者向けオプション」で、USBデバッグを一度オフにしてから再度オンにしてみます。

5.2 Fastboot実行時のエラー

`fastboot devices`で何も表示されない

  • 原因: デバイスがFastbootモードで正しく認識されていません。
  • 解決策:
    1. デバイスが確実にブートローダー/Fastbootモードで起動しているか確認します。
    2. ADBと同様に、USBケーブルとポートの問題を確認します。
    3. ドライバの問題 (Windows): Fastbootモード用のドライバは、ADBモード用のドライバとは別物です。デバイスをFastbootモードで接続した状態でデバイスマネージャーを開き、「Android Device」カテゴリの下に「Android Bootloader Interface」のようなデバイスが表示されているか確認します。もし認識されていない場合は、Google USB Driverやメーカー提供のドライバを再度インストールする必要があります。

エラー: `FAILED (remote: 'flashing is not allowed')` または `FAILED (remote: 'oem unlock is not allowed')`

  • 原因: ブートローダーがロックされた状態で、フラッシュやアンロックを試みようとしたか、あるいはデバイス側でOEMロック解除が許可されていません。
  • 解決策:
    1. Android OSを起動し、「開発者向けオプション」内の「OEMロック解除」がオンになっていることを確認します。グレーアウトしていて操作できない場合、そのデバイスはメーカーによってアンロックが許可されていません。
    2. fastboot flashコマンドを実行する前に、ブートローダーがアンロックされていることを確認してください。

エラー: `FAILED (remote: 'partition not found')`

  • 原因: 存在しないパーティション名を指定してフラッシュしようとしました。
  • 解決策: パーティション名のスペルが正しいか確認してください。A/Bパーティションデバイスの場合、recoveryパーティションは存在しないかもしれません。fastboot getvar allを実行して、デバイスに存在するパーティションの一覧を確認するのが確実です。

5.3 Windowsにおけるドライバー問題

Windowsユーザーにとって、ドライバの問題は最も頻繁に遭遇する障壁です。デバイスマネージャーでの手動インストール方法を覚えておくと非常に役立ちます。

  1. デバイスをADBモードまたはFastbootモードでPCに接続します。
  2. デバイスマネージャーを開き、認識されていないデバイス(通常は黄色の感嘆符付き)を右クリックして「ドライバーの更新」を選択します。
  3. 「コンピューターを参照してドライバーを検索」を選択します。
  4. 「コンピューター上の利用可能なドライバーの一覧から選択します」をクリックします。
  5. 「すべてのデバイスを表示」を選択して「次へ」をクリックします。
  6. 「ディスク使用」ボタンをクリックし、「参照」からダウンロード・展開したGoogle USB Driverフォルダ内のandroid_winusb.infファイルを選択します。
  7. モデルの一覧から「ADB Interface」(ADBモードの場合)または「Bootloader Interface」(Fastbootモードの場合)を選択してインストールします。警告が表示されても続行してください。

この手順により、多くのドライバ関連の問題を強制的に解決することができます。

第6章:実践的応用例と今後の展望

これまでに学んだ知識を統合し、ADBとFastbootが実際にどのように活用されるのかを具体的なシナリオを通じて見ていきましょう。これらの応用例は、Androidカスタマイズの世界への入り口となります。

6.1 OTAアップデートのサイドロード

メーカーからのOTA (Over-The-Air) アップデートは、通常、段階的に配信されるため、自分のデバイスに届くまで数週間かかることがあります。ADBのsideload機能を使えば、公式のアップデートZIPファイルを手動で適用し、誰よりも早く最新バージョンを手にすることができます。

手順

  1. OTA ZIPファイルの入手: メーカーの公式サイトや、XDA-Developersのようなコミュニティフォーラムから、お使いのデバイスモデルと現在のビルド番号に対応したOTAアップデートのZIPファイルを入手します。
  2. リカバリーモードへの移行:
    adb reboot recovery
  3. ADBからのアップデート適用を選択: デバイスがストックリカバリで起動したら、音量ボタンで「Apply update from ADB」を選択し、電源ボタンで決定します。
  4. サイドロードの実行: デバイスの画面に指示が表示されたら、PCのターミナルで以下のコマンドを実行します。
    adb sideload <path/to/ota-file.zip>
  5. 処理の完了を待つ: ファイルの検証とインストールが始まります。デバイスとターミナルの両方で進捗が確認できます。完了したら、リカバリメニューから「Reboot system now」を選択してデバイスを再起動します。

この方法は、アップデートを待てない場合だけでなく、何らかの理由でOTAが失敗するデバイスを修復する際にも有効です。

6.2 カスタムリカバリ(TWRP)の導入

TWRP (Team Win Recovery Project) は、Androidデバイスで最も人気のあるカスタムリカバリです。システムの完全なバックアップ(Nandroidバックアップ)、カスタムROMのインストール、root化など、高度なカスタマイズの基盤となります。

手順(非A/Bデバイスの例)

  1. ブートローダーのアンロック: 第4章で解説した手順で、ブートローダーをアンロックします。
  2. TWRPイメージの入手: TWRP公式サイトから、お使いのデバイス用の最新の.imgファイルをダウンロードします。
  3. ブートローダーモードへの移行:
    adb reboot bootloader
  4. TWRPの一時起動(推奨): まずはfastboot bootでTWRPが正常に動作するかテストします。
    fastboot boot twrp-image.img
  5. TWRPの恒久的なインストール: デバイスがTWRPで起動し、タッチ操作などが問題ないことを確認できたら、TWRPをrecoveryパーティションにフラッシュします。
    fastboot flash recovery twrp-image.img

    または、一時起動したTWRPの「Install」メニューからTWRPイメージファイル自身をRecovery Ramdiskとしてインストールすることもできます。

  6. リカバリへの再起動: フラッシュ後、fastboot reboot recoveryなどでTWRPが起動することを確認します。

6.3 Magiskによるシステム改変

Magiskは、現在の主流となっているroot化ツールであり、システムパーティションを直接変更しない「システムレス」な改変を可能にします。これにより、セーフティネット(SafetyNet)を回避し、銀行アプリなどが動作しやすくなるという利点があります。

手順

  1. ストックブートイメージの入手: お使いのデバイスの現在のファームウェアに対応するストック(公式)のboot.imgを入手します。ファクトリーイメージから抽出するのが一般的です。
  2. Magiskアプリのインストール: Magiskの公式GitHubリリースページから最新のMagiskアプリのAPKをダウンロードし、デバイスにインストールします。
  3. ブートイメージへのパッチ適用:
    1. 入手したストックboot.imgをデバイスの内部ストレージにコピーします。
    2. Magiskアプリを開き、「インストール」ボタンをタップします。
    3. 「メソッド」として「ファイルを選択してパッチを当てる」を選び、先ほどコピーしたboot.imgを選択します。
    4. Magiskがパッチ処理を行い、Downloadフォルダ内にmagisk_patched-....imgという名前の新しいイメージファイルを生成します。
  4. パッチ適用済みイメージのフラッシュ:
    1. 生成されたmagisk_patched-....imgファイルをPCにコピーします(adb pullを使用)。
    2. デバイスをブートローダーモードで再起動します(adb reboot bootloader)。
    3. パッチ適用済みのブートイメージをフラッシュします。
      fastboot flash boot magisk_patched-....img
  5. 再起動と確認: fastboot rebootでデバイスを再起動します。Magiskアプリを開き、インストール状態がバージョン番号で表示されていればroot化は成功です。

6.4 結び:責任あるカスタマイズのために

ADBとFastbootは、Androidデバイスの可能性を無限に広げるための強力な鍵です。この記事で紹介したコマンドや手順は、その広大な世界のほんの入り口に過ぎません。しかし、この力には大きな責任が伴います。

  • 常にバックアップを: 重要な操作の前には、必ずデータのバックアップを取る習慣をつけましょう。
  • 正確な情報を: お使いのデバイスモデルに特化した情報を、XDA-Developersのような信頼できるコミュニティで必ず確認してください。誤ったファイルや手順は、デバイスを文鎮化させる可能性があります。
  • リスクを理解する: ブートローダーのアンロックやシステムの改変は、セキュリティを低下させ、メーカーの保証を無効にする行為です。そのリスクを理解した上で、自己責任で行ってください。

これらの注意点を守り、探求心を忘れなければ、ADBとFastbootはあなたのAndroidライフをより豊かで自由なものにする、最高の相棒となるでしょう。システムの仕組みを学び、問題を自力で解決し、最終的には世界中の開発者が作り上げたカスタムROMやMODを導入して、真に「あなただけの」デバイスを創造することが可能になるのです。


0 개의 댓글:

Post a Comment