Android日志打印CString

时间:2014-06-12 15:51:59

标签: android c++ android-ndk java-native-interface

如何从jni打印CString?
Usualy我用这段代码打印简单的字符串:

#include <jni.h>
#include <android/log.h>
//...
__android_log_print( ANDROID_LOG_DEBUG, "msgTitle", "msg");

但CString格式怎么样?
错误日志:

cannot convert 'CString {aka CMSStringT<wchar_t>}' to 'char const*' for argument '3' to 'int __android_log_print(int, char const*, char const*, ...)'

我已经尝试过不同的演员,但它仍然不起作用。

1 个答案:

答案 0 :(得分:3)

尝试创建跨平台日志标题,如:

Logs.h

#       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__)
#           define LOGSIMPLE(...)
#       else
            // LOGS NO ANDROID
#           include <stdio.h>
#           define LOGV(...) printf("  ");printf(__VA_ARGS__); printf("\t -  <%s> \n", LOG_TAG);
#           define LOGD(...) printf("  ");printf(__VA_ARGS__); printf("\t -  <%s> \n", LOG_TAG);
#           define LOGI(...) printf("  ");printf(__VA_ARGS__); printf("\t -  <%s> \n", LOG_TAG);
#           define LOGW(...) printf("  * Warning: "); printf(__VA_ARGS__); printf("\t -  <%s> \n", LOG_TAG);
#           define LOGE(...) printf("  *** Error:  ");printf(__VA_ARGS__); printf("\t -  <%s> \n", LOG_TAG);
#           define LOGSIMPLE(...) printf(" ");printf(__VA_ARGS__);
#       endif // ANDROID

并在JNI代码中添加如下内容:

的main.c

#define LOG_TAG "JNIFILE"

main()
{
    LOGD("Test message");
}

适合我。