Android源代码介绍,Android-Log源码详解
Log.java
源碼目錄:frameworks/base/core/java/android/util
編譯目錄:frameworks/base
image.png
我驚奇的發(fā)現(xiàn),Log.java里沒有定義println_native方法,也沒有System.loadLibary任何的so庫。帶著這個疑問,我們來看c層代碼。
android_util_Log.cpp
源碼目錄:frameworks/base/core/jni
編譯目錄:frameworks/base/core/jni
/*
* JNI registration.
*/
static JNINativeMethod gMethods[] = {
/* name, signature, funcPtr */
{ "isLoggable", "(Ljava/lang/String;I)Z", (void*) android_util_Log_isLoggable },
{ "println_native", "(IILjava/lang/String;Ljava/lang/String;)I", (void*) android_util_Log_println_native },
};
int register_android_util_Log(JNIEnv* env)
{
jclass clazz = env->FindClass("android/util/Log");
if (clazz == NULL) {
ALOGE("Can't find android/util/Log");
return -1;
}
levels.verbose = env->GetStaticIntField(clazz, env->GetStaticFieldID(clazz, "VERBOSE", "I"));
levels.debug = env->GetStaticIntField(clazz, env->GetStaticFieldID(clazz, "DEBUG", "I"));
levels.info = env->GetStaticIntField(clazz, env->GetStaticFieldID(clazz, "INFO", "I"));
levels.warn = env->GetStaticIntField(clazz, env->GetStaticFieldID(clazz, "WARN", "I"));
levels.error = env->GetStaticIntField(clazz, env->GetStaticFieldID(clazz, "ERROR", "I"));
levels.assert = env->GetStaticIntField(clazz, env->GetStaticFieldID(clazz, "ASSERT", "I"));
return AndroidRuntime::registerNativeMethods(env, "android/util/Log", gMethods, NELEM(gMethods));
}
看了https://blog.csdn.net/flydream0/article/details/7371692這篇博客才知道,這種是顯示注冊native方法的一種方式。 android源碼里基本都采用這種方式來注冊native方法。
總結(jié)
以上是生活随笔為你收集整理的Android源代码介绍,Android-Log源码详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 王爽汇编语言C硬盘读写,王爽汇编语言学习
- 下一篇: android 打卡app,日常小打卡a