What is in android.util.Log#println_native()?

江枫思渺然 提交于 2020-01-01 19:33:15

问题


Here is the android.util.Log source code.

At the very bottom (line 340), what is in the method:

public static native int println_native(int bufID,
        int priority, String tag, String msg);

i guess println_native() is more or less like its println(), just with an int bufID different.

But even i got the codes of println_native(), i still lack com.android.internal.os.RuntimeInit (line 19, the import) to simulate android.util.Log in old Android version.


回答1:


Just did some digging in the android source code. This function maps to

static jint android_util_Log_println_native(JNIEnv* env, jobject clazz,
    jint bufID, jint priority, jstring tagObj, jstring msgObj)
{
const char* tag = NULL;
const char* msg = NULL;

if (msgObj == NULL) {
    jniThrowNullPointerException(env, "println needs a message");
    return -1;
}

if (bufID < 0 || bufID >= LOG_ID_MAX) {
    jniThrowNullPointerException(env, "bad bufID");
    return -1;
}

if (tagObj != NULL)
    tag = env->GetStringUTFChars(tagObj, NULL);
msg = env->GetStringUTFChars(msgObj, NULL);

int res = __android_log_buf_write(bufID, (android_LogPriority)priority, tag, msg);

if (tag != NULL)
    env->ReleaseStringUTFChars(tagObj, tag);
env->ReleaseStringUTFChars(msgObj, msg);

return res;
}

Basically this then passes the arguments to the driver in the system which goes and writes to the Log buffer. Log buffer is pointed by /dev/log in the Linux kernel.




回答2:


Once you have downloaded the sdk, you can use find to dig files. Java code is linked to cpp code through jni.

In your case, you can use this command to find the related files:

find framework -type f -name "*.cpp" -exec grep "println_native" {} \; -ls

then you'll see that your java function is linked to this file : framework/base/core/jni/android_util_Log.cpp



来源:https://stackoverflow.com/questions/16548172/what-is-in-android-util-logprintln-native

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!