LogCatで表示するの内容をテキストビューに表示したい

6,150 views
Skip to first unread message

And-Y

unread,
Jan 25, 2012, 12:36:36 AM1/25/12
to 日本Androidの会
たびたびお世話になります


LogCatの内容をテキストビューに表示したくてお邪魔いたしました
LogCatに文字が流れたらその内容をテキストビューに表示したいです

一度文字型変数に書込みした後その内容を表示できれば嬉しいのですが
どうかお知恵をお貸し下さい

And-Y

unread,
Jan 25, 2012, 12:41:02 AM1/25/12
to 日本Androidの会

訂正

LogCatで表示するの内容をテキストビューに表示したい

『の』が多すぎました

LogCatで表示する内容をテキストビューに表示したい

の間違いです

宮山

unread,
Jan 25, 2012, 1:47:40 AM1/25/12
to 日本Androidの会
宮山です。

ブリリアントサービスさんのブログで似たような内容のアプリとそのソースが公開されています。
http://d.hatena.ne.jp/bs-android/20100519/1274206549

こちらは仕事でLogCatを自分で端末に残す必要があったのでお世話になりました。

それでは。

Andropenguin S

unread,
Jan 25, 2012, 6:55:25 AM1/25/12
to android-g...@googlegroups.com
andropenguinと言います。

私は、Ubuntu Linuxで

adb logcat | tee log.txt

を実行して、アプリが例外で落ちたりしたら、log.txtファイルを
ページャーのlvやlessコマンドで開いて、バグの原因を探ります。
teeコマンドは、標準出力に出力しつつ、ファイルに保存する
コマンドです。
多分Macでも、パイプ | や、teeコマンドがあると思いますが、
Windowsではどうなんでしょうね。Windowsにそういうのが
なければ、ちょっと面倒ですが、Cygwinをインストールするのも
手です。

2012年1月25日14:41 And-Y <yumeo...@yahoo.co.jp>:

> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> このグループから退会するには、android-group-j...@googlegroups.com にメールを送信してください。
> 詳細については、http://groups.google.com/group/android-group-japan?hl=ja からこのグループにアクセスしてください。
>

--
twitter: @andropenguin

Andropenguin S

unread,
Jan 25, 2012, 7:10:57 AM1/25/12
to android-g...@googlegroups.com
andropenguinです。
補足です。

adb logcat | tee log.txt

を実行するのは、ターミナルエミュレータでです。Macにもあります。
Windowsではコマンドプロンプトがありますが、使いにくいので、
Cygwinでターミナルエミュレータを入れた方がいいかもしれないです。


2012年1月25日20:55 Andropenguin S <androp...@gmail.com>:

--
twitter: @andropenguin
HP:

And-Y

unread,
Jan 25, 2012, 7:31:17 AM1/25/12
to 日本Androidの会
宮山様どうもありがとうございます

数日前からNETで検索してたんですがなかなか力不足で
教えて頂いたアドレスでダウンロードできました^^
たしかに画面の表示されてます 目からウロコです

沢山のファイルに別れてて ただいま悪戦苦闘してます
もうハテナだらけ^^、それだけ自分のスキルがないのですね

サブルーチンと言いますか あっち行って戻ってきたまたあっち
みたいな

一つの縦に流れるコードだったら と想いますが贅沢は言えないですね^^

宮山様たすかりました^^

And-Y

unread,
Jan 25, 2012, 7:47:39 AM1/25/12
to 日本Androidの会
andropenguin様 どうもありがとうございます


私のはXPなので Linuxの事がよくわからず申し訳ないです^^

目的はLogCatに流れるDataを変数に入れて
文字の内容から色々なことを判断してプログラムに仕事をさせたいです

なのでとりあえずは変数に入ってそれが確認の意味でテキストビューに
表示されたらと想いました

adb shell

$ input text AAA
$ input text BBB

から流れてくるData(AAAやBBB)をAndroido端末で拾いたい
目的もありますし
Androido端末自信が出すLogを拾ってイベント的な目的にも使いたいです

Androido端末が吐き出すDetaを変数で受け取る方法ご存知でじたら

ご教授よろしくお願いいたします







飯塚康至

unread,
Jan 25, 2012, 8:04:55 AM1/25/12
to android-g...@googlegroups.com
お疲れ様です。飯塚です。
何処かのブログで紹介されていたのでそのURLを紹介しようと思ったのですが、何で検索したかキーワードを忘れてしましました。
下記、参考までに。

