hop*_*pia 53 c android android-ndk android-emulator
我想通过向logcat插入日志消息来调试JNI C应用程序.执行此操作的C API是什么?
Rya*_*ves 99
像这样:
#include <android/log.h>
__android_log_write(ANDROID_LOG_ERROR, "Tag", "Error here");//Or ANDROID_LOG_INFO, ...
Run Code Online (Sandbox Code Playgroud)
将它添加到您的makefile中,如下所示:
LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog
Run Code Online (Sandbox Code Playgroud)
mk.*_*k.. 10
以下是您应包含在本机代码中的代码段.
#include <android/log.h>
__android_log_write(ANDROID_LOG_ERROR, "Tag", "Error msg");//Or ANDROID_LOG_INFO, ...
Run Code Online (Sandbox Code Playgroud)
为了使用上面的API,我们需要链接相应的库.
我们可以通过3种方式链接Android中的共享库.在以下3个案例中,应加入所述行Android.mk
所以这有三种方式.
#1. LOCAL_LDLIBS way
LOCAL_LDLIBS := -llog
Run Code Online (Sandbox Code Playgroud)
出于某种原因,如果1不起作用(它对我不起作用),你可以尝试以下两种方式
#2. LOCAL_LDFLAGS way
LOCAL_LDFLAGS := -llog
#3. LOCAL_SHARED_LIBRARIES way
LOCAL_SHARED_LIBRARIES += liblog
Run Code Online (Sandbox Code Playgroud)
syslog
该POSIX函数也输出到logcat。
与非Android系统相比__android_log_write,它具有更大的可移植性,并且可以自动将应用程序包添加到日志中。
使用以下示例应用程序进行了测试: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");
}
Run Code Online (Sandbox Code Playgroud)
logcat现在包含:
01-14 15:39:07.582 3633 3633 E com.cirosantilli.android_cheat.ndksyslog: hello syslog
Run Code Online (Sandbox Code Playgroud)
已在Android O HiKey 960上测试。