2016-07-26 28 views
0

たとえば、dalvik/vm/native/dalvik_system_DexFile.cppにALOGI(「ログがあります」)という機能があり、このログをlogcatまたはDDMSで表示したいとします。Android C++ファイルでALOGI(...)をどのように印刷しますか?

どうすればいいですか?具体的にしてください。ありがとう。

+0

は、あなた自身のAndroid ROMを構築していますか?そうでなければ、Dalvikが記録するものを変更できるかどうかはわかりません。独自のROMを構築している場合は、該当するAndroid.mkファイル内の関連モジュールのCFLAGSを修正してみてください。たとえば、 '-UNDEBUG -DDEBUG = 1 -DLOG_NDEBUG = 1'を追加します。 – Michael

答えて

1

ログを印刷する最もよい方法は、このタスクにクロスプラットフォームのクロスプラットフォームを作成することです。例では、次のようlogger.hで:あなたのソースで

#pragma once 

#define TMB_DEBUG_LOGS 1 

#ifdef TMB_DEBUG_LOGS 
// YES LOGS 
# ifdef ANDROID 
    // LOGS ANDROID 
#  include <android/log.h> 
#  define LOGV(...) __android_log_print(ANDROID_LOG_VERBOSE, LOG_TAG,__VA_ARGS__) 
#  define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG , LOG_TAG,__VA_ARGS__) 
#  define LOGI(...) __android_log_print(ANDROID_LOG_INFO , LOG_TAG,__VA_ARGS__) 
#  define LOGW(...) __android_log_print(ANDROID_LOG_WARN , LOG_TAG,__VA_ARGS__) 
#  define LOGE(...) __android_log_print(ANDROID_LOG_ERROR , LOG_TAG,__VA_ARGS__) 
# else 
    // LOGS NO ANDROID (fprintf) 
     #include <stdio.h> 
     #include <time.h> 

     //Warning, multithreading problem in logs with this solution! 
     static char buff[100]; 
     static struct tm *sTm; 
     static time_t now; 
#  define PRINT_TIME {now = time(0); sTm = localtime(&now); strftime(buff, sizeof(buff), "[%Y-%m-%d %H:%M:%M]", sTm); fprintf(stderr, "%s ", buff); } 
#  define LOGV(...) {PRINT_TIME fprintf(stderr, "[V][%s] ", LOG_TAG); fprintf(stderr, __VA_ARGS__); fprintf(stderr, "\n");} 
#  define LOGD(...) {PRINT_TIME fprintf(stderr, "[D][%s] ", LOG_TAG); fprintf(stderr, __VA_ARGS__); fprintf(stderr, "\n");} 
#  define LOGI(...) {PRINT_TIME fprintf(stderr, "[I][%s] ", LOG_TAG); fprintf(stderr, __VA_ARGS__); fprintf(stderr, "\n");} 
#  define LOGW(...) {PRINT_TIME fprintf(stderr, "[W][%s] ", LOG_TAG); fprintf(stderr, __VA_ARGS__); fprintf(stderr, "\n");} 
#  define LOGE(...) {PRINT_TIME fprintf(stderr, "[E][%s] ", LOG_TAG); fprintf(stderr, __VA_ARGS__); fprintf(stderr, "\n");} 
# endif // ANDROID 
#else 
// NO LOGS 
# define LOGV(...) 
# define LOGD(...) 
# define LOGI(...) 
# define LOGW(...) 
# define LOGE(...) 
#endif // TMB_DEBUG_LOGS 

、一例では、main.cの

//... your includes 
#define LOG_TAG "MainProgram" 
#include "logger.h" 

main() 
{ 
    // My code 
    LOGI("The program is creating a info log"); 
    LOGD("My foo: %d", foo_variable); 
} 
関連する問題