前几天拿到了Android 2.1的源代码,按照网络上的说明编译通过,并且也编译出了自己的SDK,突然心血来潮,想测试下自己编译的SDK是否好用,于是乎将Android 自带的AlarmClock APP为基础,在Eclipse上创建了Android工程,并且指定自己的自己的杠杠编译出来的SDK,结果发现有好几个编译错误;
当时惊诧了一下,刚刚编译好的源代码,没有做任何修改,不可能有编译错误啊!
于是尝试在Android 2.1源代码目录下单独编译 AlarmClock APP,编译通过,没有问题。
显然在SDK下编译,和在源代码目录下编译两者有所区别,哪有什么区别呢?
省略掉调查过程,直接上调查结果:
1.SDK构建的是编译环境,而非运行环境,Android SDK中很多类都是stub出来的,函数内部并没有具体实现,但是Attribute以及Method等等都保持和真实类的式样一致(理论上应该一致,但是Google真地做到完全一致了吗?),这样在SDK下开发APP只,能够保证你用到SDK的接口时候编译没有问题。而开发者编译好的APP拿到实机或者Emulator上跑的时候,实际上调用系统的API都是实实在在的API,而非SDK中Stub出来的接口;
证明这一点很容易,Android代码编译完毕之后,随便找个SDK中的Class例如Intent,在代码中搜索,你会得到两个Intent.java,一个是实实在在的Intent.java,一