Android 有两类API在SDK中不能使用

第一类就是位于包com.android.internalAPI,我将这些API称为内部API;

第二类API就是用@hide标记的类和函数,虽然严格说这不是一个API而是一系列隐藏API的集合,我仍然假定这是一个API,称为隐藏API;

 

内部API和隐藏API的不同

隐藏API隐藏式为了防止开发人员使用SDK中未完成或者未稳定(接口和架构方面看)的部分。比如,Bluetooth API在API Level5(android 2.0)之前就存在,

但是API Level 3和4(android 1.5和1.6)中使用@hide隐藏起来了。当该API稳定,google的开发人员移除@hide属性。注意:如果APP依赖于某些隐藏API,

可能会在新版本的Android系统上运行出现问题。

内部API则不计划对外开放,开发人员视为黑盒子。

 

内部和隐藏API的编译时和运行时对比

当使用Android SDK进行开发时,会引用一些非常重要的jar文件android.jar。它位于Android SDK的平台目录SDK_DIR/platforms/platform-X/android.jar(其中XAPI Level,可以是5或者10或其它的数字)。(其中X为API Level)。在android.jar中,com.android.internal中所有的类移除了,同样,所有标记为@hide的类、枚举、字段

、方法也被移除。

但是当在设备中运行应用程序时,加载的framework.jar没有被裁减,包含所有的内部类和隐藏API。

编译时,编译不通过;运行时,可加载;

措施:想办法绕过编译,可以使用反射机制来访问隐藏API和内部API。

网上有不使用反射机制使用上述两种API的方法。

 

关于内部API还有一些需注意点。Eclipse的ADT插件增加一条额外规则,禁止使用来自com.android.internal包的任何东西。

如果使用未裁减的android.jar,也不能再eclipse中使用内部API。

您可以自己检查一下。在eclipse中创建一个新的Android工程(或使用现有的),查看它的引用库(右键点击工程,Properties –> Java Build Path –> Libraries)。

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值