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 sdk が API 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の公式ページ を参照。