关于Android SDK与源代码环境下编译和运行的差别

本文探讨了在Android SDK环境下编译应用与在源代码环境下编译的差异,指出SDK中存在Stub类,其接口可能与真实API不一致,可能导致编译通过但在实际运行时出现问题。举例说明了Vibrator类构造函数和Intent常量的可见性差异,建议开发者使用源代码环境进行APP开发以确保一致性。
摘要由CSDN通过智能技术生成

前几天拿到了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,一

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值