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

Как получить сообщения "printf", написанные в приложении NDK?

если я определяю такую ​​функцию в файле java

  /** 
   * Adds two integers, returning their sum
   */
  public native int add( int v1, int v2 );

поэтому мне нужно закодировать в c файле

JNIEXPORT jint JNICALL Java_com_marakana_NativeLib_add
  (JNIEnv * env, jobject obj, jint value1, jint value2) {

  printf("\n this is log messge \n");

        return (value1 + value2);
}

затем откуда этот printf напечатает это сообщение? В logcate я не понимаю?

Как я могу отладить любое приложение NDK, поместив сообщения журнала?

4b9b3361

Ответ 1

используйте __android_log_print(). Вы должны включить заголовок <android/log.h>

Пример примера. __android_log_print(ANDROID_LOG_DEBUG, "LOG_TAG", "\n this is log messge \n");

Вы также можете использовать спецификатор формата, например printf -

__android_log_print(ANDROID_LOG_DEBUG, "LOG_TAG", "Need to print : %d %s",int_var, str_var);

Убедитесь, что вы также связываетесь с библиотекой протоколирования в вашем файле Android.mk:

  LOCAL_LDLIBS := -llog

Ох.. забыл.. Выход будет показан в Logcat с тегом LOG_TAG

Легкий подход

Добавьте в общий заголовочный файл следующие строки.

#include <android/log.h>

#define  LOG_TAG    "your-log-tag"

#define  LOGD(...)  __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)
#define  LOGE(...)  __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__)
// If you want you can add other log definition for info, warning etc

Теперь просто вызовите LOGD("Hello world") or LOGE("Number = %d", any_int) как printf in c.

Не забудьте включить общий заголовочный файл.

Удалить журнал

Если вы определите LOGD(...) empty, все журналы исчезнут. Просто комментарий после LOGD(...).

#define LOGD(...) // __android_log..... rest of the code

Ответ 2

Существует два варианта:

1) замените printf на __android_log_print. Вы можете сделать это легко с определением в начале кода:

#define printf(...) __android_log_print(ANDROID_LOG_DEBUG, "TAG", __VA_ARGS__);

Конечно, это потребует изменения всего исходного кода, который имеет printf.

2) перенаправить stdout и stderr на Android-logcat (не уверен, что это будет работать на ненагруженном устройстве): http://developer.android.com/guide/developing/debugging/debugging-log.html#viewingStd p >