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 » ]
10 8 月, 2013 in
Software | tags:
Android |
1 Comment
变量提供了程序可以操作的有名字的存储区。每一个变量都有特定的类型,该类型决定了变量的内存大小和布局、能够存储于该内存中的值的取值范围以及可应用在变量上的操作集。
我弄不懂,这算不算是强类型(Strong Typing)与弱类型(Weak Typing)语言的区别之一。
在使用变量之前,变量必须已经被定义或声明。但是变量必须且仅能定义一次,定义时,除了可以为变量分配存储空间,还可以指定初始值。
C++ 中,声明(declaration)用于向程序表明变量的类型和名字。通过使用 extern 关键字,声明变量名而不定义它,不分配存储空间。事实上,它只是说明变量定义在程序的其他地方。
[ Read More » ]
19 5 月, 2013 in
Software | tags:
C++ |
No Comments
在书的4.3.1章节“创建动态数组”中,对比数组变量和动态数组时,提到:
C++虽然不允许定义长度为0的数组变量,但明确指出,调用new动态创建长度为0的数组是合法的。
前半句话引起了我的好奇,根据使用 Java 的经验,我知道这是可行的。所以,我验证一下。
int main() {
char a[0];
return sizeof(a);
} |
int main() {
char a[0];
return sizeof(a);
}
[ Read More » ]
5 5 月, 2013 in
Software | tags:
C++ |
No Comments
在 Unix 系统中,通过echo $?
,获取 main 函数的返回值。习题1.2,在 main
函数中,返回-1。通过上述方法查看,发现结果是255。这是为什么?
从 Wikipedia 的 Exti Status词条,可以看到如下说明:
SUS specifies that the low-order 8 bits of the status value contain the exit status;[4] this can be retrieved using the WEXITSTATUS macro in wait.h.[5] As such, on POSIX-compatible exit statuses are restricted to values 0-255, the range of an unsigned 8-bit integer.
[ Read More » ]
29 4 月, 2013 in
Software | tags:
C++ |
No Comments
在我看来,学习 Android 的一个有效途径就是阅读它的源代码,尽管市面上有各种各样的宝典、秘籍,但能从根源上把问题讲得透透彻彻的少之又少[推荐1]。我曾经在2010年编译并走读过它部分代码,但相比它浩瀚的代码,做的功课只是九牛一毛。
这段时间,我重新拾起丢掉的任务,计划在 MacBook Pro 走读代码,为了配合验证观点,很有必要对源代码加些注释,修改些代码。所有的这一切首先要做到将原生的 Android 源码编译通过。
[ Read More » ]
7 4 月, 2013 in
Software | tags:
Android |
No Comments