Подтвердить что ты не робот

Любой простой способ войти в код Android NDK?

Я ищу способ легко отладить код C в приложении Android NDK с помощью Eclipse. Я читал способы отладки приложения с помощью gdb или чего-то подобного, но то, что я хочу, это способ как-то выталкивать сообщения в Eclipse.

Я ищу решение, которое так же просто, как использование функции печати в C и просмотр ее в журнале DDMS или что-то подобное. Кто-нибудь имеет опыт в этом?

4b9b3361

Ответ 1

Вы можете использовать средства ведения журнала 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

Ответ 2

Самый простой способ - это, вероятно, перенаправление операторов printf() в системный журнал (в разделе "Просмотр stdout и stderr" в официальном справочном руководстве ADB.

Введите эти 3 команды в командной строке:

adb shell stop
adb shell setprop log.redirect-stdio true
adb shell start

Затем вы можете просмотреть вывод своих операторов printf(), просмотрев окно "LogCat" отладчика Eclipse или введя его в командной строке:

adb logcat

Просто имейте в виду, что, поскольку данные буферизуются перед передачей из эмулятора или устройства, вы должны обязательно сбросить буфер stdout, например:

printf("Hello, I am %d years old!\n", 30);
fflush(stdout);

Затем вы должны увидеть сообщение журнала, начинающееся с "I/stdout:"

Ответ 4

ADT 20 включает плагин NDK, который обеспечивает поддержку для создания и отладки проектов NDK в Eclipse. В этом документе описывается, как установить и использовать плагин NDK. Инструкции довольно просты и состоят всего из нескольких шагов.

Это самое простое решение, которое я нашел, и это сработало для меня.

Примечание. Если вы используете пакет ADT, вам нужно только установить инструменты разработки C с установкой нового программного обеспечения (см. скриншот), и вы можете сразу перейти к разделу "Использование плагина NDK".

c dev tools install

Изменить: Кажется, что проблема с CDT в eclipse juno http://code.google.com/p/android/issues/detail?id=33788 заставляет отладчик eclipse не можете найти точки останова. Обходной путь, который я использовал, заключается в том, чтобы запустить приложение в режиме отладки (не отлаживать как собственное приложение, а "регулярное" отладка), а затем в командной строке я пошел в свой проект и набрал ndk-gdb (это создает файл gdb.setup в папке obj/local/armeabi). После этого контрольные точки работали как обычно.

В комментариях, связанных с вопросом о ссылке выше, они предлагают некоторые другие обходные пути, но я не пробовал их, поскольку они, казалось, требовали больше усилий, чем это.

Ответ 5

Никто не опубликовал информацию о различных уровнях журнала до сих пор. Ответ - попытка сделать "картинку" логирования полной.

#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

CMakeLists.txt:

find_library( log-lib log )
target_link_libraries( ${log-lib} )

Дальнейшее чтение: регистрация

Ответ 6

Вы также можете немного утилизировать

#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());