什么是从Android的JNI程序调用的日志API?
我想通过向logcat插入日志消息来debugging一个JNI C应用程序。 什么是C API来做到这一点?
喜欢这个:
#include <android/log.h> __android_log_write(ANDROID_LOG_ERROR, "Tag", "Error here");//Or ANDROID_LOG_INFO, ... 把它添加到你的makefile中就像这样:
 LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog 
以下是您应该包含在您的本机代码中的代码片段。
 #include <android/log.h> __android_log_write(ANDROID_LOG_ERROR, "Tag", "Error msg");//Or ANDROID_LOG_INFO, ... 
为了使用上面的API,我们需要链接相应的库。
 我们可以通过三种方式链接Android中的共享库。 在以下三种情况下,应该在Android.mk添加提到的行 
所以这里有三种方法。
 1. LOCAL_LDLIBS way LOCAL_LDLIBS := -llog 
由于某种原因,如果1不工作(它不适用于我),您可以尝试以下2种方式
 2. LOCAL_LDFLAGS way LOCAL_LDFLAGS := -llog 3. LOCAL_SHARED_LIBRARIES way LOCAL_SHARED_LIBRARIES += liblog 
 syslog 
这个POSIX函数也输出到logcat。
 它具有在非Android系统上比__android_log_write更具可移植性的优点,它会自动将应用程序包添加到日志中。 
testing这个例子的应用程序: https : //github.com/cirosantilli/android-cheat/tree/a080f5c370c1f06e74a8300fb4a2e93369861047/gradle/NdkSyslog NDK的来源是:
 #include <jni.h> #include <string> #include <syslog.h> extern "C" JNIEXPORT jstring JNICALL Java_com_cirosantilli_android_1cheat_ndksyslog_MainActivity_stringFromJNI( JNIEnv* env, jobject /* this */) { syslog(LOG_CRIT, "hello syslog"); return env->NewStringUTF("Check adb logcat"); } 
而logcat现在包含:
 01-14 15:39:07.582 3633 3633 E com.cirosantilli.android_cheat.ndksyslog: hello syslog 
在Android O HiKey 960上testing