web-dev-qa-db-fra.com

Quelle est l'API de journal à appeler à partir d'un programme Android JNI?

Je voudrais déboguer une application JNI C en insérant des messages de journal dans logcat. Quelle est l'API C qui fait cela?

52
hopia

Comme ça:

#include <Android/log.h>


__Android_log_write(Android_LOG_ERROR, "Tag", "Error here");//Or Android_LOG_INFO, ...  

Ajoutez-le à votre makefile comme ceci:

LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog 
99
Ryan Reeves

Voici l'extrait de code que vous devez inclure dans votre code natif.

#include <Android/log.h>


__Android_log_write(Android_LOG_ERROR, "Tag", "Error msg");//Or Android_LOG_INFO, ...  

Pour utiliser l'API ci-dessus, nous devons lier la bibliothèque correspondante.

Nous pouvons lier une bibliothèque partagée en Android de 3 manières. Dans les 3 cas ci-dessous, les lignes mentionnées doivent être ajoutées dans Android.mk

Voici donc les trois façons.

#1. LOCAL_LDLIBS way
LOCAL_LDLIBS := -llog

Pour une raison quelconque, si 1 ne fonctionne pas (cela n'a pas fonctionné pour moi), vous pouvez essayer ci-dessous 2 façons

#2. LOCAL_LDFLAGS way
LOCAL_LDFLAGS := -llog

#3. LOCAL_SHARED_LIBRARIES way
LOCAL_SHARED_LIBRARIES += liblog
10
mk..

syslog

Cette fonction POSIX sort également vers logcat.

Il a l'avantage d'être plus portable sur les systèmes non Android que __Android_log_write et il ajoute automatiquement le package d'application au journal.

Testé avec cet exemple d'application: https://github.com/cirosantilli/Android-cheat/tree/a080f5c370c1f06e74a8300fb4a2e93369861047/gradle/NdkSyslog la source NDK est:

#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");
}

Et logcat contient désormais:

01-14 15:39:07.582  3633  3633 E com.cirosantilli.Android_cheat.ndksyslog: hello syslog  

Testé sur Android O, HiKey 960.