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

第一类就是位于包com.android.internal的API,我将这些API称为内部API。第二类API就是用@hide标记的类和函数,虽然严格说这不是一个API而是一系列隐藏API的集合,我仍然假定这是一个API,称为隐藏API。

隐藏API的例子

你阅读android的源码,就会发现有些常量、函数和类标记为@hide.

这里有一个隐藏常量的例子,来自WifiManager(source code of API Level 10).

【android】两类不能在SDK中使用的API------@hide和internal API介绍_第1张图片

另外一个例子是隐藏函数setWifiAppEnabled,来自WifiManager(source code of API Level 10).

【android】两类不能在SDK中使用的API------@hide和internal API介绍_第2张图片

所以您只要看到@hide属性,这就是一个隐藏API。

内部API和隐藏API的不同

隐藏API隐藏是为了防止开发人员使用SDK中未完成或者未稳定(接口和架构方面看)的部分。比如,Bluetooth API在API Level 5(android 2.0)之前就存在,但在API Level 3和4(android 1.5和1.6)中使用@hide隐藏起来了。当该API稳定下来,google的开发人员移除@hide属性,在API Level 5中就有Bluetooth API了。还有很多东西在Level 4和5之间发生了变化。如果程序依赖于某些隐藏API,可能会在新版本的Android OS上运行出现问题。

而内部API则不计划对外开放。这是android的内部餐厅,开发人员可以视为黑盒子。这里面的东西同样可能发生改变。同样的,如果您的程序依赖于内部API,在新的Android发布后,可能遇到麻烦。

下面总结它们之间的不同:

[html] view plain copy
  1. 隐藏API=正在开发中;
  2. 内部API=黑盒

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

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

但是当您在设备中运行应用程序时,加载的是framework.jar(大约等价于android.jar),它没有被裁减,包含所有的内部类和隐藏API。所以您可以使用反射机制来访问隐藏API和内部API(当然,这种方法使用起来不太方便,下面我将介绍不使用反射机制访问这些API的方法)。

关于内部API还有一些特别。Eclipse的ADT插件增加了一条额外规则,禁止使用来自com.android.internal包的任何东西。所以,即使您使用了原始(未裁减)的android.jar,也不容易在eclipse中使用内部API。

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

【android】两类不能在SDK中使用的API------@hide和internal API介绍_第3张图片

【android】两类不能在SDK中使用的API------@hide和internal API介绍_第4张图片

重要总结:在SDK中内部API和隐藏API处理方式基本上相同(都从android.jar中移除),但内部API在Eclipse ADT插件中显示禁止了。

不过,我们可以用反射使用内部API和隐藏API。

但是如果您使用这些非公开的API,必须意识到存在一个巨大的风险。首先不能保证这些API在Android OS升级后不会变化,其次也不能保证在不同厂家的不同设备上有一致的行为。这完全取决您自己。


转自:http://blog.csdn.net/linghu_java/article/details/8283042

更多相关文章

  1. Android通过反射EthernetManager Api设置以太网为静态IP地址或者
  2. Android反射的简单应用之BottomNavigationView
  3. android中反射的应用
  4. android 测试读取LEB数据的函数
  5. Android中的常量 DEFAULT_KEYS_SHORTCUT
  6. android生命周期函数大全——亲测
  7. 反射的方法获取android的Imei
  8. android 之Dialog的多种Dialog对话框(以及反射在自定义对话框的
  9. android 使用反射机制获取工程中的图片

随机推荐

  1. Window平台下的Android的环境配置
  2. Android(安卓)GWES之窗口管理之基本构架
  3. Android——《Android第一行代码》中使用
  4. 集成第三方库到android程序方法
  5. listView的item中有checkbox,导致setOnIte
  6. Android之基于BaseAdapter和SimpleAdapte
  7. Android 菜单(OptionMenu)大全 建立你自
  8. 【Android】 导入项目报错的解决方案
  9. apk多渠道自动打包
  10. Android零碎知识