隐藏API和Internal包的使用

原创 2013年12月05日 22:04:37
本文介绍不通过反射和编译源码使用隐藏API和Internal包。

首先我们要明白为什么隐藏API(有@hide标记)和Internal包不能使用。
当我们使用android的SDK进行开发的时候都会用到一个非常重要的jar文件--android.jar(SDK_DIR/platforms/platform-X/android.jar,X是API等级)。这个包中移除了所有被标记的尾@hide的类、方法、枚举、字段和Internal包。当我们的程序在设备上运行的时候会加载设备上的一个framework.jar的文件,它包含了移除的部分。

所以我们的思路是想办法得到framework.jar将那些缺少的API拿出来放到android.jar中。当然这些都可以通过编译源码来解决,但那样太过麻烦。下面我介绍一种简单的方法来获取这些内容。

1,获取framework.jar
刚才也说了,设备上有这个文件,那么我们就从设备上来取。通过adb pull命令(也可以用DDMS):
adb pull /system/framework/framework.jar
我们需要该包中的classes.dex文件。这里从4.0以下模拟器上取,真机上一般是经过优化了的.odex文件,而4.0以上的模拟器中的这个文件中没有classes.dex文件。
如果需要4.0以上的可以在网上找找。

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

3,将.dex文件转换成.jar格式。这里用到了dex2jar这个工具,知道反编译的同学都知道这个工具,没有的可以在网上找找。
转换结束后会得到一个classes.dex.dex2jar.jar文件。

4,重命名classes.dex.dex2jar.jar成classes.dex.dex2jar.zip,解压。得到以下文件。


5,将SDK_DIR/platforms/platform-X/中的android.jar拷贝出来,改成android.zip解压,得到以下结构的文件。将上面得到的文件复制到下面文件夹中(覆盖替换)。


6,全选上面的文件,打包成original-android.zip。
7,将original-android.zip改成original-android.jar。

OK,完成。
最简单的方法就是将这个包直接导入我们的工程,在工程中就可以使用隐藏API和Internal包了。

我们可以使用该包单独做一个平台,这在后面再讲。

附件是2.3.3的包
注意:该包不能直接放在libs目录里面,请放到其他地方。
因为ADT屏蔽了Internal包,直接放在libs下ADT会检测到。
且放在外面的文件是不会打包到我们的apk文件中的,所以还可以减小了apk文件的体积。
同理得出非系统包就一定要放在libs下,否则程序运行的时候就会报找不到包的错误。

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

对这篇文章“Android中的隐藏API和Internal包的使用之获取应用电量排行”(原文地址:http://blog.csdn.net/jiangwei0910410003/article/det...
  • piglite
  • piglite
  • 2015年09月02日 21:33
  • 612

android中如何使用隐藏的api和internal包

Android中的隐藏API和Internal包的使用之获取应用电量排行  今天老大安排一个任务叫我获取手机中应用耗电排行(时间是前天晚上7点到第二天早上10点),所以在网上各种搜索,没想到这种...
  • WTD654321
  • WTD654321
  • 2016年06月16日 12:52
  • 654

Android中的隐藏API和Internal包的使用之获取应用电量排行

今天老大安排一个任务叫我获取手机中应用耗电排行(时间是前天晚上7点到第二天早上10点),所以在网上各种搜索,没想到这种资料还是很多的,发现了一个主要的类:PowerProfile,但是可以的是,这个类...
  • qq_31387043
  • qq_31387043
  • 2016年07月06日 14:56
  • 208

Android中的隐藏API和Internal包的使用之获取应用电量排行

今天老大安排一个任务叫我获取手机中应用耗电排行(时间是前天晚上7点到第二天早上10点),所以在网上各种搜索,没想到这种资料还是很多的,发现了一个主要的类:PowerProfile,但是可以的是,这个类...
  • jiangwei0910410003
  • jiangwei0910410003
  • 2014年05月16日 17:55
  • 12407

android源代码分析一:使用内部(com.android.internal)和隐藏(@hide)API ——介绍

Android有两类API在SDK中不能使用。 第一类就是位于包com.android.internal的API,我将这些API称为内部API。第二类API就是用@hide标记的类和函数,虽然严...
  • wxlinwzl
  • wxlinwzl
  • 2014年06月10日 22:47
  • 7604

android使用隐藏api的方法(使用被@hide的api)

原文地址:http://blog.sina.com.cn/s/blog_5da93c8f0101e1yj.html 前言: 一开始需要说明的是,Google之所以要将一些API隐藏(指...
  • f2006116
  • f2006116
  • 2016年03月05日 19:31
  • 2181

android编译内置应用以及调用隐藏API(@hide)

Android系统内置有:Browser(浏览器)、Mms(彩信/短信)、Phone(电话)、Contacts(联系人)等众多的核心应用。 然而,在SDK开发环境(即Eclipse + ADT) 下...
  • xuewater
  • xuewater
  • 2014年08月13日 10:35
  • 2052

[Android] 利用java反射调用隐藏Api

Demo地址:http://download.csdn.net/detail/u011163883/5803387(免积分下载) 利用java反射调用隐藏Api,这个东西一般不具备应用的广泛性,请慎...
  • u011634756
  • u011634756
  • 2013年08月12日 14:29
  • 4569

cxf客户端代码调用cxf的webservice接口,报错:XJC,classnotfound,引入了tool.jar,却还是报classnotfound

cxf客户端代码调用cxf的webservice接口: Client client = clientFactory.createClient("http://XX.XX.XX.XX:8080/XX/X...
  • Ideality_hunter
  • Ideality_hunter
  • 2017年06月23日 10:51
  • 361

Android开发之调用系统隐藏API

Android中有些Api被隐藏了,比如开关机,重启,如果要在应用中调用,要么用反射,要么就是直接在Android源代码下编译。如果用Eclipse用IDE,尽管调用隐藏API的代码能顺利在Andro...
  • fanflame4444
  • fanflame4444
  • 2014年02月08日 17:12
  • 2242
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:隐藏API和Internal包的使用
举报原因:
原因补充:

(最多只允许输入30个字)