2010年10月7日木曜日

adb logcat (複数デバイスが存在する場合)

USB で実機が接続され、さらにエミュレーターが起動されている状態で、

adb logcat を実行すると、以下のエラーが繰り返し表示されます。


 -waiting for device -
 error: more than one device and emulator


これを回避するには、-s オプションにて、デバイスを指定する必要があります。

シリアル番号は adb devices で確認できます。


以下は実行例です。


 C:\> adb devices      
      … (1)
 List of devices attached
 HT97ALF0xxxx device
 emulator-5554 device


 C:\> adb -s emulator-5554 logcat  … (2)


(1) 実機1つ、エミュレータが1つ起動されている状態です

(2) エミュレーターに対して、adb logcat を実行しています。


毎回、シリアル番号を指定するのは面倒なので、バッチを作成してみました。

logcat_cmd.bat 等、適当な名前で保存して、実行するだけで使用できます。


デバイスが1つしかないときは、無条件に adb logcat を実行し、

デバイスが2つ以上あるときは、リストから選択させるようにして、

adb -s <シリアル番号> logcat を実行するようにしています。


adb logcat を状況に合わせて実行するバッチ
@echo off

REM 前提条件
REM コマンド・プロンプトが以下の2点を満たす状態で開始されること。
REM 「オプション」タブで「現在のコードページが『932』
REM 「フォント」タブで「フォント」が『MS ゴシック』

setlocal enabledelayedexpansion

set CMD=

set /A num = 0
REM xxxx device となっている行のみ表示
for /F "tokens=1-2" %%a in ('adb devices ^| findstr device ^| findstr /V "List of devices attached"') do (
  set /A num = !num! + 1
  echo !num!. %%a
)

REM デバイスなし
if %num% EQU 0 (
  echo デバイスが存在しません。
  pause
  goto :STOP
) else if %num% EQU 1 (
  REM デバイス1つ
  set CMD=adb logcat
  chcp 65001 & !CMD!
  goto :STOP
)

REM デバイス2つ以上
set /p select_num=adb logcat を実行するデバイスを選択して下さい(1-%num%)
set /A num = 0
for /F "tokens=1-2" %%a in ('adb devices ^| findstr [a-zA-Z] ^| findstr /V "^List of devices"') do (
  set /A num = !num! + 1
  if !num! EQU %select_num% (
  set CMD=adb -s %%a logcat
  chcp 65001 & !CMD!
  )
)

:STOP

endlocal

exit /b 0