Understanding Android Source: RefBase, wp, sp

Android

管理对象生命周期,常常会采用引用计数技术。当有一个新的指针指向了一个对象时,这个对象的引用计数就增加1;相反,当一个指针不再指向一个对象时,这个对象的引用计数就减少1。而当对象的引用计数减少为0时,它所占用的内存就可以被安全地释放了。

上述方案可以应对大部分使用场景,但是,对于相互引用的情况,却无能为力。比如,两个对象A和B,A引用了B,同时B也引用了A。在任何时间,它们都被对方引用着,以致于无法被释放。对此,一般做法是通过强、弱引用计数予以解决。将有关联的对象划分为“父-子”和“子-父”关系。在前者中,“父”对象通过强引用计数来引用“子”对象;在后者中,“子”对象通过弱引用计数来引用“父”对象。

[ Read More » ]

How to solve QSEECOMD on AOSP

Android

为Nexus 5编译自己修改后的 AOSP 已经很长一段时间了,但一直以来,都遇到其频繁打印一段日志,不仅严重干扰了视觉,还冲掉了原本有意义的日志信息。

[ Read More » ]

How to Flash the Linux Kernel for Android Nexus 5

Android

本篇文章记录了在读完《Android系统源代码情况分析》第二章“硬件抽象层”的动手实践过程。该书讲述了从内核到框架,再到应用的整个知识链条,从它出版到现在,我一直在不断地翻阅它,获益匪浅,推荐给大家。

硬件抽象层(HAL)是连接硬件、内核、框架、应用四者的纽带,理解了它,再去学习其他模块,可以有事半功倍的效果。其中,如何为内核增加新模块,又是学习HAL的必备环节。该书是在模拟器上进行讲解,好处在于学习成本很低,无需准备硬件,弊端就是运行模拟器非常慢,耽误时间。所以,我使用Nexus 5手机进行各种实验,一来效率高,二来最大化手机的功用。

[ Read More » ]

How to Add New Project into AOSP

Android

在上一篇《How to Create Branch in Android Local Mirror》中,我介绍了如何在Android Mirror中创建分支,然后进行协同开发。既然是分支,那么增加、删除、修改文件等操作,自然是少不了的,麻烦不到哪里去。不过,如果是增加一个新的工程,就稍微麻烦些了。

过去的几个月里,我不断地在看《Android系统源代码情景分析》《深入理解Android:卷I》,两位作者讲述知识的方式有一个共同点,就是用图表(UML)来描述,用代码来验证。所以,不可避免我要创建一些测试工程,同时,这些工程还要在不同的机器上协同开发。

[ Read More » ]

How to Create Branch in Android Local Mirror

Android

获取 Android 源码非常简单,无非两三个命令。但如果你是一个团队,又或者你会在多台机器之间切换工作,那么,每个人、每台机器都从官网拉取代码,即浪费精力、耽误时间,又不能方便地管理代码。

这个时候,你需要使用本地镜像,正如官网文档所建议的那样。创建了本地镜像后,其他人、其他机器都可以就近拉取代码,然后推送修改到本地代码仓库。可是,这个过程要如何协作呢?接下来的文字将描述这个过程。

[ Read More » ]