-->

什么是android.util.Log#println_native()?(What is in a

2019-09-03 03:48发布

这里是android.util.Log源代码。

在最底层(线340),什么是方法:

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

我想println_native()是或多或少像其println()只是用int bufID不同。

但是,即使我得到的代码println_native()我仍然缺乏com.android.internal.os.RuntimeInit (第19行中, import )来模拟android.util.Log旧Android版本。

Answer 1:

只是没有在Android源代码一些挖掘。 此功能映射到

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;
}

基本上,这随后将参数传递给驱动程序,其中去,并写入到日志缓冲区中的系统。 日志缓冲区被指出/dev/log在Linux内核中。



Answer 2:

一旦你已经下载了SDK,您可以使用find挖文件。 Java代码通过JNI链接到CPP代码。

你的情况,你可以使用这个命令来查找相关的文件:

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

然后你会看到您的Java功能链接到本文件:框架/基/核心/ JNI / android_util_Log.cpp



文章来源: What is in android.util.Log#println_native()?