2011-03-28 18 views

cevap

85

:

#include <android/log.h> 


__android_log_write(ANDROID_LOG_ERROR, "Tag", "Error here");//Or ANDROID_LOG_INFO, ... 

böyle makefile bunu ekleyin: Aşağıdaki

LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog 
+2

"-L $ (SYSROOT)/usr/lib "kısmı gerekli değildir, sadece" LOCAL_LDLIBS: = -llog "aynı şekilde çalışacaktır. Bunun için işe yaramazsa (benim gibi)) - Android.mk _after_ "LOCAL_LDLIBS: = -llog" satırında "$ (CLEAR_VARS)" satırı vardı, _before_ taşındı ve şimdi Tamam çalışıyor. – Mixaz

+0

Sadece bu işe yaramazsa, aşağıdaki çözüme bakın. –

+5

veya __android_log_print (ANDROID_LOG_INFO, "Etiket", "i% c,% x print% x", "t", 14, 15); –

6

Eğer yerel kodda içermelidir kod parçacığı olduğunu. Yukarıdaki API'yi kullanmak için, karşılık gelen kütüphaneyi bağlamanız gerekir.

Android'de paylaşılan bir kitaplığı 3 şekilde bağlayabiliriz. 3 durumun altında, belirtilen satırlar Android.mk

'a eklenmelidir. Yani burada üç yol vardır. Nedense

1. LOCAL_LDLIBS way 
LOCAL_LDLIBS := -llog 

1 çalışmıyor (Bende işe yaramadı), aşağıdaki 2 şekilde

2. LOCAL_LDFLAGS way 
LOCAL_LDFLAGS := -llog 

3. LOCAL_SHARED_LIBRARIES way 
LOCAL_SHARED_LIBRARIES += liblog 
1

syslog

Bu POSIX fonksiyonu da LogCat için çıktılar deneyebilirsiniz .

Android olmayan sistemler arasında daha taşınabilir olmanın avantajı, 'dan daha iyidir ve otomatik olarak uygulama paketini günlüğe ekler. bu örnek uygulaması ile test edilmiştir

:

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

Ve logcat şimdi içerir: https://github.com/cirosantilli/android-cheat/tree/a080f5c370c1f06e74a8300fb4a2e93369861047/gradle/NdkSyslog NDK kaynağıdır

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

Android O üzerinde test, HiKey 960.