private void showLog() {
try {
ArrayList<String> commandLine = new ArrayList<String>();
// コマンドの作成
commandLine.add( "logcat");
commandLine.add( "-d");
Process process = Runtime.getRuntime().exec(
commandLine.toArray( new String[commandLine.size()]));
BufferedReader bufferedReader = new BufferedReader( new
InputStreamReader(process.getInputStream()), 1024);
String line;
while ( (line = bufferedReader.readLine()) != null) {
et.append(line);
et.append("\n");
}
} catch ( IOException e) {
// 例外処理
}
}


パーミッションは下記が必要です。
<uses-permission android:name="android.permission.READ_LOGS" />

2012年1月25日14:36 And-Y <yumeo...@yahoo.co.jp>:
> たびたびお世話になります
>
>
> LogCatの内容をテキストビューに表示したくてお邪魔いたしました
> LogCatに文字が流れたらその内容をテキストビューに表示したいです
>
> 一度文字型変数に書込みした後その内容を表示できれば嬉しいのですが
> どうかお知恵をお貸し下さい


>
> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> このグループから退会するには、android-group-j...@googlegroups.com にメールを送信してください。
> 詳細については、http://groups.google.com/group/android-group-japan?hl=ja からこのグループにアクセスしてください。
>

--
以上、宜しくお願いします。

飯塚 康至

宮山

unread,
Jan 26, 2012, 2:29:28 AM1/26/12
to 日本Androidの会
宮山です。

> 目的はLogCatに流れるDataを変数に入れて> 文字の内容から色々なことを判断してプログラムに仕事をさせたいです

私が作ったプログラムは、LogCatの中から対象のアプリのログと全てのエラーを
フィルタリングして端末にログ情報として残すというものでした。

大雑把に書くと ブリリアントさんのソース LogcatViewerService.javaの65行目辺りの所にちょっと変えて

String filterError =" E/";       //エラーログ
String filterKeyword= m_pid + "):"; //m_pidは監視したいプロセスID

(途中省略)

synchronized (mList) {
if( mList.size() >= LOGCAT_SAVE_MAXLINES ) {
mList.remove(0);
}

if( (line.indexOf(filterKeyword) != -1)
||(line.indexOf(filterError) != -1)){
mList.add(line);
}
}
と言う感じです。参考になるでしょうか?

あと、気をつけるところは、apkからLogCatコマンドを実行した際に最初にバッファリングされたログがまとめて
出力されるので、実行した瞬間はapk実行前の古いログが吐き出されます(下手すると数日前とか)

他にもサービス上からLogCatを監視していても、端末がサスペンドするなどするとサービスがシャットダウン
されることがあるので、自分でLogCatの監視を再起動する必要があるなど色々と注意することがあります。

どの程度の物を要求されているか分かりませんが、実機で色々なパターンでテストされた方が良いかと思います。
以上、よろしくお願い致します。

And-Y

unread,
Jan 26, 2012, 9:44:35 AM1/26/12
to 日本Androidの会
飯塚様 ありがとうございます

VBしか知らないのでコードを教えていただいてすごく助かりました^^
自分なりに教えて頂いたコードを追加してやってみました

テキストビューにドカ~っと文字が表示された時に これだ~!!
と叫びました

嬉しかったぁ~^^

パーミッションコードも掲示して頂いて調べる者としては
パーミッションをどう探して良いのやらそれだけでもひと苦労します

コードも短くてすごく助かりましたサンプルにすごくいいです

後は ボタンを押せばとか この文字がHitしたならとか確認作業を
やって行き、想いを膨らませたいと存知ます

95%解決した感じです 残りの消費税みたいな 5%は

// コマンドの作成 の

commandLine.add( "logcat");
commandLine.add( "-d");

は、考えるに -I とか -E とか在りそうな気がするんですが
この部分はどう理解すれば良いでしょうか?
お手数ですがお願いできれば助かります^^


また私みたいな、かけだしの方がおられて同じ事を知りたい方の為に
コードを残したいと想います


ガラパゴス 005SH V2.3.4

================= Project_176 java  =========================

package an.doro176;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

public class Project_176 extends Activity {

static TextView et; // 結果を表示するテキストビュー名 et


/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
et = (TextView)findViewById(R.id.tv); // TextView mainに従う宣

et.setTextSize(20); // 文字サイズ宣言

showLog();// Call private void showLog()



} // End onCreate --------------------------------------

private void showLog() { // line = LogCat Log取得
try {
ArrayList<String> commandLine = new ArrayList<String>();

// コマンドの作成
commandLine.add( "logcat");
commandLine.add( "-d");

Process process = Runtime.getRuntime().exec(
commandLine.toArray( new String[commandLine.size()]));
BufferedReader bufferedReader = new BufferedReader( new
InputStreamReader(process.getInputStream()), 1024);
String line;

while ( (line = bufferedReader.readLine()) != null) {
et.append(line); // テキストビューに表示してみる
et.append("\n"); //テキストビュー改行
Log.d("ABC",line); // LogD ABC タグにも出力してみる

// ****** ここでLine の内容を素に色々な作業をする *******

}// End While
} catch ( IOException e) {
// 例外処理
}// End catch
}// End showLog()


}// End Activity ------------------------------



