Hidden API之所以被隐藏,是想阻止开发者使用SDK中那些未完成或不稳定的部分(接口或架构)。举个例子,Bluetooth API在API 5上才开放;在API 3 和4上都是用@hide属性隐藏了。当这些API被验证和清理后,Google的开发者会移除@hide属性,并让其在API 5官方化。很多地方在API 4 和5之间发生了变化。如果你的程序依赖某些隐藏的API,当其部署到新的平台上时,就有可能陷入困境。
当你使用Android 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和hidden API。(但它对开发者来说,并不能友好地访问,因此,我将向大家展示不通过反射如何使用这些API)。
这篇文章将描述如何还原最初的android.jar。这将允许我们像使用公开的API那样使用hidden API。
如何得到原版android.jar?
我们需要修改android.jar,这样它才能包含所有的*.class文件(包括internal和hidden API类)。有两种办法:
1) Android是一个开源工程。我们可以下载源码并搭建编译环境,这样它就不能移除那些internal和hidden的类了。这个办法比较困难;
2) 每个模拟器或真机在运行时都会有一个等同android.jar的东西。我们可以从这里拿到jar文件,提取出原始的.class文件,并拷贝到Android SDK的android.jar中。
我将采用方案2。它易于开始,还不需要搭建Linux环境及编译环境等。
从设备上获取framework.jar
你可以使用命令行(adb pull)从模拟器或设备上下载文件,或者使用DDMS(借助Eclipse或SDK中的应用)。
注意:模拟器通常在.dex文件中包含代码,而真机一般在优化版的dex文件中包含代码——odex文件。操作odex文件比较困难,这也是为什么我选择模拟器的原因。
与Android SDK中的android.jar等同的文件是framework.jar。这个文件位于设的:/system/framework/framework.jar
adb pull /system/framework/framework.jar当framework.jar从设备上下下来之后,重命名为framework.zip并解压到独立的文件夹中。
classes.dex正是我们需要的。
创建framework-classes.zip
首先,我们需要把.dex文件转换成.jar格式。你可以使用通用的工具dex2jar。只需要运行:
dev2jar classes.dex
当转换结束时,你应该得到了classes.dex.dex2jar.jar文件。重命名为framework-classes.zip。使用zip查看器,进入到framework-classes.zip/com/android/internal/
创建original-android.jar
Android SDK的android.jar位于ANDROID_SDK/platforms/android-X/android.jar(X表示API等级)。
拷贝android.jar成custom-android.jar。解压至custom-android文件夹。将framework- classes.zip中所有的.class文件拷贝到custom-android文件夹中(你需要覆盖所有已经存在的.class文件)。
然后,压缩custom-android文件成original-android.zip。
步骤总结
1. 选择你的目标平台X
2. 创建目标平台X的模拟器
3. 启动模拟器,下载/system/framework/framework.jar
4. 重命名framework.jar -> framework.zip
5. 从framework.zip中抽取classes.dex
6. 使用dex2jar工具,将其转换成classes.jar
7. 重命名classes.jar -> framework-classes.zip
8. 拷贝android.jar –> custom-android.zip
9. 解压custom-android.zip至custom-android文件夹
10. 将framework-classes.zip中所有文件拷贝至custom-android文件夹(覆盖存在的文件)
11. 压缩custom-android文件夹成original-android.zip
12. 重命名original-android.zip -> original-android.jar
分享到:
相关推荐
Android Hidden API Android Hidden API is a modified jar file which combines the android.jar from the Android SDK with the framework.jar from a real device. This jar enables to use Android's internal/...
在Android开发中,隐藏API指的是官方不推荐或者不公开直接使用的API接口,这些接口通常用于系统内部功能,可能因为安全、稳定性的考虑而被限制访问。然而,有时开发者为了实现某些特定功能,可能会需要利用这些隐藏...
本篇将深入探讨如何理解和使用Android的隐藏API。 标题"android_隐藏API调用"指的是开发者尝试在自己的应用程序(APK)中调用Android系统中的非公开接口。这些接口可能提供了更多的系统控制权限,或者是针对某些...
- **目的不同**:Hidden API主要是为了防止开发者使用未完成或不稳定的API,而Internal API则是完全不打算对外开放的API。 - **未来可能性**:Hidden API有可能在未来版本中正式开放,而Internal API则不太可能。 #...
頻繁安卓hidden api限制背景SDK 非 API 名单(谷歌官方)随着Android每个版本的发布,都会有更多非SDK接口受到限制。我们知道这些限制会影响您的发布工作流程,同时我们希望确保您拥有相关工具来检测非SDK接口的使用...
android4.2下 framework中的资源包,导入项目后可以使用android隐藏api。当使用 Android SDK 进行开发的时候,应用默认引用...简单来说,framework.jar 和 android.jar 等同,但是没有移除 internal API 和 hidden API。
在Android开发中,有时开发者可能需要使用到官方未公开的API,这些API通常被标记为`@hide`,意味着它们不包含在公开的SDK中。`@hide`注解是用于Java源代码中的,它告诉Android编译系统不要将特定的类、方法或字段...
使用自定义android.jar 从下载自定义android.jar 。 转到<SDK>/platforms/ 。 将下载的隐藏API文件复制,粘贴并替换到此目录中,例如android-30/android.jar 。 将compileSdkVersion和targetSdkVersion更改为30...
【4.2到6.0的在已上传,文件太大,一次上传不了】当使用 Android SDK 进行开发的时候,应用默认引用了 android.jar,它位于 SDKDir\platforms\android-X 目录下(X 代表 API 级别),默认移除了所有的被@hide标识的...
Android 非SDK API访问限制及常见开源库说明,Hidden Api访问限制解除方案
【7.0到9.0在下一个上传,文件太大,一次上传不了】当使用 Android SDK 进行开发的时候,应用默认引用了 android.jar,它位于 SDKDir\platforms\android-X 目录下(X 代表 API 级别),默认移除了所有的被@hide标识...
PhoneProfiles Android application - manually change device settings like ringer mode, sounds,...android-hidden-api - https://github.com/anggrayudi/android-hidden-api SystemBarTint - https://github.co
为了解决这个问题,我们可以使用开源库 Android Hidden API,或者使用 Dexmaker 生成动态代理来解决这个问题。 使用开源库 Android Hidden API Android Hidden API 是一个开源库,提供了访问 Android 系统隐藏的 ...
这里我们将深入探讨如何使用jxl.jar库在Android环境中操作Excel表格,特别是处理隐藏表的情况。 首先,jxl是一个Java库,它允许我们以编程方式读取和写入Microsoft Excel文件。由于Android系统基于Java,因此可以...
**Android Hidden API Bypass详解** 在Android系统中,为了维护平台的安全性和稳定性,谷歌限制了对部分API的直接访问,这些API被称为隐藏API。开发者通常只能通过官方SDK提供的公开接口来编写应用程序。然而,有时...
2. **利用动画效果隐藏/显示**: Android提供了多种动画API,如AlphaAnimation、ScaleAnimation等,可以用于创建过渡效果,使布局淡入淡出、缩放进出等。首先,为布局创建动画对象,然后在适当的时候启动动画。例如,...
这些API通常是为系统内部使用而设计的,不推荐普通开发者直接调用,因为它们可能在未来的Android版本中发生变化,导致应用程序出现兼容性问题。尽管如此,有时候开发者可能出于特定需求想要访问这些隐藏API,"Hidden...
It uses Reflection in a couple of method calls to access some hidden APIs, so it might break on some Android version, or in the future. I tried limiting the usage of Reflection as much a
此外,从Android 4.0(API级别14)开始,系统对Home键的监听进行了限制,除非你自定义了Launcher(启动器),否则可能无法准确监听到Home键事件。 在压缩包文件`HomeListen`中,可能包含了实现上述功能的示例代码,...
Launches the App Ops feature that is hidden in Android 4.3 to 4.4.1 You can download the app at https://play.google.com/store/apps/details?id=co.uk.thewirelessguy.appops Author Stephen Mullen Stephen ...