- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试将此日志记录语句移植到工作中,因此它将在 linux 和 android 上运行我的#define'ing:
__android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__)
我已经交叉编译我的应用程序以在 Linux 和 Android 上运行。但是,由于 linux 没有我自己尝试做的等价物。
/** ANDROID */
#if defined(__ANDROID__)
#include <android/log.h>
#define LOG_ERROR ANDROID_LOG_ERROR
#define LOG(PRIORITY, fmt, ...) __android_log_print(ANDROID_LOG_UNKNOWN, LOG_TAG, fmt, ##__VA_ARGS__)
/** LINUX */
#elif defined(linux) || defined(__linux) || defined(__linux__)
#define LOG_ERROR LINUX_LOG_ERROR
#define LOG(PRIORITY, fmt, ...) printf(PRIORITY fmt, ##__VA_ARGS__)
#endif
然后在linux下运行时这样使用
LOG(LOG_ERROR, "Testing loggging [ %d ]", test);
有更好的方法吗?
非常感谢您的任何建议,
最佳答案
我设法通过这种方式解决了它。这是完整的解决方案。这将在头文件中
typedef enum levels_tag levels_e;
enum levels_tag {
LOG_UNKNOWN = 0,
LOG_DEFAULT,
LOG_VERBOSE,
LOG_DEBUG,
LOG_INFO,
LOG_WARN,
LOG_ERROR,
LOG_FATAL,
LOG_SILENT,
LOG_LAST
};
/* ANDRIOD IMPLEMENTATION */
#if defined( __ARM_EABI__)
#include <android/log.h>
levels_e levels[LOG_LAST] = {LOG_UNKNOWN,
LOG_DEFAULT,
LOG_VERBOSE,
LOG_DEBUG,
LOG_INFO,
LOG_WARN,
LOG_ERROR,
LOG_FATAL,
LOG_SILENT};
#define LOG_TAG "MODULE_LOG_SIP"
#define LOGGING(PRIORITY, fmt, ...) __android_log_print(levels[PRIORITY], LOG_TAG, fmt, ##__VA_ARGS__)
/* LINUX IMPLEMENTATION */
#elif defined(linux) || defined(__linux) || defined(__linux__)
char *priority_levels[] = {"UNKNOWN",
"DEFAULT",
"VERBOSE",
"DEBUG",
"INFO",
"WARN",
"ERROR",
"FATAL",
"SILENT",
NULL };
#define LOGGING(PRIORITY, fmt, ...) \
do { \
char *priority = priority_levels[PRIORITY]; \
printf("%s/%s:%d [%s] " fmt " \n", __FILE__, __func__, __LINE__, priority, ##__VA_ARGS__); \
} while(0)
#endif
#define LOG(PRIORITY, fmt, ...) LOGGING(PRIORITY, fmt, ##__VA_ARGS__)
在您的源文件中,您只需像这样调用 LOG 宏:
LOG(LOG_FATAL, "Failed to create and initialize application instance [ %d ]", errno);
现在,如果您要在 Linux 上编译,它将使用 printf 语句。如果您要在 Android 上编译,它将使用 __android_log_print 语句。两者都会产生相同格式的输出。
希望这对其他人有帮助。
关于android - __android_log_print 相当于 printf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19703272/
打印到 stderr 的原始代码: extern "C" { /* error: output error message */ void Error(const int error, char *m
我使用这个库:https://github.com/mysolution/hyphenator在 JNI 中,我创建了这个函数: int main2() { //load russian hyphe
我正在尝试将此日志记录语句移植到工作中,因此它将在 linux 和 android 上运行我的#define'ing: __android_log_print(ANDROID_LOG_ERROR, L
我的 make 文件有什么问题? Android.mk LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := fo
我有一个类似的功能 __android_log_print(ANDROID_LOG_INFO, "HelloNDK!"); 在我的 C 代码上 我不会在我的 LogCat 上找到那个输出。我需要设置什
有一些像这样的问题,但提供的解决方案都没有解决问题。构建包含两个模块的应用程序时,Build 会输出标题中的错误。其中一个模块具有 native 代码文件。 我检查了很多线程,所有线程都建议包含 -l
此问题存在,但无法解决我的问题。我得到了对 __android_log_print 的 undefined reference ,但我有包含 header #include 我的 Android.m
这是.cpp文件,代码是 JNIEXPORT jint JNICALL Java_com_example_compute_MainActivity_AddNumbers(JNIEnv *env, jo
当在 native 代码中使用 __android_log_print() 时,它会打印并在文本末尾添加一个 /n。 我正在尝试获得与 printf 相同的行为,当未使用 /n 时,它会在同一行上打印
我有兴趣通过 NDK 应用演示 printf 漏洞。明确地说,我知道要登录控制台,我们可以使用 __android_log_print(ANDROID_LOG_DEBUG, "LOG_TAG", "P
我有以下代码,我想用它来将 trainingLables Mat 的内容打印到 android 控制台: #include JNIEXPORT jintArray JNICALL Java_com
我有一个 Android NDK 项目,其 NDK 部分从命令行编译正常;我以前在 Eclipse 下将编译好的东西作为纯 Java 项目运行没有问题。但是我将它转换为 C/C++ 项目,现在甚至无法
我是一名优秀的程序员,十分优秀!