1. はじめに
ADB(Android Debug Bridge)は、Androidデバッグブリッジの略称で、ソケットTCPポートを介した通信方式を採用しています。スマートフォンとの接続には、有線接続と無線接続の2つの方法があります。
(1)有線接続
データケーブルでスマートフォンを接続後、[開発者向けオプション]で[USBデバッグ]を有効にし、[USB設定の選択]で[MTP(メディア転送)]を選択します。
(2)無線接続
adb connect IPアドレス
注意点:
- スマートフォンとPCは同じローカルネットワークに接続されている必要があります
- [USBデバッグ]を有効にし、[MTP(メディア転送)]を選択する必要があります
次のようなエラーが表示される場合:
cannot to 192.168.0.109:5555: 対象コンピュータによって接続が拒否されました。(10061)
次の手順でスマートフォンに接続できます:
- データケーブルでスマートフォンとPCを接続し、次のコマンドを実行:adb tcpip 5555
- データケーブルを外し、[USBデバッグ]を有効にし、[MTP(メディア転送)]を選択
- 次のコマンドを実行:adb connect 192.168.0.109
2. 主要コマンド
2.1 基本コマンド
:: デバイスの確認
adb devices
:: 詳細なデバイス情報の確認(モデル名を含む)
adb devices -l
:: スマートフォン情報の確認(ブランド、モデル、バージョンなど)
adb shell cat /hw_product/etc/prop/local.prop | findstr product
adb shell cat /system/build.prop | findstr product
:: 再起動
adb reboot
:: ログの確認
adb logcat > log.txt
adb logcat | findstr "検索文字列"
:: インストール/アンインストール
adb install xxx.apk
adb uninstall パッケージ名
:: ファイルのプル/プッシュ
adb remount
adb pull /sdcard/a.mp4 C:\Users\ユーザー名\Desktop\
adb push C:\Users\ユーザー名\Desktop\a.mp4 /sdcard/
:: 現在表示中のアクティビティとパッケージ名の確認
adb shell dumpsys window | findstr "mCurrentFocus"
:: アプリケーションバージョンの確認
adb shell pm dump com.example.test | findstr "versionName"
:: 指定コマンドのヘルプ表示
adb コマンド --help
adb shell コマンド --help
メソッド呼び出しスタックの出力:
android.util.Log.d("TAG", android.util.Log.getStackTraceString(new Throwable()));
2.2 画面キャプチャ/録画
:: 画面キャプチャ
adb shell screencap -p /sdcard/1.png
adb pull /sdcard/1.png C:\Users\ユーザー名\Desktop\
:: 画面録画
adb shell screenrecord /sdcard/1.mp4
注意:画面キャプチャ時、[-d]オプションでdisplay idを指定できます。デフォルトは0です。
2.3 システムパラメータの確認/変更
:: システムパラメータ値の確認
adb shell getprop system_params
:: システムパラメータ値の設定
adb shell setprop system_params パラメータ値
:: スマートフォンモデルの確認
adb shell getprop ro.product.model
:: ファームウェアビルド日時の確認
adb shell getprop ro.build.date
2.4 入力のシミュレーション
:: 入力コマンドのヘルプ表示
adb shell input --help
:: 指定座標へのタップ
adb shell input tap <x座標> <y座標>
:: スワイプ操作
adb shell input swipe <x1座標> <y1座標> <x2座標> <y2座標>
:: テキストの入力
adb shell input text <入力文字列>
:: キーイベントの送信
adb shell input keyevent <キーコード>
注意:[-d]オプションでdisplayIdを指定できます。例:
:: 指定displayの指定座標をタップ
adb shell input -d 1 tap 100 200
主な:
3 ホームキー
4 バックキー
5 ダイアラーを開く
6 通話を終了
24 音量を上げる
25 音量を下げる
26 電源キー
27 カメラアプリで撮影
64 ブラウザを開く
82 メニューキー
85 再生/一時停止
86 停止
87 次の曲へ
88 前の曲へ
122 カーソルを行頭またはリストの先頭に移動
123 カーソルを行末またはリストの末尾に移動
126 再生を再開
127 一時停止
164 マイクをミュート
176 設定を開く
187 アプリを切り替え
207 連絡先を開く
208 カレンダーを開く
209 ミュージックを開く
210 電卓を開く
220 画面の輝度を下げる
221 画面の輝度を上げる
223 スリープモードへ
224 画面を点灯
231 ボイスアシスタントを開く
276 ウェイクロックがない場合にスリープ
2.5 adb shell settings
(1)プロパティの確認
:: システム/グローバル/セキュアプロパティの確認
adb shell settings list system
adb shell settings list global
adb shell settings list secure
:: 自動ロック時間の確認(単位:ミリ秒)
adb shell settings list system | findstr "screen_off_timeout"
adb shell settings get system screen_off_timeout
:: 現在の画面輝度の確認
adb shell settings get system screen_brightness
:: デフォルトの入力メソッドの確認(com.example.input/.ImeService)
adb shell settings get secure default_input_method
(2)プロパティの設定
:: 自動ロック時間の設定(単位:ミリ秒、ここでは1日)
adb shell settings put system screen_off_timeout 86400000
:: 現在の画面輝度の設定
adb shell settings put system screen_brightness 100
:: 初期セットアップをスキップ
adb shell settings put global device_provisioned 1 && adb reboot
2.6 adb shell am
am(ActivityManager)は、主にアクティビティやサービスの起動、ブロードキャストの送信などに使用されます。
:: メモ帳を開く
adb shell am start com.huawei.notepad
:: QQを強制終了
adb shell am force-stop com.tencent.mobileqq
:: サービスを起動
adb shell am startservice -a com.example.test.DemoService
:: ブロードキャストを送信
adb shell am broadcast -a com.example.test.ACTION
adb shell cmd activity broadcast -a com.example.test.ACTION
:: ブロードキャストにパラメータを付けて送信(ブール値: ez、整数: ei、長整数: el、浮動小数点: ef、倍精度浮動小数点: ed、文字列: es)
adb shell am broadcast -a com.example.test.ACTION --ei パラメータキー 1
:: 工場出荷時の状態に戻す
adb shell am broadcast -a android.intent.action.MASTER_CLEAR
2.7 adb shell wm
wm(WindowManager)は、主にウィンドウ管理に使用されます。
:: スマートフォンの解像度の確認:Physical size: 1080x2340
adb shell wm size
:: 物理的な画面密度の確認:Physical density: 480
adb shell wm density
2.8 adb shell pm
pm(PackageManager)の主な機能:
- アプリのインストール/アンインストール
- インストール済みアプリのクエリ
- パーミッションの確認/追加/削除
- アプリケーション関連情報のクエリ(アプリケーション、アクティビティ、サービス、レシーバー、プロバイダーおよびそのプロパティなど)
- ユーザーデータやキャッシュのクリア
:: アプリのインストール(インストールファイルがスマートフォン上にある場合)
adb shell pm install パッケージパス
:: アプリのアンインストール
adb shell pm uninstall パッケージ名
:: インストール済みアプリのパッケージ名の確認
adb shell pm list packages [-s:システムパッケージ] [-3:サードパーティーパッケージ]
:: 指定アプリのapkパスの取得
adb shell pm path com.example.test
:: 指定アプリのインストールパスの取得
adb shell pm get-install-location
:: パーミッションの付与
adb shell pm grant com.example.test android.permission.READ_EXTERNAL_STORAGE
:: パーミッションの剥奪
adb shell pm revoke com.example.test android.permission.WRITE_EXTERNAL_STORAGE
:: すべてのユーザーのリスト表示
adb shell pm list users
:: ユーザーの作成
adb shell pm create-user "ユーザー名"
:: ユーザーの削除
adb shell pm remove-user ユーザーID
:: 指定アプリのすべてのデータをクリア
adb shell pm clear com.example.test
2.9 プロセス操作
:: プロセスの確認
adb shell ps | findstr "com.tencent.mobileqq"
:: プロセスの強制終了
adb shell kill PID
adb shell am force-stop パッケージ名
:: ADBサービスの停止/起動
adb kill-server
adb start-server
2.10 adb shell uiautomator
UIレイアウトのダンプ
adb shell uiautomator dump --compressed /data/local/tmp/uidump.xml
adb pull /data/local/tmp/uidump.xml
XMLのオンライン整形
2.11 dumpsys
(1)adb shell dumpsys activity
:: アクティビティコンポーネント情報の確認
adb shell dumpsys activity activities
adb shell dumpsys activity activities | findstr /C:"* Hist"
:: アクティビティのdumpメソッドの呼び出し
adb shell dumpsys activity com.zhyan8.test
:: サービスコンポーネント情報の確認
adb shell dumpsys activity services
:: サービスのdumpメソッドの呼び出し
adb shell dumpsys activity service TestService
:: ContentProviderコンポーネント情報の確認
adb shell dumpsys activity providers
:: BroadcastReceiver情報の確認
adb shell dumpsys activity broadcasts
:: Intent情報の確認
adb shell dumpsys activity intents
:: プロセス情報の確認
adb shell dumpsys activity processes
(2)adb shell dumpsys window
:: ウィンドウ情報の確認
adb shell dumpsys window windows
adb shell dumpsys window windows | findstr /C:"Window #"
:: 画面情報の確認
adb shell dumpsys window displays
:: ポリシー情報の確認
adb shell dumpsys window policy
:: アニメーション情報の確認
adb shell dumpsys window animator
:: セッション情報の確認
adb shell dumpsys window sessions
:: トークン情報の確認
adb shell dumpsys window tokens
:: トレース情報の確認
adb shell dumpsys window trace
(3)adb shell dumpsys gfxinfo
# アプリケーションのグラフィックレンダリングパフォーマンスデータの取得
adb shell dumpsys gfxinfo system total
adb shell dumpsys gfxinfo com.android.systemui total
(4)その他
:: 入力情報の確認
adb shell dumpsys input
:: メモリ情報の確認
adb shell dumpsys meminfo
adb shell dumpsys meminfo com.zhyan8.test
:: 電源管理情報の確認
adb shell dumpsys power
:: バッテリー情報の確認【現在の電量、バッテリー状態、バッテリー温度など】
adb shell dumpsys battery
:: レンダリング情報の確認
adb shell dumpsys SurfaceFlinger
3. ウィンドウとパフォーマンス分析
3.1 winscope
winscopeを使用すると、各フレームのウィンドウ階層情報を確認でき、「ちらつき」「黒い画面」などの問題分析に便利です。
winscopeを取得する方法は以下の通りです。winscopeと動画ファイルを取得後、これらをwinscope.htmlページにドラッグ&ドロップすると、各フレームのスクリーンショット、ウィンドウ階層構造、ウィンドウプロパティなどの情報を確認できます。winscope.htmlファイルの場所:aosp\platform\prebuilts\misc\common\winscope\winscope.html。
1)ウィンドウのトレース
adb root
:: トレース開始
adb shell cmd window tracing start
:: 画面録画開始
adb shell screenrecord /sdcard/screenrecord.mp4
:: 画面録画終了(Ctrl + Cを押す)
:: トレース終了
adb shell cmd window tracing stop
:: 画面録画ファイルの取得
adb pull /sdcard/screenrecord.mp4
:: トレースファイルの取得
adb pull /data/misc/wmtrace/wm_trace.winscope wm_trace.winscope
2)SurfaceFlingerのトレース
adb root
:: トレース開始
adb shell service call SurfaceFlinger 1025 i32 1
:: 画面録画開始
adb shell screenrecord /sdcard/screenrecord.mp4
:: 画面録画終了(Ctrl + Cを押す)
:: トレース終了
adb shell service call SurfaceFlinger 1025 i32 0
:: 画面録画ファイルの取得
adb pull /sdcard/screenrecord.mp4
:: トレースファイルの取得
adb pull /data/misc/wmtrace/layers_trace.winscope
3.2 Perfetto
Perfettoは、高性能のエンドツーエンドの可視化ツールで、システムのパフォーマンストレースと分析に使用されます。主にAndroidとChrome OSで使用されますが、LinuxとWindowsでも実行できます。Perfettoは、カーネルイベント、システムコール、アプリケーションイベント、ユーザー定義のトレースデータなど、複数のソースからのデータを収集・分析できます。
1)カスタムトレースデータ
ユーザーがカスタムトレースデータを追加したい場合は、以下のコードブロックを追加します。
import android.os.Trace;
Trace.beginSection("トレースタグ");
// トレース対象のコードロジック
Trace.endSection();
2)トレースの取得
[開発者オプション-システムトレース]で[長期トレース]と[録音トレース1]を有効にすると、トレースが開始されます。その後、スマートフォンでバグを再現し、バグが再現したら[録音トレース1]をクリックしてトレースを終了します。トレースファイルは/data/local/traces/に保存され、拡張子は.perfettoです。
トレースファイルをhttps://ui.perfetto.devページにドラッグ&ドロップすると、トレース情報を確認できます。
4. 拡張機能
(1)一括プッシュ
特定の拡張子を持つファイルを一括でプッシュする必要がある場合、以下のスクリプトを使用できます:
set ソースパス=E:\android\jar\
set ターゲットパス=/system/framework/
cd %ソースパス%
for %%s in (*.jar) do (
adb push %%s %ターゲットパス%
)
pause
注意:上記のコードはbatスクリプトファイルに配置する必要があります。コマンドプロンプトで直接入力する場合は、%%sを%sに変更してください。
(2)プロパティの追加
adb pull hw_product/etc/prop/local.prop
echo xxx_prop = true >> local.prop
adb push local.prop hw_product/etc/prop/local.prop
(3)クリックのシミュレーション
@echo off
setlocal EnableDelayedExpansion
set /a ループ回数=10
adb remount
for /l %%i in (1,1,!ループ回数!) do (
echo **********%%i**********
call :loop
)
pause
:: ループ本体
:loop
adb shell input tap 500 500
:wait 3
adb shell input swipe 500 1000 500 0
:wait 3
call :screenshot
:wait 2
goto:eof
:: 画面キャプチャ
:screenshot
adb shell screencap -p /sdcard/1.png
adb pull /sdcard/1.png 1.png
set 日付一時=%date:~0,10%
set 時間一時=%time:~0,12%
set 時間一時=%時間一時::=-%
set 時間一時=%時間一時:.=-%
set t=%日付一時:/=-%_%時間一時: =0%
echo %t%
set ファイル名=%t%.png
ren 1.png %ファイル名%
goto:eof
:: 待機
:wait
choice /T %1 /C ync /CS /D y /n
::ping 127.0.0.1 -n 1 >nul
goto:eof
(4)ディレクトリ内のファイル名が最大のファイルを取得
@echo off
setlocal EnableDelayedExpansion
set ディレクトリ="/sdcard/Pictures/Screenshots/"
call :getLastFile %ディレクトリ%
echo 最終ファイル: %最終ファイル%
adb pull %ディレクトリ%%最終ファイル%
pause
:getLastFile
set "最終ファイル="
set "コマンド=adb shell ls %1"
for /f "tokens=*" %%f in ('%コマンド%') do (
if not defined 最終ファイル (
set "最終ファイル=%%f"
) else if "%%f" gtr "%最終ファイル%" (
set "最終ファイル=%%f"
)
)
goto:eof
(5)アプリのレンダリング情報を一括取得(各レイヤーのスクリーンショットを含む)
@echo off
setlocal EnableDelayedExpansion
adb shell rm -rf /data/user/0/null/dumpGraphics/graphicbuffer
adb shell rm -rf /data/user/0/com.android.systemui/dumpGraphics/graphicbuffer
adb shell rm -rf /data/user/0/com.android.launcher/dumpGraphics/graphicbuffer
adb shell dumpsys gfxinfo system total
adb shell dumpsys gfxinfo com.android.systemui total
adb shell dumpsys gfxinfo com.android.launcher total
if exist "dumpGraphics" (
rmdir /s /q "dumpGraphics"
)
if not exist "dumpGraphics\system\" (
mkdir "dumpGraphics\system"
)
if not exist "dumpGraphics\systemui\" (
mkdir "dumpGraphics\systemui"
)
if not exist "dumpGraphics\launcher\" (
mkdir "dumpGraphics\launcher"
)
timeout /t 2 /nobreak >nul
adb pull /data/user/0/null/dumpGraphics/graphicbuffer dumpGraphics/system
adb pull /data/user/0/com.android.systemui/dumpGraphics/graphicbuffer dumpGraphics/systemui
adb pull /data/user/0/com.android.launcher/dumpGraphics/graphicbuffer dumpGraphics/launcher
pause
(6)Perfettoトレースを一括取得
Perfettoトレースを一括で取得するスクリプトは以下の通りです。詳細なリソースは→Perfettoトレース取得スクリプトを参照してください。
@echo off
setlocal EnableDelayedExpansion
chcp 65001 > nul
adb shell setprop persist.traced.enable 1
adb shell setenforce 0
echo トレースを開始します
adb push config.pbtx /data/local/tmp/config.pbtx
timeout /t 2 /nobreak >nul
adb shell "cat /data/local/tmp/config.pbtx | perfetto --txt -c - -o /data/misc/perfetto-traces/trace.perfetto-trace --detach=myname"
echo 任意のキーを押してトレースを停止
pause >nul
echo トレースを停止します
adb shell perfetto --attach=myname --stop
adb shell setprop persist.traced.enable 0
adb shell setenforce 1
for /f "usebackq delims=" %%a in (`powershell -Command "Get-Date -Format 'yyyy-MM-dd_HH-mm-ss'"`) do set "日時=%%a"
echo 日時: %日時%
adb pull /data/misc/perfetto-traces/trace.perfetto-trace trace_%日時%.pb
pause