96SEO 2026-02-19 18:10 11
第一种是位于com.android.internal包中的API。

我将称之为internal
API。
第二种API类型是一系列被标记为hide属性的类和方法。
从严格意义上来讲#xff0c;这不是一个单一的API#xff0c;而是一组小的被隐藏的API#xff0c;但…
第一种是位于com.android.internal包中的API。
我将称之为internal
API。
第二种API类型是一系列被标记为hide属性的类和方法。
从严格意义上来讲这不是一个单一的API而是一组小的被隐藏的API但我仍将其假设为一种API并称之为hidden
你可以查看一下android的源码并能找到一些变量、函数和类等都被hide属性标记了。
API之所以被隐藏是想阻止开发者使用SDK中那些未完成或不稳定的部分接口或架构。
举个例子Bluetooth
和4上都是用hide属性隐藏了。
当这些API被验证和清理后Google的开发者会移除hide属性并让其在API
和5之间发生了变化。
如果你的程序依赖某些隐藏的API当其部署到新的平台上时就有可能陷入困境。
API来说从来都没有计划将其开放出来。
它就是Android的“内部厨房”对开发者来说应该将其视作黑盒。
凡事都会有变化的。
如果你依赖某些internal
SDK进行开发的时候你引用了一个非常重要的jar文件——android.jar。
它位于Android
SDK平台的文件夹中SDK_DIR/platforms/platform-X/android.jar其中X表示API等级。
这个android.jar移掉了com.android.internal包中所有的类也移掉了所有标记有hide的类枚举字段和方法。
但当你在设备上启动应用程序时它将加载framework.jar简单来说它和android.jar等同而其未移掉internal
API。
但它对开发者来说并不能友好地访问因此我将向大家展示不通过反射如何使用这些API。
API还有一件事需要说明。
Eclipse的ADT插件增加了一个额外的规则那就是禁止使用com.android.internal包中的任何东西。
所以即便是我们可以拿到最原始的android.jar未删减版也没有轻松的办法通过Eclipse使用这些internal
你可以亲自检查一下。
创建一个新的Android工程或者使用已有的。
查看一下它引用的类库右击project
API在SDK中是按照一样的方式处理的都从android.jar中移除了但internal
这些文章的终极目标是让开发者能够不通过反射使用Internal和Hidden
API。
如果你完成了接下来部分中描述的步骤你将能使用这些Internal和Hidden
注如果你正在使用这些非公开的API你必须知道你的程序有着极大的风险。
基本上无法保证在下一次的Android
OS更新时这些API不被破坏也无法保证不同的运营商有着一致的行为。
你自己决定吧。
场景A是B、C的总和。
场景B是最简单的一个不需要对Eclipse的ADT修改。
我解释了为什么我们不通过反射就会很难使用internal和hidden
API。
这是因为android.jar中就没包含这些API因此没人能够在编译时引用这些类。
这篇文章将描述如何还原最初的android.jar。
这将允许我们像使用公开的API那样使用internal和hidden
我们需要修改android.jar这样它才能包含所有的*.class文件包括internal和hidden
Android是一个开源工程。
我们可以下载源码并搭建编译环境这样它就不能移除那些internal和hidden的类了。
这个办法比较困难
每个模拟器或真机在运行时都会有一个等同android.jar的东西。
我们可以从这里拿到jar文件提取出原始的.class文件并拷贝到Android
我将采用方案2。
它易于开始还不需要搭建Linux环境及编译环境等。
pull从模拟器或设备上下载文件或者使用DDMS借助Eclipse或SDK中的应用。
注意模拟器通常在.dex文件中包含代码而真机一般在优化版的dex文件中包含代码——odex文件。
操作odex文件比较困难这也是为什么我选择模拟器的原因。
SDK中的android.jar等同的文件是framework.jar。
这个文件位于设备的/system/framework/framework.jar
/system/framework/framework.jar
当framework.jar从设备上下下来之后重命名为framework.zip并解压到独立的文件夹中看起来是这个样子的
首先我们需要把.dex文件转换成.jar格式。
你可以使用通用的工具dex2jar。
只需要运行
当转换结束时你应该得到了classes.dex.dex2jar.jar文件。
重命名为framework-classes.zip。
使用zip查看器进入到framework-classes.zip/com/android/internal/
恭喜你你已经拥有了所有的.class文件包括internal和hidden
SDK的android.jar位于ANDROID_SDK/platforms/android-X/android.jarX表示API等级。
拷贝android.jar成custom-android.jar。
解压至custom-android文件夹。
将framework-classes.zip中所有的.class文件拷贝到custom-android文件夹中你需要覆盖所有已经存在的.class文件。
然后压缩custom-android文件成original-android.zip。
重命名为original-android.jar。
启动模拟器下载/system/framework/framework.jar
解压custom-android.zip至custom-android文件夹
将framework-classes.zip中所有文件拷贝至custom-android文件夹覆盖存在的文件
压缩custom-android文件夹成original-android.zip
我们还原了android.jar使其包含所有的internal和hidden
API的.class文件。
这只是第一步。
下一步将创建定制的android平台使其使用未删节版的android.jar并将其添加到Android
我已经展示了如何创建一个包含所有internal和hidden
接下来的工作就是要修改已经存在的Android平台SDK_DIR/platforms/platform-X/android.jarX表示API等级。
你可以直接使用Part2中创建的original-android.jar替换android.jar。
但这样的话你的所有工程都将直接使用internal和hidden
API而没有任何限制。
这不够方便因为在多数的工程中你不希望这样。
甚至你可能更希望禁止这些APIADT/android.jar的默认行为。
但对于一些特定的工程你希望能够使用这些internal和hidden
为了达到这样的灵活性你需要创建一个新的自定义的Android平台。
当不需要访问internal和hidden
API时你只需使用原有的Android平台。
当你使用这些API时你使用自定义的Android平台。
现在我们看一下它是如何与Eclipse设定关联的。
选择你的工程右击–
Android。
你将会看到一组支持的Android平台与…/platforms/folder相似。
下面是截图
拷贝original-android.jar并改名为android.jar
ro.build.version.release2.3.extended
为什么我选择API等级为-9这是因为它必须是一个数字而且它不能是9或者其它已经存在的API等级。
否则你自定义的平台将不能被使用它在列表里可见但选中后也不能正常工作编译时仍然使用相应API等级的原始平台。
在上一篇中我已经告诉你如何创建一个未删节版的android.jar。
在这一篇中我向你展示了如何创建一个自定义的Android平台并在其中使用original-android.jar。
这对于hidden
API来说还需要另一步。
这是因为ADT仍然不允许使用com.android.internal包中的类参见上图中的“forbidden”访问规则。
下一节我将向你展示如何定制ADT来允许使用internal包中的类。
在实际的操作过程中我创建的自定义的android.jarAPI
10不能被Eclipse成功加载会出现以下的错误框如同网站上其它人操作的结果一样期待解决方案。
不过作者提供了可用的自定义的android.jar如果不想自己尝试的话可以直接从网站下载地址将在Part5中给出稍等。
创建自定义的original-android.jar包含所有的.class文件
创建自定义的Android平台来使用original-android.jar
修改ADT插件允许使用com.android.internal包只为Internal
在本文中我将向你们展示如何使用那些Internal和Hidden
此外在本文的结尾我列出了一些自定义的Android平台它们都包含Internal和Hidden
API。
我附带了它们是为了可能你不想花太多时间在这方面但又想快速的尝试什么。
APIisWifiApEnabled。
我不用使用反射就能编译并运行这些代码。
下面有些平台是我为自己创建的。
只用拷贝它们到SDK_DIR\platforms文件夹下。
这只是让Hidden
3http://www.megaupload.com/?dS1F2MKYZ
4http://www.megaupload.com/?dVUCTRI3Y
7http://www.megaupload.com/?d7ITNILBK
8http://www.megaupload.com/?dEXT5FKKT
9http://www.megaupload.com/?dEXT5FKKT
10http://www.megaupload.com/?dFCV78A9M
API真的是可用了但也有一些意外的问题如AlertDialog.Builder(Context
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback