J'ai configuré la journalisation avec C++ dans Android NDK.
Je peux imprimer un message pour logcat comme ceci:
__Android_log_write(Android_LOG_INFO, "tag here", "message here");
Supposons maintenant que j'ai un entier appelé testint. Comment imprimer la valeur de cet entier?
Quelque chose comme ça imprime l'adresse, mais je veux la valeur. Je n'ai rien trouvé dans C++ sur la façon de procéder. Merci pour toute aide!
__Android_log_print(Android_LOG_INFO, "sometag", "%p", *test);
Vous pouvez utiliser __Android_log_print
qui utilise une syntaxe semblable à sprintf
qui formate vos données en une chaîne.
__Android_log_print(Android_LOG_INFO, "sometag", "test int = %d", testInt);
Voici la manière la plus concise que j'ai vue:
#include <Android/log.h>
#define LOG_TAG "someTag"
#define LOGE(...) __Android_log_print(Android_LOG_ERROR,LOG_TAG,__VA_ARGS__)
#define LOGW(...) __Android_log_print(Android_LOG_WARN,LOG_TAG,__VA_ARGS__)
#define LOGD(...) __Android_log_print(Android_LOG_DEBUG,LOG_TAG,__VA_ARGS__)
#define LOGI(...) __Android_log_print(Android_LOG_INFO,LOG_TAG,__VA_ARGS__)
...
// Now you can log very simply like this:
int foo = 42;
LOGD( "This is a number from JNI: %d", foo );
Assurez-vous également de créer un lien vers la bibliothèque de journaux dans votre Android.mk:
LOCAL_LDLIBS := -llog
Profitez de la fonction d'impression de journaux variadic dont vous disposez. Pour mon propre code, je fournis une fonction LogInfo () pour le rendre simple. Bien sûr, plusieurs options s'offrent à vous ici.
void LogInfo(const char *sTag, const char *fmt, ...)
{
va_list ap;
va_start(ap, fmt);
__Android_log_vprint(Android_LOG_INFO, sTag, fmt, ap);
va_end(ap);
}
__Android_log_print () prend une chaîne de format et une liste d'arguments variables. Le spécificateur de format que vous recherchez pour imprimer un entier signé est "% d". Donc, quelque chose comme ça est ce que vous voulez:
int foo = 42;
__Android_log_print(Android_LOG_INFO, "SomeTag", "foo is %d", foo);
Pour plus d'informations sur les chaînes de format, vous pouvez voir le sprintf manual .