Logcatにログメッセージを挿入して、JNI Cアプリケーションをデバッグしたいと思います。これを行うC APIとは何ですか?
このような:
#include <Android/log.h>
__Android_log_write(Android_LOG_ERROR, "Tag", "Error here");//Or Android_LOG_INFO, ...
次のようにメイクファイルに追加します。
LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog
以下は、ネイティブコードに含める必要があるコードスニペットです。
#include <Android/log.h>
__Android_log_write(Android_LOG_ERROR, "Tag", "Error msg");//Or Android_LOG_INFO, ...
上記のAPIを使用するには、対応するライブラリをリンクする必要があります。
共有ライブラリをAndroidで3つの方法でリンクできます。以下の3つのケースでは、言及された行をAndroid.mk
そのため、次の3つの方法があります。
#1. LOCAL_LDLIBS way
LOCAL_LDLIBS := -llog
何らかの理由で1が機能しない場合(私にとっては機能しませんでした)、以下の2つの方法を試すことができます
#2. LOCAL_LDFLAGS way
LOCAL_LDFLAGS := -llog
#3. LOCAL_SHARED_LIBRARIES way
LOCAL_SHARED_LIBRARIES += liblog
syslog
このPOSIX関数はlogcatにも出力します。
これには、非Androidシステムよりも__Android_log_write
そして、アプリパッケージをログに自動的に追加します。
このサンプルアプリでテスト済み: https://github.com/cirosantilli/Android-cheat/tree/a080f5c370c1f06e74a8300fb4a2e93369861047/gradle/NdkSyslog NDKソース:
#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");
}
また、logcatには次が含まれます。
01-14 15:39:07.582 3633 3633 E com.cirosantilli.Android_cheat.ndksyslog: hello syslog
テスト済みAndroid O、HiKey 960。