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

调用隐藏类的方法(转)

 
阅读更多

 

在上一篇中,我解释了为什么我们不通过反射就会很难使用internal和hidden API。这是因为android.jar中就没包含这些API,因此,没人能够在编译时引用这些类。

这篇文章将描述如何还原最初的android.jar。这将允许我们像使用公开的API那样使用internal和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并解压到独立的文件夹中,看起来是这个样子的:

clip_image002

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/:

clip_image004

恭喜你,你已经拥有了所有的.class文件,包括internal和hidden API(尽管截图只确认了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。重命名为original-android.jar。

步骤总结

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.jar,使其包含所有的internal和hidden API的.class文件。这只是第一步。下一步将创建定制的android平台,使其使用未删节版的android.jar,并将其添加到Android SDK platforms文件夹中。

分享到:
评论

相关推荐

    js调用C#方法

    ### JS调用C#方法及C#调用JS方法详解 在Web开发中,前后端交互是必不可少的一个环节。本文将详细介绍如何实现前端JavaScript(JS)与后端C#之间的相互调用,这对于构建功能丰富的Web应用至关重要。下面将按照问题的...

    android_隐藏API调用

    3. **签名和权限**:调用隐藏API可能需要额外的签名权限或者特殊的系统权限,这可能使得应用在Google Play或其他市场上的分发变得困难。 4. **版本更新**:随着Android系统的更新,隐藏API可能会被修改甚至移除,...

    Android调用隐藏系统服务锁屏

    在Android系统中,调用隐藏服务来实现锁屏和设置默认锁屏密码涉及到对Android框架层及安全机制的深入理解。下面将详细讲解这个过程涉及的知识点。 首先,Android系统是一个基于Linux内核的开源移动操作系统,它允许...

    使用ASP.NET AJAX异步调用Web Service和页面中的类方法

    这些方法通常定义在ASPX页的代码隐藏类中。调用方式与Web Service相似,但无需通过`Services`属性注册,而是直接在JavaScript中通过`PageMethods`对象调用,例如`PageMethods.SayHelloFromPage(name, OnSuccess, On...

    15丨软件设计的接口隔离原则:如何对类的调用者隐藏类的公有方法?.pdf

    在这个例子中,`Cache`类包含了两类方法:一类是缓存操作方法,如`get()`、`put()`和`delete()`,这些方法是面向调用者的,用于处理数据的存取;另一类是配置更新方法`reBuild()`,这是专为远程配置中心设计的,用于...

    易语言隐藏调用系统API源码

    在这个特定的压缩包文件中,标题提及的是“易语言隐藏调用系统API源码”,这涉及到易语言中如何在程序中不显式地调用操作系统提供的函数,即API(应用程序接口)。 API调用是编程中的常见操作,通过API,程序可以与...

    易语言调用API隐藏指定窗口

    本文将详细讨论如何使用易语言调用API来隐藏指定窗口。 易语言是一款基于中文编程的开发工具,它为程序员提供了一种直观的、以中文词汇为基础的编程语法。在易语言中,调用API函数是通过“系统支持”库实现的,该库...

    利用java反射调用Android隐藏Api

    利用java的反射原理来调用 Android隐藏api 应用开发必备哦 详细描述: http://blog.csdn.net/y_haiyang/article/details/9924925 ====================关注小鱼=================== 新浪微博:...

    C++ 多个类的DLL封装以及隐式链接和显式链接2种方法调用

    本主题主要探讨如何将多个类封装到一个DLL中,并介绍两种调用DLL函数的方式:隐式链接和显式链接。 1. **DLL的封装** 当我们需要在DLL中封装多个类时,首先需要创建这些类的接口,通常是纯虚基类。然后,每个具体...

    通过反射机制调用系统隐藏的API清除手机所有的app缓存.关键方法freeStorageAndNotify。前提添加AIDL文件.zip

    通过反射机制调用系统隐藏的API清除手机所有的app缓存.关键方法freeStorageAndNotify。前提添加AIDL文件.zip,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。

    易语言隐藏调用系统API

    在易语言中,隐藏调用系统API是一项高级技术,它涉及到程序的底层交互和安全性。通过隐藏调用,开发者可以避免程序被恶意分析或篡改,保护程序的内部逻辑。 在标题和描述中提到的几个关键术语有: 1. **隐藏调用...

    android 系统隐藏类直接调用包ServiceManager StatusBarManager

    android 系统隐藏类 直接调用包 ServiceManager和StatusBarManager,主要用来屏蔽通知栏下拉。

    C#中CLR虚方法的多态调用

    这些方法在派生类`Derived`中可能被重写或隐藏。 - **非虚方法与虚方法的区别**:`Base`类中的`NoneVirtualFun1`是非虚方法。这意味着即使在派生类中,它也不能被重写。这也回答了最初的问题之一——父类中的非虚...

    android调用隐藏的网络信息设置菜单实现

    如果你能反编译这个APK并查看其资源和类,可能会发现更多关于如何调用隐藏网络信息设置的线索。 总之,调用Android系统中的隐藏网络信息设置菜单涉及了权限管理、反射机制、Intent的使用以及源码分析等多个知识点,...

    调用API隐藏指定窗口.rar

    8. **应用场景**:API调用隐藏窗口的技巧广泛应用于自动化工具、系统监控、软件开发等领域。例如,自动化测试可能需要在后台运行程序,避免界面干扰;系统维护工具可能会隐藏某些窗口以优化用户体验。 通过学习和...

    调用IE隐藏命令

    需要注意的是,由于这些方法涉及底层的Windows API调用,它们可能会受到浏览器版本、安全设置以及操作系统更新的影响。此外,随着Edge浏览器逐渐取代IE,这种技术在未来的适用性可能会有所下降。对于更现代的浏览器...

    WinFrom调用EXE,实现窗口内外显示2种方法

    本文将详细介绍两种在WinForm中调用EXE并控制其在窗口内外显示的方法。 1. **使用Process类** .NET Framework提供了`System.Diagnostics.Process`类,用于启动、管理和控制进程。这是最常用的方法来调用外部EXE...

    C++基类指针和派生类指针之间的转换方法讲解

    所谓隐藏是指使用常规的调用方法,派生类对象访问这个函数时,会优先访问派生类中的这个函数,基类中的这个函数对派生类对象来说是隐藏起来的。 但是隐藏并不意味这不存在或完全不可访问。通过 b->Base::func()访问...

    spring cloud feign实现远程调用服务传输文件的方法

    Feign 使得 Java 程序员可以像调用本地方法一样调用远程服务,隐藏了底层的网络通信细节。 Spring Cloud Feign Spring Cloud Feign 是 Spring Cloud 中的一个子项目,提供了对 Feign 的支持。它使得开发者可以使用...

    调用API隐藏指定窗口

    通过学习和实践这样的例子,开发者不仅可以掌握易语言的API调用方法,还能加深对Windows窗口管理机制的理解,这对于进行系统级编程和自动化任务处理是非常有用的。同时,这种技术也可以应用到其他领域,如系统监控、...

Global site tag (gtag.js) - Google Analytics