摘要:
春节期间如预期完成了两个计划:1、读完了《Android系统源代码情景分析》并给大部分章节写了读书笔记,当然这个目标大部分是利用了2016年的业余时间完成的,春节只是给他画了个句号。2、读完了《未来简史》,这是用五天的时间读完的。 《未来简史》这本书很好读,思路清晰。他首先分析了现代人类赋予自身的意 阅读全文
摘要:
binder_open(...)都干了什么? 在回答binder_transaction(...)之前,还有一些基础设施要去探究,比如binder_open(...),binder_mmap(...),这些调用是在打开设备文件/dev/binder之后必须完成的程式化操作,而在它们内部需要做一些数据 阅读全文
摘要:
轻量级指针 Binder的学习历程爬到驱动的半山腰明显感觉越来越陡峭,停下业务层的学习,补补基础层知识吧,这首当其冲的就是智能指针了,智能指针的影子在Android源码中随处可见。打开frameworkds/rs/cpp/util,RefBase.h和StrongPointer.h两个文件,代码多读 阅读全文
摘要:
Binder驱动层的代码在 下的 和`binder.h test()`组织的请求数据是: 驱动程序是如何处理这个数据包的呢? 从应用层登陆,顺流直下 为此,还需要先从应用层往下看,frameworks/native/libs/binder/IPCThreadState.cpp:548,就从这里登陆吧 阅读全文
摘要:
从服务端代码出发,TestServer.cpp 前三行代码在之前的Binder学习笔记系列中都分析过了,继续往下看。 ProcessState::self() startThreadPool()做了什么? frameworks/native/libs/binder/ProcessState.cpp: 阅读全文
摘要:
还从客户端代码看起TestClient.cpp:14 sm getService(...)返回了什么? 其中第2行 返回的是 这在 "《 defaultServiceManager()返回了什么?》" 中有分析。 接下来的 在 "《ServiceManager如何响应checkService请求》" 阅读全文
摘要:
之前在博客园、简书、CSDN等地儿都开过博,一篇文章写好了,我希望能在几个平台可以同步发布,可是操作起来成本不低。几个平台下的富文本编辑器比较起来还是博客园更顺手,看着更舒服,尤其是代码块的操作灵活、准确。而CSDN对代码块内的文字加粗、修改字色后就会出现html文无法解析的情况,混杂着代码和htm 阅读全文
摘要:
有了《ServiceManager如何响应checkService请求》的探索,研究addService就轻车熟路了,中间过程不再多说,仅把关键节点列出: frameworks/native/cmds/servicemanager/service_manager.c:347 frameworks/n 阅读全文
摘要:
在checkService的调查中我们知道客户端向ServiceManager请求服务名,ServiceManager根据服务名遍历本地链表,找到匹配的handle返回给客户端。这个handle显然是由服务端注册的,这个handle究竟是什么?要先搞清楚这个问题,必须研究服务端和ServiceMan 阅读全文
摘要:
前文中曾经遇到过Parcel,从命名上知道他负责数据打包。在checkService的请求/响应体系中,Parcel只打包了基本数据类型,如Int32、String16……后面还要用于打包抽象数据类型flat_binder_object,这会稍微复杂一些,因此有必要拿出来单独研究。我们从Parcel 阅读全文
摘要:
这要从frameworks/native/cmds/servicemanager/service_manager.c:347的main函数说起,该文件编译后生成servicemanager。 接下来遇到se_xxx相关的数据结构和函数,未来我们还会遇到。他们是Android系统提供的安全机制,负责管 阅读全文
摘要:
起点从TestClient.cpp的main函数发起: 前文已经分析过sm是new BpServiceManager(new BpBinder(0)),于是sm->getService(…)的行为应该找BpServiceManager::getService(…),frameworks/native 阅读全文
摘要:
不管是客户端还是服务端,头部都要先调用 defaultServiceManager()都干了什么,它返回的是什么实例呢? 该函数定义在frameworks/native/libs/binder/IserviceManager.cpp:33 关键步骤可以分解为几步:1、ProcessState::se 阅读全文
摘要:
网上看了很多关于binder的文章,但我还是想把自己的心路历程记录下来,有些是跟着别人的脚步领略险峻风景,有些则是自己只身探入代码深处打捞出的收获。我不确定是否全部融会贯通,更担心一两个月后会完全不记得来时的路。最好的验证和留存的方法是把他们写成博文,几个月后回头再来读,看是否还能读得明白。如果可以 阅读全文
摘要:
版权声明:本文为博主原创文章,未经博主允许不得转载。 Android2.x中Logger日志系统采用了字符设备驱动来支持,到了Android6.0已经找不到kernel/goldfish/drivers/staging/android/logger.c这一层的驱动程序了。不过上层接口还是没变的,所以 阅读全文
摘要:
版权声明:本文为博主原创文章,未经博主允许不得转载。 先写个helloworld吧,在Android源码树中创建文件夹external/helloworld,加入文件: // helloworld.c #include <stdio.h> #include <stdlib.h> int main(i 阅读全文
摘要:
侯 Sir说:“源码之下,了无秘密。” 但有些秘密还是要搞起来了看得更真切,仅从静态代码的体位很难体会到运动时的妙处。因此环境搭好了,下一步就是调试。gdbserver搭配gdb的调试环境走得很顺利,可是mmm出的C代码总是没有debugging symbol。在调研原因的过程中倒是熟悉了一些工具的 阅读全文
摘要:
例子是从《Android系统源代码情景分析》第二章抄过来的,在学习的过程中还是遇到了不少的问题。 个人体会:在学习第二章之前应该把《Linux设备驱动程序》这本书至少前四章要读一遍,理解一些基础概念和背景知识,不过这本书还是略旧,比如sysfs就没有解释,多google吧。 本书第二章要理解透了再往 阅读全文
摘要:
一直在找mac下顺手的代码编辑器,要求能方便地查找和编辑,最好能再集成调试,最后选择了sublime。用了一段时间emacs,但是学习曲线过于陡峭。尤其是眼下的要务是啃代码时,玩弄emacs有点舍本逐末了,所以暂时还是先放一放神器,找个能尽快上手的玩吧~ 随着使用深入,我会不断更新,逐步把一些经验码 阅读全文
摘要:
在阅读frameworks/rs/cpp/util/RefBase.h之LightRefBase时,我记得《C++设计新思维》里对这种用法是有过介绍的,可是今天翻箱倒柜,怎么都找不到那本奇书了。当年所谓的前卫,今天已经遍地开花,赶紧再把CRTP给复习一下。 CRTP模式主要有两种使用场景: 一、Me 阅读全文
摘要:
Android源码和内核的编译就是一场马拉松,每一个节点都耗时漫长,下载源码、编译源码、下载内核、编译内核,下载中途会断掉,编译中间会失败,求解再重来,又是一轮马拉松,于是每一步都要做好备份和记录,可是30G的源码(编译后已经达到70G)备份一次都需要好久。好在春节伊始我放弃了其他的学习,全力搞这个 阅读全文
摘要:
上一篇介绍了完成Android输入法的最小化步骤,它只能将按键对应的字符上屏。一般的东亚语言都有一个转换的过程,比如汉语输入拼音,需要由拼音转成汉字再上屏。本文将在前文基础上加入完成转换过程所必需的候选窗。本文代码可参见https://github.com/palanceli/AndroidXXIM 阅读全文
摘要:
本文演示用Android Studio写一个最简单的输入法。界面和交互都很简陋,只为剔肉留骨,彰显写一个Android输入法的要点。 1、打开Android Studio创建项目,该项目和普通APP的不同之处在于它不需要添加任何Activity: 我给该输入法命名为AndroidXXIME。 2、修 阅读全文
摘要:
前文翻译的《Android下创建一个输入法》一文中提到了来自Google的输入法例程SoftKeyboard,备忘下该程序的配置和运行。首先将SoftKeyboard导入AndroidStudio,选择Import project(Eclipse ADT, Gradle, etc.)然后打开虚拟机配... 阅读全文
摘要:
之前了解到MAC下的开机启动和定时自动运行不再沿用cron,而是有自己的launchctl:把启动文件放在/Library/LaunchDaemon/xxx.plist,里面可以记录运行的时间间隔、工作目录之类的。我在公司的笔记本使用无线网,每次重启后IP可能会变,变了以后我在家里就找不到它了,为了... 阅读全文
摘要:
在MAC下面为Git找一款用得顺手的GUI客户端还真不容易。学习工具使用还是先器而后道的路径比较适合我,当年上手CVS SVN都是如此,先通过tortoise客户端熟练了基本操作,之后在搭建构建平台的时候再熟悉各种命令。其实如果不是必须要用脚本调用,也没必要学习命令,通过GUI了解背后的原理就足够了... 阅读全文
摘要:
前面我用小米路由搭建起了从外网可以访问的网站,并和域名绑定在了一起,但还是不完美。因为我发现无论怎么搞,从外网也无法ssh到路由器上去。猜测可能是小米出于安全的考虑,做了屏蔽。所以即使加了防火墙例外,也还是登不进来。如果我想随时随地的修改服务器文件,就没法做到了。于是买了个树莓派,把http服务架设... 阅读全文
摘要:
家里的小米路由R1D用了近一年,只是做一个普通的路由器使用,实在太浪费了。最近学习移动端编程,感觉和PC时代最大的不同就在于移动端产品更重云和端的配合。于是就花了一晚上捣鼓捣鼓,在小米路由上搭建了一套可从外网访问的web 服务,以便手机上做的玩意儿可以随时随地获得私有云的支持。把搭建路径备案记录下来... 阅读全文
摘要:
输入法是一种可以让用户输入文字的控件。Android提供了一套可扩展的输入法框架,使得应用程序可以让用户选择各种类型的输入法,比如基于触屏的键盘输入或者基于语音。当安装了特定输入法之后,用户即可在系统设置中选择个输入法,并在接下来的输入场景中使用该输入法。不过在任一时刻,只能使用一个输入法。为了在安... 阅读全文
摘要:
常常要登录多台Linux服务器,过去在Windows下使用SecureCRT,比较省心,配置还可以放到云盘,实时同步。现在改用MAC貌似就没有那么好用的东西了,每次ssh命令登录都需要输入密码,很烦。最终找到iTerm + 以证书方式登录ssh,基本能解决需要记忆ip和用户名密码的问题。具体步骤如下... 阅读全文
摘要:
简单调研JSPatch的使用,之所以在MAC下是因为可以创建一个命令行的应用,简化无关代码。具体做法如下:第一步,去https://github.com/bang590/JSPatch/tree/master/JSPatch下载JSEngine.h、JSEngine.m和JSPatch.js三个文件... 阅读全文
摘要:
执行sqlite3进入sqlite3环境:$ sqlite3SQLite version 3.8.10.2 2015-05-20 18:17:19Enter ".help" for usage hints.Connected to a transient in-memory database.Use... 阅读全文
摘要:
我发现苹果的Quick Time Player用来录屏就挺好用的。打开后选择 文件 - 新建屏幕录制 - 点击录制按钮, 划出要录制的模拟器窗体 - 点击录制就可以了。录制成mov格式还要再转成gif,因为很多地方上传视频如果要发布都还要再审核,有延迟。我用GIFBrewery,把Frame cou... 阅读全文
摘要:
还是在苹果的 View Controller Catalog for iOS 文章中找到答案。文中提到了两点:1、If the navigation bar or toolbar are visible but not translucent, it does not matter if the v... 阅读全文
摘要:
承接上文,我想把view布局修改为如下模式,让ScrollView长在NavigationBar的下方,这总不会有遮挡的问题了吧:story board内容如下,主要是右侧视图蓝色区域添加了ScrollView:ViewController的代码如下:@interface ViewControlle... 阅读全文
摘要:
UINavigationController和UIScrollView是iOS下几种主要的交互元素,但当我搭配二者在一起时,UIScrollView的滚动区域出现了很诡异的现象。我希望UIScrollView横向可翻页,纵向与其frame等高不可滚动,但诡异的是:1、我把UIScrollView的c... 阅读全文
摘要:
UIScrollView是iOS中最常用的交互控件之一,本文讨论当设定为翻页模式,内容页很多的时候,如果给每个页面都创建一个新View,会导致资源爆表。比较好的做法是参考UITableViewCell的做法,引入重用机制。原理非常的简单:不管有多少内容要显示,只要三个View就足够了,假设为A、B、... 阅读全文
摘要:
Logger是我在各类编程语言中使用最多,同时也是改进最多的一个函数,今天在iOS下又折腾了一番,终于找到我想要的一个版本,这里做一个总结。python版python对logger有专门的支持,只需要把log格式设置为自己想要的即可:import logging......loggingFormat... 阅读全文
摘要:
仅学习Git的一些入门操作比较容易,平时更多地使用GitHub,不过今天我想自个搭个服务练练手。当看完一些材料合作了一些验证之后,才发现其实所谓的服务和之前的svn完全不一样了。过程记录如下:LinuxServer端安装git我把服务打在Linux机器上,这台破机器没有apt-get,没有yum,只... 阅读全文
摘要:
我把学习《iOS编程(第4版)》的相关代码放在了GitHub上:https://github.com/palanceli/iOSProgramming学了一段时间之后,当要用到某个知识点,需要回过头再看的时候,找到相关的章节太困难了。所以我把所有的章节都放在了同一个APP里面,需要用的时候,在这个A... 阅读全文