Android中的隐藏API和Internal包的使用

来源:互联网 发布:stm32f 输入端口写法 编辑:程序博客网 时间:2024/05/16 17:46

对这篇文章“Android中的隐藏API和Internal包的使用之获取应用电量排行”(原文地址:http://blog.csdn.net/jiangwei0910410003/article/details/25994337)中的内容做了一下简单的排版和提炼。

当我们使用android的SDK进行开发的时候都会用到一个非常重要的jar文件--android.jar(Android SDK目录/platforms/platform-X/android.jar,X是API等级)。这个包中移除了所有被标记的尾@hide的类、方法、枚举、字段和Internal包。当我们的程序在设备上运行的时候会加载设备上的一个framework.jar的文件,它包含了移除的部分。所以为了使用那些Google对我们隐藏的内容,思路是想办法得到framework.jar,并把那些android.ja中缺少的API拿出来放到android.jar中。

下面介绍一种简单的方法来获取这些内容。


1,获取framework.jar
设备上有framework.jar这个文件,那么我们就从设备上来取。运行2.3.3版本模拟器,通过adb pull命令(也可以用DDMS)来完成提取工作:
adb pull /system/framework/framework.jar

获得了framework.jar文件后,将在下面的步骤中获得里面的classes.dex文件。这里必须注意以下两点:

1)真机中获取不到classes.dex文件的,真机上一般是经过优化了的.odex文件,所以需要到模拟器中获取!

2)要运行2.3.3版本的模拟器。2.3.3版本以上的模拟器中提取的framwork.jar中是没有classes.dex文件的。


2,将framework.jar改成framework.zip,解压,得到里面的classes.dex文件。


3,将.dex文件转换成.jar格式。这里用到了dex2jar这个工具

在Windows下使用dex2jar很简单,将第二步得到的classes.dex文件复制到dex2jar的解压目录中。在cmd窗口中进入dex2jar的解压目录,输入:dex2jar.bat classes.dex即可。转换结束后会在同一个文件夹中获得一个名为classes.dex.dex2jar.jar文件。


4,重命名classes.dex.dex2jar.jar成classes.dex.dex2jar.zip,解压。解压后文件夹中的内容如图所示:

     

5,将Android SDK目录/platforms/platform-X/中的android.jar拷贝出来,使用WinRAR打开。选择“命令--->添加文件到压缩文件中...”,然后选择第四步中得到的文件夹:



这里一定要注意,我们在android.jar的基础上添加classes-dex2.jar中的文件,所以更新方式选择为:跳过已经存在的文件,并且压缩文件格式一定要选择ZIP格式,否则在后面的使用中会报错。


然后点击确定,当WinRAR工作完毕,得到的android.jar就是我们需要的jar了。

OK,完成。

最后,使用我们制作的增强版jar时,将其复制回/platforms/platform-X/文件夹,覆盖里面原有的android.jar,然后再Eclipse中clean一下已存在工程即可使用了。


0 0