3

私のコードにはこの行があります(.c):

#define LOGI(x...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG,x)
#define LOGE(x...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG,x)

LogCatでの出力、これらの行を変更してファイルにメッセージを書き込む方法、またはコードでLogCatから特定のメッセージを取得するにはどうすればよいですか?前もって感謝します。

4

4 に答える 4

9

これがデバッグ目的の場合は、次のマクロを使用します。

#define WRITE_LOG(s, ...) do { \
FILE *f = fopen("/data/local/tmp/log.txt", "a+"); \
  fprintf(f, s, __VA_ARGS__); \
  fflush(f); \
  fclose(f); \
} while (0)

Android SDK / NDKから完全に独立しているという利点があります。これにより、すべてのビルドシステムを変更せずにネイティブコードをデバッグでき、logcat関数にリンクするために含まれます。

ただし、小さな警告です。touch /data/local/tmp/log.txtほとんどの場合、システムによって新しいファイルを作成できないため、プログラムを起動する前にadb-shellを使用してファイルを作成する習慣があります。ちなみに、場所/ data / local / tmp /には、root権限がなくてもアクセスできるという利点があります。

于 2013-02-05T16:35:03.330 に答える
0

vfprintf()関数を使用して、可変引数リストをファイルに書き込むことができます。

これは、Javaコードによって生成されたメッセージも含める必要がない限り、Androidログシステムから独自のログメッセージを再キャプチャしてファイルに書き込むよりもおそらくクリーンです。

于 2013-02-05T14:34:07.013 に答える
0

最終目標が特定のlogcat出力を「記録」することだけである場合は、Catlogアプリを電話/デバイスにインストールし(テスト対象の場合)、Catlogが提供する「記録」機能を使用することを強くお勧めします。Catlogを使用すると、タグと検索キーワードに基づいてlogcat出力を表示およびフィルタリングでき、結果の出力をファイルに保存したり、添付ファイルとして電子メールで送信したりできます。SDKに付属のエミュレーターでテストする場合は、EclipseのLogcatウィンドウからの出力を保存するだけです。

于 2013-02-12T02:48:15.263 に答える
0

アプリケーションを使用している場合は、/ data /data//を使用できます

とても乾燥した実験室:

FILE f = fopen("/data/data/<application name>/<file name>", 'w');
fprintf(f, "my message\n");
fclose(f);

動作するはずです。

于 2014-11-13T21:24:47.633 に答える