随笔分类 -  Android

摘要:binder_open(...)都干了什么? 在回答binder_transaction(...)之前,还有一些基础设施要去探究,比如binder_open(...),binder_mmap(...),这些调用是在打开设备文件/dev/binder之后必须完成的程式化操作,而在它们内部需要做一些数据 阅读全文
posted @ 2016-08-13 20:15 palance 阅读(3607) 评论(0) 推荐(2)
摘要:轻量级指针 Binder的学习历程爬到驱动的半山腰明显感觉越来越陡峭,停下业务层的学习,补补基础层知识吧,这首当其冲的就是智能指针了,智能指针的影子在Android源码中随处可见。打开frameworkds/rs/cpp/util,RefBase.h和StrongPointer.h两个文件,代码多读 阅读全文
posted @ 2016-08-07 23:44 palance 阅读(1337) 评论(0) 推荐(1)
摘要:Binder驱动层的代码在 下的 和`binder.h test()`组织的请求数据是: 驱动程序是如何处理这个数据包的呢? 从应用层登陆,顺流直下 为此,还需要先从应用层往下看,frameworks/native/libs/binder/IPCThreadState.cpp:548,就从这里登陆吧 阅读全文
posted @ 2016-08-01 00:52 palance 阅读(1342) 评论(0) 推荐(2)
摘要:从服务端代码出发,TestServer.cpp 前三行代码在之前的Binder学习笔记系列中都分析过了,继续往下看。 ProcessState::self() startThreadPool()做了什么? frameworks/native/libs/binder/ProcessState.cpp: 阅读全文
posted @ 2016-06-13 23:15 palance 阅读(1380) 评论(0) 推荐(0)
摘要:还从客户端代码看起TestClient.cpp:14 sm getService(...)返回了什么? 其中第2行 返回的是 这在 "《 defaultServiceManager()返回了什么?》" 中有分析。 接下来的 在 "《ServiceManager如何响应checkService请求》" 阅读全文
posted @ 2016-05-28 22:50 palance 阅读(713) 评论(0) 推荐(0)
摘要:有了《ServiceManager如何响应checkService请求》的探索,研究addService就轻车熟路了,中间过程不再多说,仅把关键节点列出: frameworks/native/cmds/servicemanager/service_manager.c:347 frameworks/n 阅读全文
posted @ 2016-05-08 23:39 palance 阅读(2442) 评论(0) 推荐(0)
摘要:在checkService的调查中我们知道客户端向ServiceManager请求服务名,ServiceManager根据服务名遍历本地链表,找到匹配的handle返回给客户端。这个handle显然是由服务端注册的,这个handle究竟是什么?要先搞清楚这个问题,必须研究服务端和ServiceMan 阅读全文
posted @ 2016-05-08 23:35 palance 阅读(1253) 评论(0) 推荐(0)
摘要:前文中曾经遇到过Parcel,从命名上知道他负责数据打包。在checkService的请求/响应体系中,Parcel只打包了基本数据类型,如Int32、String16……后面还要用于打包抽象数据类型flat_binder_object,这会稍微复杂一些,因此有必要拿出来单独研究。我们从Parcel 阅读全文
posted @ 2016-05-08 23:29 palance 阅读(4009) 评论(0) 推荐(0)
摘要:这要从frameworks/native/cmds/servicemanager/service_manager.c:347的main函数说起,该文件编译后生成servicemanager。 接下来遇到se_xxx相关的数据结构和函数,未来我们还会遇到。他们是Android系统提供的安全机制,负责管 阅读全文
posted @ 2016-05-07 15:09 palance 阅读(2431) 评论(0) 推荐(0)
摘要:起点从TestClient.cpp的main函数发起: 前文已经分析过sm是new BpServiceManager(new BpBinder(0)),于是sm->getService(…)的行为应该找BpServiceManager::getService(…),frameworks/native 阅读全文
posted @ 2016-05-07 14:46 palance 阅读(1160) 评论(0) 推荐(0)
摘要:不管是客户端还是服务端,头部都要先调用 defaultServiceManager()都干了什么,它返回的是什么实例呢? 该函数定义在frameworks/native/libs/binder/IserviceManager.cpp:33 关键步骤可以分解为几步:1、ProcessState::se 阅读全文
posted @ 2016-05-07 14:39 palance 阅读(2582) 评论(0) 推荐(1)
摘要:网上看了很多关于binder的文章,但我还是想把自己的心路历程记录下来,有些是跟着别人的脚步领略险峻风景,有些则是自己只身探入代码深处打捞出的收获。我不确定是否全部融会贯通,更担心一两个月后会完全不记得来时的路。最好的验证和留存的方法是把他们写成博文,几个月后回头再来读,看是否还能读得明白。如果可以 阅读全文
posted @ 2016-04-25 01:18 palance 阅读(2177) 评论(1) 推荐(2)
摘要:版权声明:本文为博主原创文章,未经博主允许不得转载。 先写个helloworld吧,在Android源码树中创建文件夹external/helloworld,加入文件: // helloworld.c #include <stdio.h> #include <stdlib.h> int main(i 阅读全文
posted @ 2016-03-02 17:50 palance 阅读(2604) 评论(0) 推荐(0)
摘要:侯 Sir说:“源码之下,了无秘密。” 但有些秘密还是要搞起来了看得更真切,仅从静态代码的体位很难体会到运动时的妙处。因此环境搭好了,下一步就是调试。gdbserver搭配gdb的调试环境走得很顺利,可是mmm出的C代码总是没有debugging symbol。在调研原因的过程中倒是熟悉了一些工具的 阅读全文
posted @ 2016-03-01 01:00 palance 阅读(1935) 评论(0) 推荐(0)
摘要:例子是从《Android系统源代码情景分析》第二章抄过来的,在学习的过程中还是遇到了不少的问题。 个人体会:在学习第二章之前应该把《Linux设备驱动程序》这本书至少前四章要读一遍,理解一些基础概念和背景知识,不过这本书还是略旧,比如sysfs就没有解释,多google吧。 本书第二章要理解透了再往 阅读全文
posted @ 2016-02-21 00:28 palance 阅读(2334) 评论(0) 推荐(0)
摘要:在阅读frameworks/rs/cpp/util/RefBase.h之LightRefBase时,我记得《C++设计新思维》里对这种用法是有过介绍的,可是今天翻箱倒柜,怎么都找不到那本奇书了。当年所谓的前卫,今天已经遍地开花,赶紧再把CRTP给复习一下。 CRTP模式主要有两种使用场景: 一、Me 阅读全文
posted @ 2016-02-17 01:07 palance 阅读(954) 评论(0) 推荐(0)
摘要:Android源码和内核的编译就是一场马拉松,每一个节点都耗时漫长,下载源码、编译源码、下载内核、编译内核,下载中途会断掉,编译中间会失败,求解再重来,又是一轮马拉松,于是每一步都要做好备份和记录,可是30G的源码(编译后已经达到70G)备份一次都需要好久。好在春节伊始我放弃了其他的学习,全力搞这个 阅读全文
posted @ 2016-02-12 23:19 palance 阅读(33500) 评论(2) 推荐(1)
摘要:本文演示用Android Studio写一个最简单的输入法。界面和交互都很简陋,只为剔肉留骨,彰显写一个Android输入法的要点。 1、打开Android Studio创建项目,该项目和普通APP的不同之处在于它不需要添加任何Activity: 我给该输入法命名为AndroidXXIME。 2、修 阅读全文
posted @ 2016-01-12 00:34 palance 阅读(8966) 评论(1) 推荐(2)
摘要:输入法是一种可以让用户输入文字的控件。Android提供了一套可扩展的输入法框架,使得应用程序可以让用户选择各种类型的输入法,比如基于触屏的键盘输入或者基于语音。当安装了特定输入法之后,用户即可在系统设置中选择个输入法,并在接下来的输入场景中使用该输入法。不过在任一时刻,只能使用一个输入法。为了在安... 阅读全文
posted @ 2015-12-19 18:55 palance 阅读(9219) 评论(0) 推荐(0)