ADB(Android Debug Bridge) のコマンドリスト

いつもの楽しい活字中毒の感じからするとちょっと異質ですが、今回からプログラミング関連の話題も投稿していきます。

Android端末をPCから操作するときに使うのがADB(Android Debug Bridge)です。

いつもADBと言う単語を聞くとAndroid Device Bridgeという文字面が思い浮かぶのですが、調べるたびにAndroid Debug Bridgeだったんだと毎回思ってます。

ADBについてまとめて書かれているブログとかが思いのほか少ないのでまとめてみました。

AndroidにROMを焼くときとかは結構多用します、使う人は使うけど使わない人は全く使わないコマンドです。

ADBの入れ方

いきなりQittaの記事へのリンクですが、下記がわりとまとまってるので下記を参考にPCにADBを入れてください。

Qiita - ADBコマンド導入の方法

下準備

ADBをPCに入れたら、PC内にAndroidエミュレータを起動するか、起動済みのAndroid端末をUSBでPCにつなげます。

  1. つなげるとたぶんPC側でドライバのインストールが始まります、インストール済みなら始まりません
  2. Android端末の設定画面の下の方に「端末情報」というのがあるのでタップ
    • 端末やメーカーによって名前が違う可能性や場所が違う可能性があります。私の持っているAsus Zenfone 3 Laserだと「端末情報」が「システム」内にありました。
  3. どこかに「ビルドナンバー」という表示があるので10回くらいタップ
    • 「端末情報」の下に「ビルド番号」という名前である場合もあります、また「端末情報」=>「ソフトウェア情報」内にあることもあります。
  4. 設定の下の方に開発者向けオプションが表示されます
    • これも表示されるところは端末によって違うので探してみてください。
  5. 開発者向けオプションをONにして、さらに下の方にあるUSBデバッグをONにします
  6. PCにつないでいるとAndroidの画面に、「このPCに接続を許可しますか?」みたいな表示が出るのでOK

6.が出ない場合はUSB接続を一旦解除してからもう一度つなげてみてください。

コマンド

Windowsならコマンドプロンプトかcygwin、Macならターミナルを起動します。

接続済み端末の確認

接続済みのデバイスのリストが表示されます。Androidエミュレータだとたぶんemulator-5554だと思います。
一番地味なコマンドですが一番使います、うまく行かないときにコレを打つとリストに何も表示されず実は接続されていなかったりします。そんなときはUSBを再接続してみてください。純正のケーブルであれば大きな問題はないでしょうが充電のみにしか使えないケーブルなどもありますので注意してください。

1
$ adb devices

ADBの停止と再スタート

$adb devicesでリストが表示されない場合などはこれで停止してから再起動します。

1
2
3
4
5
6
# Stop
$ adb kill-server
# 再起動
$ adb start-server
# or
$ adb devices

端末指定

端末をPCに複数繋いでいる場合とかに必須です。ただ、繋いでいてもUSBデバッグがONになっていて、かつPCの接続も許可している端末が複数ある場合です。
2台つながってるけど、1台は充電だけとかの場合はadbからは無視されるので-sは付けなくても大丈夫です。

1
2
3
4
5
6
7
8
9
10
11
12
13
# シリアルナンバーの指定
$ adb devices
List of devices attached
nantyara device
$ adb -s nantyara <やりたいコマンド>

# USB接続端末を指定
$ adb -d <やりたいコマンド>
## 複数のUSB端末が接続されている場合エラーが出ます

# エミュレータ端末を指定
$ adb -e <やりたいコマンド>
## 複数のエミュレータが起動している場合エラーが出ます

logcat

Androidのログを表示します。見ていると楽しいですが、かなり出ます。スクロールしたりタップしてみると面白いです。

1
2
3
4
5
# log表示
$ adb logcat

# Webviewのみ表示
$ adb logcat | grep CONSOLE

Android端末の設定値取得と設定

Android端末の設定値を取得できます、キャリアの情報とかが見られます。これも見るだけで結構楽しいです、会社の昼休みに見ると昼休みが潰れます。

setpropで設定値も変えられるようですが、たぶん普通の端末では動きません。Root化している端末とかなら動くかもしれませんが試してないのでわかりません。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# シェルに入ってgetprop
$ adb shell getprop

## これでもいい
$ adb shell
### shell 内で
$ getprop

### シェルから出るには
シェル内で Ctrl + d

# getprop は下記のように表示される
# ...
# [ro.wifi.channels]: []
# [ro.zygote]: [zygote32]
# [sys.usb.config]: [adb]
# [video.playback.slow-motion]: [1]
# ...
# roから始まるものはread onlyで設定はできない

# setpropでの設定値の変更
## tcp ポートの変更
$ adb shell setprop service.adb.tcp.port 5555
## カメラの音量を1に
$ adb shell setprop persist.sys.camera-sound 1

# setpropできない場合

## 端末で開発者向けオプション => ルートアクセス => ADBのみ に設定
## ルート権限でADBをつないでからsetpropする
## ルート化している必要があります
$ adb root

アプリのインストール

アプリがPlayストアにはなくて、どこか怪しい場所からダウンロードしてきた場合とか、アプリの開発時とかに使います。普通は使いません。

