Android有两类API在SDK中不能使用。 第一类就是位于包com.android.internal的API,我将这些API称为内部API。第二类API就是用@hide标记的类和函数,虽然严格说这不是一个API而是一系列隐藏API的集合,我仍然假定这是一个API,称为隐藏API。 你阅读android的源码,[email protected] 这里有一个隐藏常量的例子,来自WifiManager(source code of API Level 10). 另外一个例子是隐藏函数setWifiAppEnabled,来自WifiManager(source code of API Level 10). 所以您只要看到@hide属性,这就是一个隐藏API。 隐藏API隐藏是为了防止开发人员使用SDK中未完成或者未稳定(接口和架构方面看)的部分。比如,Bluetooth API在API Level 5(android 2.0)之前就存在,但在API Level 3和4(android 1.5和1.6)[email protected],[email protected],在API Level 5中就有Bluetooth API了。还有很多东西在Level 4和5之间发生了变化。如果程序依赖于某些隐藏API,可能会在新版本的Android OS上运行出现问题。 而内部API则不计划对外开放。这是android的内部餐厅,开发人员可以视为黑盒子。这里面的东西同样可能发生改变。同样的,如果您的程序依赖于内部API,在新的Android发布后,可能遇到麻烦。 下面总结它们之间的不同: ? 隐藏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中所有的类移除了,同样的,[email protected]。 但是当您在设备中运行应用程序时,加载的是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)。 重要总结:在SDK中内部API和隐藏API处理方式基本上相同(都从android.jar中移除),但内部API在Eclipse ADT插件中显示禁止了。 本系列文章的终极目标是给程序员不用反射而使用内部API和隐藏API的方法。如果您完成了在后面文章中的所有步骤,您将可以向象使用官方API那样使用内部API和隐藏API,没有必要使用反射。 但是如果您使用这些非公开的API,必须意识到存在一个巨大的风险。首先不能保证这些API在Android OS升级后不会变化,其次也不能保证在不同厂家的不同设备上有一致的行为。这完全取决您自己。 有以下三种场景: 场景A是场景B和C的综合。场景B是最简单的(不需要修改eclipse ADT插件)。 场景A:阅读1,2,3,4,5 场景B:阅读1,2,3,5 场景C:阅读1,2,3,4,5隐藏API的例子
内部API和隐藏API的不同
内部和隐藏API的编译时和运行时对比
不通过反射机制使用内部API和隐藏API
详细解决方案
施用内部(com.android.internal)和隐藏(@hide)API[第1部分,介绍]
热度:77 发布时间:2016-05-01 19:18:17.0
相关解决方案
- The server encountered an internal error () that prevented it from fulfilling th解决方案
- 'Update Progress' has encountered a problem An internal error has occurred解决方案
- 大家帮帮忙呀The server encountered an internal error () that prevented it解决方法
- SOS-(奇怪现象)服务器暂不可用500 internal server error,该怎么解决
- WEBstruts The server encountered an internal error () that prevented it fr解决思路
- 'Update Progress' has encountered a problem An internal error has occurred解决方案
- android 读取byte[]中的元素解决方案
- android 标题栏兑现方式
- android 中Activity向BroadcastReceiver发送数据,该怎么解决
- Android 4.0 为什么模拟器老是提示小弟我谷歌拼音输入法已停止
- android:getSharedPreferences() 这是哪个类的方法解决思路
- android 怎么判断一个程序是否联网
- android 大量数据按周分组,该如何解决
- android RadioButton如何设置默认选中
- ksoap2-android-这个包,连接webService怎么设置超时
- android 怎么重新设置锚点
- android UI界面设计解决方案
- android 图片对象获取的有关问题
- android 怎么调用淘宝支付宝接口
- Android 沿袭InputMethodService自定义输入法
- android 关于服务连接的疑义
- android 两个activity如何通信
- Error 500-Internal Server Error 如何解决
- android 怎么实现对view的放大和缩小
- android 教程解决方法
- android ID,该如何处理
- 准备复习2-3个月,看java+android,请问有经验者,怎么看效果最好》
- android UI线程与AsyncTask的有关问题
- Error 500--Internal Server Error
- Error 500-Internal Server Error