Android NDK 코드에 간단하게 로그인 할 수 있는 방법이 있습니까?
이클립스를 사용하여 Android NDK 어플리케이션에서 C코드를 쉽게 디버깅할 수 있는 방법을 찾고 있습니다.gdb나 비슷한 것을 사용하여 앱을 디버깅하는 방법을 읽었지만, 내가 원하는 것은 어떻게든 이클립스에 메시지를 보내는 방법입니다.
C에서 인쇄 기능을 사용하여 DDMS 로그 등에서 볼 수 있는 간단한 솔루션을 찾고 있습니다.이거 해본 사람 있어요?
Android 로깅 기능을 사용할 수 있습니다.
#include <android/log.h>
#define APPNAME "MyApp"
__android_log_print(ANDROID_LOG_VERBOSE, APPNAME, "The value of 1 + 1 is %d", 1+1);
Android.mk 파일에 있는 로깅라이브러리에 대한 링크도 확인해 주세요.
LOCAL_LDLIBS := -llog
지금까지 다른 로그 수준에 대한 정보를 게시한 사람은 없습니다. 정답은 로깅 "그림"을 가득 채우는 시도입니다.
#include <android/log.h>
#define TAG "MY_TAG"
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, TAG, __VA_ARGS__)
#define LOGW(...) __android_log_print(ANDROID_LOG_WARN, TAG, __VA_ARGS__)
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO, TAG, __VA_ARGS__)
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, TAG, __VA_ARGS__)
사용방법:
char err[] = "wrong";
LOGE("Something went %s", err);
아래와 같이 Android 로그 라이브러리를 링크하십시오.
Android.mk:
LOCAL_LDLIBS := -llog
CMake Lists(CMake 리스트)txt:
find_library( log-lib log )
target_link_libraries( ${log-lib} )
상세정보: 로깅
가장 쉬운 방법은 아마도 printf() 문을 시스템로그로 리다이렉트하는 것입니다(공식 ADB 레퍼런스 매뉴얼의 "Stdout 및 stderr 표시" 섹션에 근거합니다).
명령줄에 다음 3개의 명령을 입력합니다.
adb shell stop
adb shell setprop log.redirect-stdio true
adb shell start
그런 다음 Eclipse Debugger의 "LogCat" 창을 보거나 명령줄에 다음을 입력하여 "printf()" 문의 출력을 볼 수 있습니다.
adb logcat
데이터는 에뮬레이터 또는 디바이스에서 전송하기 전에 버퍼링되므로 stdout 버퍼를 반드시 플러시해야 합니다.다음은 예를 제시하겠습니다.
printf("Hello, I am %d years old!\n", 30);
fflush(stdout);
그러면 "I/stdout:"으로 시작하는 로그 메시지가 나타납니다.
조금이나마 활용할 수 있습니다.
#include <android/log.h>
#define LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO, "native-lib", __VA_ARGS__))
사용방법:
std::string hello = "Hello from C++";
int a = 1;
LOGI("int %d, string: %s", a, hello.c_str());
대체 솔루션(디버거 사용)은 다음과 같습니다.
Eclipse에서 JNI로 랩된 C 코드를 효과적으로 디버깅하려면 어떻게 해야 합니까?(Android Dev)
ADT 20에는 Eclipse에서 NDK 프로젝트를 빌드 및 디버깅할 수 있는 NDK 플러그인이 포함되어 있습니다.이 문서에서는 NDK 플러그인을 설치하고 사용하는 방법에 대해 설명합니다.설명은 매우 간단하며 몇 가지 단계로 구성됩니다.
이것이 내가 찾은 가장 간단한 해결책이고 나에게도 효과가 있었다.
주의: ADT 번들을 사용하는 경우 C 개발 도구와 함께 새로운 소프트웨어를 설치하면 됩니다(스크린샷 참조). 즉시 "NDK 플러그인 사용" 부분으로 이동할 수 있습니다.
편집: 이클립스 juno http://code.google.com/p/android/issues/detail?id=33788의 CDT에 문제가 있어 이클립스 디버거가 중단점을 찾을 수 없는 것 같습니다.회피책으로는 디버깅모드(네이티브앱으로 디버깅하는 것이 아니라 '일반' 디버깅)에서 앱을 시작하고 명령줄에서 프로젝트 루트로 이동하여 입력했습니다.ndk-gdb
에 의해 작성됩니다).gdb.setup
obj/local/armeabi
후, 는 정상적으로했습니다.그 후 브레이크포인트는 정상적으로 동작했습니다.
위 링크의 문제에 관한 코멘트에서는 다른 회피책을 제안하고 있습니다만, 이것보다 더 많은 노력이 필요한 것 같아서 시도하지 않았습니다.
어려운 분들을 위해
LOCAL_LDLIBS := -llog
동작하지 않습니다.각각 뒤에 추가합니다.
include $(CLEAR_VARS)
왜 그랬는지는 모르겠지만, 나한테는 효과가 있었어.
건배!
언급URL : https://stackoverflow.com/questions/4629308/any-simple-way-to-log-in-android-ndk-code
'sourcecode' 카테고리의 다른 글
새로운 요소를 추가하기 위해 Enum을 하위 분류할 수 있습니까? (0) | 2022.07.30 |
---|---|
Axios GET이 Safari 브라우저에서 작동하지 않음 (0) | 2022.07.30 |
nuxtserverinit 및 사용자 로그인 (0) | 2022.07.30 |
선택한 Vue.js 옵션이 값을 기반으로 하지 않음 (0) | 2022.07.30 |
Java에 goto 스테이트먼트가 있나요? (0) | 2022.07.30 |