
Android System & Framework
文章平均质量分 86
To record the analysis of the system and the framework from Android.
flagstaffChen
I would like to fuck the code when I‘m confuse.
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
AndroidT(13) init 进程 -- second stage init 中的 Epoll (三)
可见使用了 Epoll 后,只要简单的几个步骤即可,作为框架使用还是相当方便的,其中隐藏了 epoll 的数据构造,用户只要提供 监听对象和对于的触发方法即可。不过值得注意的是,这是单线程的,如果注册太多的监听对象,或者某一个处理方法中耗时过长,还是相当影响其他监听事件的处理的。原创 2023-06-11 10:30:38 · 1040 阅读 · 0 评论 -
AndroidT(13) init 进程 -- first stage init 的初始化 (二)
走到 kernel 启动 init 进程这一阶段时,内存中的 ramdisk 内容则是由 vendor_boot ramdik 和 init_boot ramdisk 组成的,下面是官网给出的示意图,这部分工作则是在 bootloader 阶段完成的,在此不做赘述。execv的关键点则是会使用 path 指向的可执行程序替换当前进程已在执行的程序,用人话讲就是 first init 被 /system/bin/init 替换了,下面就会执行 /system/bin/init 中的 main 入口方法了。原创 2023-06-11 10:28:38 · 3216 阅读 · 1 评论 -
AndroidT(13) init 进程 -- first stage init 的启动(一)
第一阶段的 init 工作主要用于读取系统启动阶段需要的配置信息(例如 linux的bootconfig,cmdline等配置信息)、挂载文件系统、安装 kernel 中的模块驱动,最后就是启动第二阶段的 init 来进行 Android 系统相关的组件。此处的 init 是由 linux kernel 启动的,它也是 kernel 的第一个用户程序,至于它是如何被 linux kernel 拉起来的则不在此处讨论。在init_boot中,是没有 linux kernel 的,从它的大小也能看出。原创 2023-06-11 10:24:38 · 2372 阅读 · 0 评论 -
AndroidT(13) Log 系统 -- logd 服务的初始化(七)
至此整个 logd 至此也准备完成了,其中的各种 unix domain socket 节点都可以使用了,例如客户端写 log 内容到 logdw,客户端同 logdr 注册log监听。原创 2022-12-10 13:39:20 · 1487 阅读 · 1 评论 -
AndroidT(13) Log 系统 -- SocketListener 帮助类详解(六)
1) onDataAvailable 需要用户实现。2) onDataAvailable 不在调用者线程中,而是在 SocketClient 所管理的线程。3) stopListener 可以用于请求 onDataAvailable 所在线程退出,但是如果它在处理客户端的数据则是无法响应的。例如在 onDataAvailable 中block了,那么该线程也就无法退出了。原创 2022-12-10 13:35:52 · 1091 阅读 · 0 评论 -
AndroidT(13) Log 系统 -- logd的编译及启动(五)
在 Android 中系统服务的启动,是 init 根据所给的 rc 配置文件 fork 而来的。logd同样也不例外,其对应的rc文件则是 logd.rc,定义如下上面rc主要做了如下几件事a)创建socket logd,用于接收控制 logd 本身的请求。b)创建socket logdr,用于client来读取由 logd 管理的log,例如logcat显示的log则是通过该节点获得。原创 2022-12-10 13:35:04 · 1475 阅读 · 0 评论 -
AndroidT(13) Log 系统 -- logger_write 库实现解析(四)
经过上及章节的分析可见,不论是那种风格的LOG接口实现,最终调用的都是logger_write库中过提供的一些列接口来处理log内容的。下面就来看看 logger_write 库的实现,本章节会随着后续涉及接口的不断增加而动态更新。2.1 log tag确定 – code 1 一般使用Android 的LOG系统前,会先定义LOG_TAG宏的。但是如果没定义的话,总不能null吧,所以Android LOG系统贴心的使用程序的简称作为在用户没有设置LOG_TAG场景下的TAG值,对于代码如下原创 2022-12-04 16:57:48 · 807 阅读 · 0 评论 -
AndroidT(13) Log 系统 -- natvie LOG 输出的实现(三)
前两章涉及的是LOG系统的使用方法,本章则是深入的分析这些LOG接口的实现原理,如此在使用时能够更加的得心应手的。下面给出粗略的关系图 上面的概览图中,黄色的圈代表logd的一个socket客户端,他们属于不同的进程,因为在Android的Log子系统中一个进程只允许创建一个logd的客户端。 至于logd,这里先将其理解为一个带网络功能的log储存器即可,它和它的客户端是通过socket进行通讯的。 此处就不对每一个接口进行说明了,以 RLOGD 接口为例子进行讲解,希望能起到抛砖引玉的作用原创 2022-12-04 16:35:50 · 1341 阅读 · 0 评论 -
AndroidT(13) Log 系统 -- C plus plus 语言格式的LOG输出(二)
kmsg大家应该更加的熟悉,因为linux存在时间可比Android悠久的多,它属于linux kernel的log子系统,Android系统是基于linux,所以除了Android系统本身规划的这些log外。在 Android 中,有着非常多的子系统,所以 Android 的 LOG 系统是支持多个buffer的,即不同类型的log写入不同的buffer中。打印到logd中的log和C语言形式的log一样,也是支持根据log级别做有选择的方式进行输出的。同样的,我们也可以将log定向到标准输出中。原创 2022-11-28 21:06:10 · 2110 阅读 · 2 评论 -
AndroidT(13) Log 系统 -- C 语言格式的LOG输出(一)
前半部分 format 指向的字符串用于描述最终输出内容的格式,而后半部分则是被前面 format 所解析的各种变量/常量,这两部分则是构成输出的内容。在 Android 中,有着非常多的子系统,所以 Android 的 ALOG 系统是支持多个buffer的,即不同类型的log写入不同的buffer中。main类型的的buffer用来打印一般的log信息,注意了,虽然是一般,但是也不要打印垃圾内容,毕竟log系统的buffer是很紧俏的。手头需要做的事有轻重缓急,log中的信息所代表的事项也同样如此。原创 2022-11-28 21:05:10 · 1974 阅读 · 0 评论 -
AndroidT(13) --ActivityTaskManagerService 和 ActivityManagerService 的初始化(一)
ATMS在我看来属于AMS的一个辅助类,剥离了AMS中的一些功能到ATMS,下面引用官方的简单说明。原创 2022-09-27 21:38:00 · 1578 阅读 · 0 评论 -
SystemServiceManager 详解
通过 SystemServiceManager 启动的服务流程如下a)使用其单入参Context的构造函数进行实例构造。b)记录类实例及类名,方便内部查找。c)调用类实例中的onStart方法。d)返回实例化类。原创 2022-09-27 21:32:51 · 1534 阅读 · 0 评论 -
Android T(13)-- Looper 的实现(二)
上一章关注的时Looper的应用,本章则聚焦于其实现。诚然AOSP是开源的,且它的文档相较其他个人开源项目来说已经够有诚意了,但还是不如API文档那般事无巨细的说明。所以使用Android提供的轮子前,还是要扒开看看它内部的。...原创 2022-07-29 22:07:59 · 1698 阅读 · 2 评论 -
Android T(13)-- Looper 的使用(一)
addFd接口可以将给定的fd和对应fd数据产生时的callback注册到Looper中去,如此才能监听给定fd的状态,并调用对应的处理回调方法。对于此处BitTube实例的接收端fd,在3.3中事件投递过来后,BitTube.getFd对应的处理回调类会被回调,其实现如下。b)直接投递Message,对于Message的处理是支持延迟处理和立即处理的两种方式的,实际上前者是对后者的封装。通过接口sendObjects可以投递任意类型的数据,此处的MyData就是自定义的,类型如下。......原创 2022-07-29 22:07:00 · 1537 阅读 · 2 评论 -
MAC OS X--使用TUNA仓库下载指定部分的Android源码
背景 近期的冠状病毒在国内肆虐,当真是国之不幸,好在时至今日大有好转的迹象,致敬奋斗在前线的白衣天使。白衣天使正在前线与病毒大战,咱们身为程序猿暂时也帮不上什么忙,也只能在家操练技艺了。原本这个假期准备全家旅游的,所以也就没有带工作电脑在身边了,一些源码资料也没法看咋办?那就看现在还能看的呗。工具准备 对于工具就直接下载最新的就好了。源码的下载主要用到git、python及repo,repo...原创 2020-02-10 22:30:29 · 238 阅读 · 0 评论 -
你真的理解Android Handler吗
讲解原理前先看看Handler一般是如何在activity中使用的,如下为简单的例子private MyHandler myHandler = new MyHandler(); 1.1重写Handler中的handleMessage方法private class MyHandler extends Handler{ @Override public...原创 2018-12-08 21:05:49 · 343 阅读 · 0 评论 -
Android:kw_is(kw, type) (keyword_info[kw].flags & (type))分析
代码结构://以init.rc 的第一个有效命令为例分析—>import /init.environ.rcinit_parse_config_file("/init.rc"); parse_config(path, data); next_token(&state); lookup_keyword //将传入的参数添加K_前缀原创 2016-11-21 09:32:37 · 680 阅读 · 0 评论