NO_NAME

適当に技術・仕事・ライフハックの話を書いていく予定です。

Logcatのログを送信する

PCにつないだAndroid端末のログはLogcatでみることができるのだが、テストを行ってくれている同僚やユーザーからログを送ってもらうにはどうしたらいいのかわからなかったので調べてみた。

結論から言うと Log Collector を使うとログを出力することができる。

ソースコード も公開されている。
ただし、このソースコードEclipse にインポートしたところ AndroidManifest.xml の次の部分がエラーになった。

<supports-screens
          android:largeScreens="true"
          android:normalScreens="true"
          android:smallScreens="true"
          android:anyDensity="true" />

これらの表記は API Level 4 からの対応なのだが、インポート直後は target sdkAPI Level 3 になっていることが原因。
次のように書き換えたら問題は解決した。

  • AndroidManifest.xml
<uses-sdk android:minSdkVersion="3" android:targetSdkVersion="4"/>
  • progject.properties
target=android-4

ログを出力の実装ポイントは二つ。

  • ログ読み取りのパーミッションを AndroidManifest.xml に追加すること。
<uses-permission android:name="android.permission.READ_LOGS" />
  • コマンドラインで logcat を実行すること。
ArrayList<String> commandLine = new ArrayList<String>();
commandLine.add("logcat");//$NON-NLS-1$
commandLine.add("-d");//$NON-NLS-1$
ArrayList<String> arguments = ((params != null) && (params.length > 0)) ? params[0] : null;
if (null != arguments){
    commandLine.addAll(arguments);
}
                
Process process = Runtime.getRuntime().exec(commandLine.toArray(new String[0]));
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));

String line;
while ((line = bufferedReader.readLine()) != null){ 
    log.append(line);
    log.append(App.LINE_SEPARATOR); 
}

日本語の情報なら Androidアプリケーションからlogcatコマンドを実行する - Android Wiki が参考になる。
Logcatで使える引数について詳しくは Androidの公式ページ を参照。