`
zhiying201039
  • 浏览: 43126 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用Android的 hidden API

阅读更多

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代码-直接访问安卓系统隐藏的 APIs 和资源

    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 jar包,api 30

    在Android开发中,隐藏API指的是官方不推荐或者不公开直接使用的API接口,这些接口通常用于系统内部功能,可能因为安全、稳定性的考虑而被限制访问。然而,有时开发者为了实现某些特定功能,可能会需要利用这些隐藏...

    android_隐藏API调用

    本篇将深入探讨如何理解和使用Android的隐藏API。 标题"android_隐藏API调用"指的是开发者尝试在自己的应用程序(APK)中调用Android系统中的非公开接口。这些接口可能提供了更多的系统控制权限,或者是针对某些...

    使用internal和 hide api

    - **目的不同**:Hidden API主要是为了防止开发者使用未完成或不稳定的API,而Internal API则是完全不打算对外开放的API。 - **未来可能性**:Hidden API有可能在未来版本中正式开放,而Internal API则不太可能。 #...

    頻繁安卓hidden api限制.zip

    頻繁安卓hidden api限制背景SDK 非 API 名单(谷歌官方)随着Android每个版本的发布,都会有更多非SDK接口受到限制。我们知道这些限制会影响您的发布工作流程,同时我们希望确保您拥有相关工具来检测非SDK接口的使用...

    android.jar

    android4.2下 framework中的资源包,导入项目后可以使用android隐藏api。当使用 Android SDK 进行开发的时候,应用默认引用...简单来说,framework.jar 和 android.jar 等同,但是没有移除 internal API 和 hidden API。

    详解Android使用@hide的API的方法

    在Android开发中,有时开发者可能需要使用到官方未公开的API,这些API通常被标记为`@hide`,意味着它们不包含在公开的SDK中。`@hide`注解是用于Java源代码中的,它告诉Android编译系统不要将特定的类、方法或字段...

    android-hidden-api:一个提供对Android隐藏API和内部资源的访问的库

    使用自定义android.jar 从下载自定义android.jar 。 转到<SDK>/platforms/ 。 将下载的隐藏API文件复制,粘贴并替换到此目录中,例如android-30/android.jar 。 将compileSdkVersion和targetSdkVersion更改为30...

    android (7.0,7.1,8.0,8.1,9.0)对应的framework.rar

    【4.2到6.0的在已上传,文件太大,一次上传不了】当使用 Android SDK 进行开发的时候,应用默认引用了 android.jar,它位于 SDKDir\platforms\android-X 目录下(X 代表 API 级别),默认移除了所有的被@hide标识的...

    Android 非SDK API访问限制及常见开源库说明

    Android 非SDK API访问限制及常见开源库说明,Hidden Api访问限制解除方案

    android (4.4,5.0,5.1,6.0)对应的framework.rar

    【7.0到9.0在下一个上传,文件太大,一次上传不了】当使用 Android SDK 进行开发的时候,应用默认引用了 android.jar,它位于 SDKDir\platforms\android-X 目录下(X 代表 API 级别),默认移除了所有的被@hide标识...

    Android代码-PhoneProfiles

    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 webview转PDF的方法示例

    为了解决这个问题,我们可以使用开源库 Android Hidden API,或者使用 Dexmaker 生成动态代理来解决这个问题。 使用开源库 Android Hidden API Android Hidden API 是一个开源库,提供了访问 Android 系统隐藏的 ...

    使用jxl.jar在Android中操作Excel表格

    这里我们将深入探讨如何使用jxl.jar库在Android环境中操作Excel表格,特别是处理隐藏表的情况。 首先,jxl是一个Java库,它允许我们以编程方式读取和写入Microsoft Excel文件。由于Android系统基于Java,因此可以...

    AndroidHiddenApiBypass

    **Android Hidden API Bypass详解** 在Android系统中,为了维护平台的安全性和稳定性,谷歌限制了对部分API的直接访问,这些API被称为隐藏API。开发者通常只能通过官方SDK提供的公开接口来编写应用程序。然而,有时...

    Android 显示/隐藏 布局

    2. **利用动画效果隐藏/显示**: Android提供了多种动画API,如AlphaAnimation、ScaleAnimation等,可以用于创建过渡效果,使布局淡入淡出、缩放进出等。首先,为布局创建动画对象,然后在适当的时候启动动画。例如,...

    Hidden-Apis-Calling-Demo:它演示了一种直接调用android sdk的隐藏api的简单方法

    这些API通常是为系统内部使用而设计的,不推荐普通开发者直接调用,因为它们可能在未来的Android版本中发生变化,导致应用程序出现兼容性问题。尽管如此,有时候开发者可能出于特定需求想要访问这些隐藏API,"Hidden...

    Android代码-GlowPadBackport

    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监听home按键实例

    此外,从Android 4.0(API级别14)开始,系统对Home键的监听进行了限制,除非你自定义了Launcher(启动器),否则可能无法准确监听到Home键事件。 在压缩包文件`HomeListen`中,可能包含了实现上述功能的示例代码,...

    Android代码-App Ops – Permission Settings

    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 ...

Global site tag (gtag.js) - Google Analytics