Uncompressing Linux done, booting the kernel

Android

Android 前不久发布4.3版本,正值我在学习《Android系统源代码情景分析》一书,觉得不必要拘泥于该书所描述的版本(2.3),跟上潮流前线不是件坏事,况且 Android 在2.3到4.3并没有发生天翻地覆的改变,原理应该是想通的。于是升级 Android Source,随后是 Kernel Goldfish。

和往常一样,各种环境变量配置完毕,编译过程一切顺利,得到system.img、userdata.img和ramdisk.img,模拟器可以正常启动、运行。接下来,编译 Goldfish 得到zImage,但是,模拟器怎么也不能启动了。在终端输出下面的信息后,一切嘎然而止。

[ Read More » ]

Compile Android Source on Mac OS X

Android

在我看来,学习 Android 的一个有效途径就是阅读它的源代码,尽管市面上有各种各样的宝典、秘籍,但能从根源上把问题讲得透透彻彻的少之又少[推荐1]。我曾经在2010年编译并走读过它部分代码,但相比它浩瀚的代码,做的功课只是九牛一毛。

这段时间,我重新拾起丢掉的任务,计划在 MacBook Pro 走读代码,为了配合验证观点,很有必要对源代码加些注释,修改些代码。所有的这一切首先要做到将原生的 Android 源码编译通过。

[ Read More » ]

图解ListView的刷新过程

Android

ListView是 Android 应用开发中,常见的视图类组件,其普及程度差不多与 HTML 中的Table一样。此类组件的本质是将数据,也就是Model,表现出现,但其本身不负责维护数据,属于“来料加工”。

那么ListView又是怎么获得数据渠道呢?答案就是Adapter,其顾名思义就是“适配器”。就像笔记本加入市电,需要用电源适配器一样,原始数据不大可能直接显示给用户,就需要一个数据适配器,转换成视图所支持的样子。

到这里,数据已经可以展现给用户了,但是还面临一个问题,即如果数据更新了,视图能不能将新数据替换旧数据?在 Android 中,掌控数据、充当 Controller 角色的是Activity,它应该是知道数据有变化的,同时,它还持有 ViewAdapter

[ Read More » ]

Memory Management for Android Apps 笔记之 GC

Android

本篇博文是在观看 Google I/O 2011 : Memory Management for Android App 所做的笔记之一,主要篇幅是传递演讲者 Patrick Dubroy 的观点,小部分则掺杂了自己的理解。这里的观点可能包含了谬误,或者是过时信息,因此建议读者如果英语能力尚可,则不妨直接观看原视频或者演示文稿,–需翻墙。

Android 日志是开发者审视系统、应用运行状况的得力助手,它就像是驾驶员面前的仪表盘,车辆的时速、里程、油量等数据关系到行驶安全,而日志中的 GC 信息则反馈了系统、应用健康状况,细心的开发者甚至可以判定是不是发生了内存泄漏。

[ Read More » ]

Android Application Framework Outside, Service Understanding : 4

Android

在上文当中提到的service命令,它是如何获得服务的信息呢?这个这个仅为275行的简单程序(framework/base/cmds/service/service.cpp)并未有什么特别神奇的地方,从本质上它对服务信息一无所知,所有的信息都是通过IPC获得。

IPC(Inter Process Communication)几乎总是伴随着Service出现,–不论是系统服务,还是应用服务,因为服务运行的进程大部分和应用运行的进程不同。

Android有意淡化IPC,甚至使其透明,就连Android Dev Guide也只是对IPC只做简明的解释说明,Android这样做的目的是降低应用开发的技术门槛,使开发者更多关注业务逻辑等商业价值点。

注意:RPC的全称为Remote Procedure Call,虽然和IPC只有一字之差,但并不相同。

IPC只是一种概念,实现IPC的方式有多种,例如在linux上你可以使用socket等,而Android中则采用了Binder。

[ Read More » ]