1
2
3
4
5
6
7
8
# まずはapkファイルのあるディレクトリに移動
$ cd /nantyraroot/nantyarastorage/nantyaradirectory
# apk インストール
$ adb install xxx.apk
# apk 上書きインストール
$ adb install -r xxx.apk
# apk ダウングレード
$ adb install -d xxx.apk

PCからファイルを端末にコピー push

PCからAndroid端末にファイルをコピーする際に使います。Rom焼くときとかは結構使いますが普通は使わないですね。

1
2
3
4
$ adb push nantyara.zip /sdcard/nantyara.zip

# ディレクトリごとpushする場合 <= 私の環境ではうまく動かず
$ adb push dir/. sdcard/

スペースを含むディレクトリにディレクトリごとpushする場合。

1
2
3
4
# 同名のディレクトリを作り
$ adb shell mkdir "sdcard/space\ dir/push\ dir"
# pushする
$ adb push push\ dir/* sdcard/space\ dir/push\ dir

ファイルをPCにコピー pull

Android端末からPCにファイルをコピーする際に使います。画像とかを引っ張ってくるときに使います。
使用場面としては端末内にある画像とかをPCに送りたい時にDropboxとかEmailだと遅い場合とかでしょうか。

1
$ adb pull /sdcard/nantyara.zip nantyara.zip 

fastboot/bootloader起動

fastbootモードを起動するときに使います。大体は端末をオフにしてからボリュームダウンかボリュームアップボタンを押しながら電源ボタンを押すと入れますが、稀にというかそれでは入れないことが結構あります。そんなときにコレを使います。まず普通にAndroidを起動してからこれを打つのキモです。

1
2
3
4
5
6
7
# たぶんこれで起動する
$ adb reboot bootloader
# 上でうまく行かないなら
$ adb reboot fastboot
# さらに上でうまくいかないなら
$ adb shell reboot fastboot

recovery起動

リカバリ(recovery)モードを起動するときに使います。これもfastboot同様大体はAndroidのボリュームダウンかボリュームアップボタンを押しながら電源ボタンを押すと入れますが。

1
2
# たぶんこれでいける
$ adb reboot recovery

sideload

これはカスタムロム焼くときにしか使いません、ロムを端末に焼くには普通Android端末側にロムのデータを入れて、そこからリカバリを使ってロムを焼きます。
内部ストレージかSDカードにロムを入れるのが普通です。

でも稀に内部ストレージが死んでいたりします(実際に全部死んでいたらたぶん起動できませんが)、さらにSDカードも使えない場合があります。そんなときにコレを使います。

まず、前提としてリカバリ(recovery)モードに入っていることです。何らかの方法で入ってください、もしかして端末によってはfastbootモードかもしれませんが、そんなことはないかもしれません。

まずリカバリモードで”apply update from ADB”とか”adb sideload”とかを選択します、それからPCとUSBで繋ぎます。もちろんというかUSBデバッグがONになっている必要があります。
(apply from ADBとかadb sideloadにした場合はUSBデバッグはONになってなくてもよかったかもしれません)

1
2
3
# まずはROMファイルのあるディレクトリに移動
$ cd /nantyraroot/nantyarastorage/nantyaradirectory
$ adb sideload nantyara.zip

成功するとロムのインストールが始まります。でもインストールが成功するかは神のみぞ知ります。

ポートフォワード

USB経由でandroidにPC側からアクセスするときとかに使います。Android内でSSHを立ち上げてPCから接続するときとかに使いますが、普通は使いませんね。

1
2
3
4
5
6
# start
$ adb forward tcp:<pc側ポート> tcp:<android側ポート>
# stop
$ adb forward --remove tcp:<port>
# 全部とめる
$ adb forward --remove-all

Wi-Fi越しにADBコマンドを叩けるようにする

Wi-Fi経由でandroidにアクセスできます。これも普通は使いませんね。
前提として、PCとAndroidが同じWi-Fiネットワーク内にいる必要があります。
また、PCが有線LANにつながっていると有線LANが優先されるはずなので、有線LANは抜いてから試してみてください。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

## ステップ0. Androidの開発者向けオプション内でネットワーク経由のADBをONにできる端末はステップ2-Bへ

## ステップ1. USBでPCとAndroidをつなげる
$ adb devices
$ adb tcpip 5555

## ステップ2-A. Androidの 設定 => 端末情報 内にあるIPアドレスをメモ

## ステップ2-B. Androidの開発者向けオプションでネットワーク経由のADBをONにする ONにすると<IP:ポート>が表示されるのでメモ

## USBを抜いてOK

## ステップ3. 接続
$ adb connect <IP:ポート>

# ADBコマンドが叩ける

## ステップ4. 接続を切る
$ adb disconnect

いかがでしたでしょうか。
私はAndroidにカスタムロムを焼いたりしているのでかなり使います。adb devicesは毎日1回はたたきます。
楽しいからみんなやればいいと思うのですが、まあ普通はやらないでしょうね。

姉妹編
Fastboot のコマンドリスト

追記:
fastbootのコマンドリスト(不完全詳細版)という記事も書いたのでよければ参考にしてください。

どうやってロム焼くのか気になった方は下記も
Nexus 5にAndroid Pieを入れる

参考リンク
https://developer.android.com/studio/command-line/adb?hl=ja