반응형
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
반응형
'programing' 카테고리의 다른 글
Vue 컴포넌트 외부에 있는 VueRouter에 액세스합니다. (0) | 2022.06.02 |
---|---|
Firebase Vuex에서 항목 제거 (0) | 2022.06.02 |
Swift, Objective-C, C, C++ 파일을 같은 Xcode 프로젝트에 넣을 수 있습니까? (0) | 2022.06.01 |
요소에 ID가 없을 때 vuej에서 v-for를 처리하는 방법 (0) | 2022.06.01 |
C/C++ 포함 헤더 파일 순서 (0) | 2022.06.01 |