=================== main.xml ===========================

<?xml version="1.0" encoding="utf-8"?>

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>


<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>

<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
android:id="@+id/tv"
/>
</LinearLayout>

</ScrollView>


================== Manifest.xml =========================


<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="an.doro176"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="10" />

<application android:icon="@drawable/icon" android:label="@string/
app_name">
<activity android:name=".Project_176"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category
android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

</application>

<!-- パーミッション ここが追加になった -->
<uses-permission android:name="android.permission.READ_LOGS" />


</manifest>




以上です。

And-Y

unread,
Jan 26, 2012, 9:45:47 AM1/26/12
to 日本Androidの会
宮山様 たびたびありがとうございます^^

先日からすごく助かってます^^

ブリリアントサービスさんのブログメモしてダウンロードも保存しました

端末がサスペンドするなどあるんですね
まだ良くわからないですけど、ぱっと見ブリリアントサービス様のは
その点も考慮されてるような気がしました

ぶつかったらまた拝見しようと思います

とりあえず先へ進めそうです^^

実機でいろいろやってみます 助言ほんと助かります





And-Y

unread,
Jan 26, 2012, 10:04:32 AM1/26/12
to 日本Androidの会
追伸

また文字不足になってました^^

パーミッションコードも掲示して頂いて助かりました調べる者としては
パーミッションをどう探して良いのやらそれだけでもひと苦労しますので^^

And-Y

unread,
Jan 26, 2012, 10:44:59 AM1/26/12
to 日本Androidの会
あうっ(・・)

早速 宮山様の助言が出てきたみたい


bufferedReader は初期化できるでしょうか・・・・?

飯塚康至

unread,
Jan 26, 2012, 6:33:23 PM1/26/12
to android-g...@googlegroups.com
お疲れ様です。飯塚です。参考にさせていただいたWiki見つかりました。

http://wikiwiki.jp/android/?Android%A5%A2%A5%D7%A5%EA%A5%B1%A1%BC%A5%B7%A5%E7%A5%F3%A4%AB%A4%E9logcat%A5%B3%A5%DE%A5%F3%A5%C9%A4%F2%BC%C2%B9%D4%A4%B9%A4%EB

http://www.techdoctranslator.com/android/developing/tools/logcat

adb shell コマンドで検索すると他にもいろいろ分かると思います。

2012年1月26日23:44 And-Y <yumeo...@yahoo.co.jp>:

宮山

unread,
Jan 27, 2012, 2:49:21 AM1/27/12
to 日本Androidの会
宮山です。

下記で言っている初期化というのは何を目的にされていることでしょうか?

アプリ起動前の古いログは無視したいということであれば、ログの時間でフィルタリングかけるか、
又は取得対象にするアプリのPIDでフィルタリングするかするなどする必要があるかと思います。

質問の意図が分からないので外していたらすいません。

以上、よろしくお願い致します。

And-Y

unread,
Jan 27, 2012, 7:18:40 AM1/27/12
to 日本Androidの会

飯塚様 こんばんは

教えて頂いたURLから

//ログのクリア
try {
Runtime.getRuntime().exec("logcat -c");
} catch(Exception e) {
// 例外処理
}


からみごとに過去LogDataを消す事が出来ました^^


ほんとに有難う御座います 拍手と言うか感謝です (-||-) 合掌

これで こんな文字を受信したらこんな仕事をさせてみよう とか
どんどん想いが膨らみそうです^^

And-Y

unread,
Jan 27, 2012, 7:19:07 AM1/27/12
to 日本Androidの会
宮山様 こんばんは

昨夜はテンション上がってしまって^^ 失礼いたしました
何度も繰り返してるうちにどんどんDataが増えて行きました

宮山様の
>あと、気をつけるところは、

の通りまさにそうなってるように見えました

初期化と言うのは過去のLogを消して新しく発生したLogDataだけを
取り出したいと思いまいした

はい^^PDIでフィルタリング使えそうですね^^

なかなか未知のものを質問してるので自分でもどう質問していいのか
わからず 質問内容の理解に苦しまれたかと存知ます

大変申し訳ない事です

でもこれに懲りずにAnd-Y のハンドルネーム見かけたらお声かけ下さい^^

これから ここでみなさんに教わった事をどんどん進ませて行きたいと思います


宮山様

andropenguin様

飯塚様

ほんとありがとう御座いました^^








Reply all
Reply to author
Forward
0 new messages