Android源代码介绍,Android-Log源码详解
Log.java
源码目录:frameworks/base/core/java/android/util
编译目录:frameworks/base
image.png
我惊奇的发现,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方法。
Android源代码介绍,Android-Log源码详解相关推荐
- Android进阶笔记:Messenger源码详解
Messenger可以理解为一个是用于发送消息的一个类用法也很多,这里主要分析一下再跨进程的情况下Messenger的实现流程与源码分析.相信结合前面两篇关于aidl解析文章能够更好的对aidl有一个 ...
- 安卓开发基础面试题,Android面试必备的集合源码详解,附小技巧
去年无疑是 Flutter 技术如火如荼发展的一年. 每一个移动开发者都在为 Flutter 带来的"快速开发.富有表现力和灵活的 UI.原生性能"的特色和理念而痴狂,从超级 Ap ...
- Android AR开发实践之七:OpenGLES相机预览背景绘制源码详解
Android AR开发实践之七:OpenGLES相机预览背景绘制源码详解 目录 Android AR开发实践之七:OpenGLES相机预览背景绘制源码详解 一.OpenGL ES渲染管线 1.基本处 ...
- 源码详解Android 9.0(P) 系统启动流程之SystemServer
源码详解Android 9.0(P) 系统启动流程目录: 源码详解Android 9.0(P)系统启动流程之init进程(第一阶段) 源码详解Android 9.0(P)系统启动流程之init进程(第 ...
- Android 事件分发机制分析及源码详解
Android 事件分发机制分析及源码详解 文章目录 Android 事件分发机制分析及源码详解 事件的定义 事件分发序列模型 分发序列 分发模型 事件分发对象及相关方法 源码分析 事件分发总结 一般 ...
- Android编程之Intent源码详解
Intent源码详解,直接开始入题: Intent源码6700多行代码,但真正核心代码 就那么几百行,大部分都用来定义常量字符串了 先来看一下 public class Intent implemen ...
- Tensorflow 2.x源码详解之开宗明义:基本介绍和张量(万文多图)
大家好,我是爱编程的喵喵.双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中.从事机器学习以及相关的前后端开发工作.曾在阿里云.科大讯飞.CCF等比赛获得多次Top名次.现 ...
- Integer源码详解
尊重原创,转载请标明出处 http://blog.csdn.net/abcdef314159 对于Integer这个类估计大家也都非常熟悉了,以前看过他的源码,但也只是粗略的看了一下,最近有时间 ...
- OkHttp3源码详解
前言:为什么有些人宁愿吃生活的苦也不愿吃学习的苦,大概是因为懒惰吧,学习的苦是需要自己主动去吃的,而生活的苦,你躺着不动它就会来找你了. 一.概述 OKHttp是一个非常优秀的网络请求框架,已经被谷歌 ...
- cocos android-1,Cocos2D-Android-1之源码详解:5.Box2dTest
Cocos2D-Android-1之源码详解:5.Box2dTest 发布时间:2020-08-06 06:19:28 来源:51CTO 阅读:398 作者:abab99 package org.co ...
最新文章
- TensorFlow介绍之TF数据流图
- Bootstrap系列 -- 37. 基础导航样式
- 关于单元测试脚手架的几点思考
- linux普通用户发送信号,Linux信号发送与作业控制
- NLP复习资料(5)-第九章 句法分析
- 京东抢购助手_[Windows] 京东极速抢购助手V2.0,支持京东健康+扫货抢购
- 接手一个APP,如何从0到1去做测试体系的搭建?
- java设计模式2--工厂模式
- [Markdown] Markdown使用 - 持续更新
- css伪类选择器,:link、:visited、:focus、:hover、:active、:first-child
- CSS3中很容易混淆的transform,translate,transition。如何去区分,以及综合写法。
- 设置finder窗口大小的5个小技巧!速看?
- oracle pdb与cdb区别,CDB与PDB的系统关系
- 20230220学习总结02
- linux下设置定时执行脚本
- mysql 双1设置_mysql 双1设置
- 成功解决ERROR: Could not build wheels for bottleneck, which is required to install pyproject.toml-based
- 解决每次启动都弹出UAC对话框
- Mac OS X 背后的故事(四)——政客的跨界
- 恢复计算机后无法开机密码,Win7系统电脑无法修改开机密码修复方法