Cómo utilizar logCat en la programación JNI
En el código Java de programación de Android, sabemos que podemos usar Log.v y otras herramientas para generar registros en logcat, y luego podemos ver la información de salida del registro. Por supuesto, también puedes usar ADB en el shell si el NDK lo admite. En el pasado, en la programación JNI, era difícil depurar los métodos de interfaz local y el registro se usaba a menudo para generar registros en archivos. Hoy, el archivo de encabezado proporcionado por el NDK de Android se encontró en el directorio
/build/platforms/android-8/arch-arm/usr/include/android/log.h
Ábrelo y echa un vistazo
[CPP]Considerando copia simple
/ *
*Copyright (C) 2009 Android Open Source Project
.*
* Licenciado bajo la Licencia Apache, Versión 2.0 (la "Licencia");
* No puede utilizar este archivo excepto de conformidad con la Licencia.
*Puede obtener una copia de la licencia en
*
* http://www.apache.org/licenses/LICENSE-2.0 p >
*
*A menos que lo exija la ley aplicable o se acuerde por escrito, el software
* publicado bajo una licencia se distribuye "TAL CUAL", p>
*SIN GARANTÍAS NI CONDICIONES DE NINGÚN TIPO, EXPRESAS O IMPLÍCITAS.
*Consulte los derechos administrativos específicos del idioma de la licencia y
*las limitaciones de la licencia.
* /
#ifndef_ANDROID_LOG_H
#define_ANDROID_LOG_H
/ ********** ***** **********************
*Nota importante:
*
*Este archivo es parte de un conjunto estable de encabezados del sistema para Android
*Expone el NDK (Kit de desarrollo nativo) de Android porque
*Versión de plataforma 1.5
*
* Dependencias de código binario y fuente de terceros definidas
*Aquí están congeladas en todas las PRÓXIMAS versiones de la plataforma.
*
* - No modifique ENUMS (a menos que agregue nuevos valores de 32 bits)
* - No modifique constantes ni macros de funciones
* - No cambiar la firma de la función de NINGUNA MANERA
* - No cambiar el diseño y tamaño de la estructura
* /
/ *
* Las rutinas de soporte envían mensajes al búfer de registro del kernel de Android,
* al que se puede acceder más tarde a través de la utilidad "logcat".
*
*Cada mensaje de registro debe tener
* - prioridad
* - etiqueta de registro
* - Algunas marcas de texto
*
* suelen corresponder al componente que emite dicho mensaje de registro,
* y deben ser bastante pequeñas.
*
* El texto del mensaje de registro se puede truncar a menos de un límite de implementación específico
* (como 1023 caracteres).
*
* Tenga en cuenta que se agregará automáticamente un carácter de nueva línea ("/N") a su
* mensaje de registro si aún no está presente. . No es posible enviar varios mensajes
* y que aparezcan en una línea en logcat.
*
*No se exceda con el registro:
*
* - El envío de mensajes de registro consume la CPU y lo ralentiza. desactivar sus aplicaciones y
* sistemas.
*
*: el búfer de registro circular es muy pequeño (<64 KB), enviar grandes cantidades de correo
* puede iniciar el resto del proceso. el sistema, etc. Mensajes de registro importantes.
*
*: en las versiones de lanzamiento, solo se envían mensajes de registro para explicar las condiciones de excepción
*.
*
*Nota: Estas funciones deben ser implementadas por /system/lib/liblog.so
* /
#include
#ifdef __cplusplus
"C" externa {
#ENDIF
/ *
* Valores de prioridad de registro de Android, en orden ascendente de prioridad.
* /
typedef enum android_LogPriority {
ANDROID_LOG_UNKNOWN = 0,
ANDROID_LOG_DEFAULT, /* solo para SetMinPriority()* /
ANDROID_LOG_VERBOSE,
ANDROID_LOG_DEBUG,
ANDROID_LOG_INFO,
ANDROID_LOG_WARN,
ANDROID_LOG_ERROR,
ANDROID_LOG_FATAL,
ANDROID_LOG_SILENT, /* solo para SetMinPriority(); debe ser el último*/
} android_LogPriority;
/*
*Enviar un registro de cadena simple.
* /
INT __android_log_write(INT PRIO, const char * etiqueta, const char * texto
/ *
*); Envíe una cadena formateada al registro, usando, por ejemplo, printf(FMT, ...)
* /
INT __android_log_print(INT PRIO, para la etiqueta const char *, para const char * fmt,...)
#if define(__GNUC__)
__attribute__((formato(printf, 3, 4)))
#ENDIF p>
/ *
* __android_log_print (una variante), requiere una lista de va_list
* Parámetros adicionales.
* /
INT __android_log_vprint (INT PRIO, const char * etiqueta,
const char * FMT, AP de va_list);
/ *
* La aserción de inicio de sesión falla y existe la posibilidad durante SIGTRAP
* Compruébelo si hay un depurador adjunto. Utiliza prioridad fatal.
* /
__android_log_assert no válido (const char * COND, const char * etiqueta,
const char * FMT, ...)
#if define(__GNUC__)
__attribute__((no devuelto))
__attribute__((formato(printf, 3, 4)))
# ENDIF
#ifdef __cplusplus
}
#ENDIF
#ENDIF / * * _ANDROID_LOG_H /
Por favor Lea atentamente este archivo de encabezado y descubriremos que Android NDK es totalmente compatible con la depuración del método local JNI. Proporciona 4 funciones para que las usemos, de la siguiente manera
[CPP] Dada una copia simple
/ *
* envía un registro de cadena simple.
* /
INT __android_log_write(INT PRIO, const char * etiqueta, const char * texto
/ *
*); Envíe una cadena formateada al registro, usando, por ejemplo, printf(FMT, ...)
* /
INT __android_log_print(INT PRIO, para la etiqueta const char *, para const char * FMT,...)
/ *
* __android_log_print (una variante), requiere una lista de va_list
* Parámetro adicional.
* /
INT __android_log_vprint (INT PRIO, const char * etiqueta,
const char * FMT, AP de va_list);
/ *
* La aserción de inicio de sesión falla y existe la posibilidad durante SIGTRAP
* Verifíquelo si hay un depurador adjunto. Utiliza prioridad fatal.
* /
__android_log_assert no válido (const char * COND, const char * etiqueta,
const char * FMT, ...)
Podemos enviar información de depuración del método local a logcat. (¿No es genial? No tienes que preocuparte tanto por depurar métodos locales en el futuro ^_^)
Para usar estas funciones, debes agregar las siguientes declaraciones de inclusión al archivo local
#incluir