programing

Android JNI 프로그램에서 호출하는 Log API란 무엇입니까?

prostudy 2022. 6. 1. 17:37
반응형

Android JNI 프로그램에서 호출하는 Log API란 무엇입니까?

로그 메시지를 logcat에 삽입하여 JNI C 응용 프로그램을 디버깅합니다.이 기능을 하는 C API는 무엇입니까?

다음과 같이 합니다.

#include <android/log.h>


__android_log_write(ANDROID_LOG_ERROR, "Tag", "Error here");//Or ANDROID_LOG_INFO, ...  

다음과 같이 make 파일에 추가합니다.

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 공유 라이브러리는 3가지 방법으로 링크할 수 있습니다.다음 3가지 경우, 언급된 행은 에 추가해야 합니다.Android.mk

여기 세 가지 방법이 있습니다.

#1. LOCAL_LDLIBS way
LOCAL_LDLIBS := -llog

어떤 이유로 1이 작동하지 않는 경우(나에게는 작동하지 않는 경우) 아래 두 가지 방법을 시도해 볼 수 있습니다.

#2. LOCAL_LDFLAGS way
LOCAL_LDFLAGS := -llog

#3. LOCAL_SHARED_LIBRARIES way
LOCAL_SHARED_LIBRARIES += liblog

syslog

이 POSIX 함수는 logcat에도 출력합니다.

비안드로이드 시스템 상에서 보다 휴대성이 뛰어나다는 장점이 있습니다.__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");
}

logcat에는 다음이 포함됩니다.

01-14 15:39:07.582  3633  3633 E com.cirosantilli.android_cheat.ndksyslog: hello syslog  

Android O, HiKey 960에서 테스트 완료.

언급URL : https://stackoverflow.com/questions/5465941/what-is-the-log-api-to-call-from-an-android-jni-program

반응형