这里是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版本。
只是没有在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内核中。
一旦你已经下载了SDK,您可以使用find
挖文件。 Java代码通过JNI链接到CPP代码。
你的情况,你可以使用这个命令来查找相关的文件:
find framework -type f -name "*.cpp" -exec grep "println_native" {} \; -ls
然后你会看到您的Java功能链接到本文件:框架/基/核心/ JNI / android_util_Log.cpp