[Android分享] 隐藏API和Internal包的使用
来源:互联网 发布:排除同款软件 编辑:程序博客网 时间:2024/04/30 01:34
本文介绍不通过反射和编译源码使用隐藏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文件的体积。
首先我们要明白为什么隐藏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下,否则程序运行的时候就会报找不到包的错误。
转自: http://www.eoeandroid.com/thread-254484-1-1.html
0 0
- [Android分享] 隐藏API和Internal包的使用
- android 使用隐藏API和Internal包
- Android中的隐藏API和Internal包的使用
- android中如何使用隐藏的api和internal包
- 隐藏API和Internal包的使用
- Android中的隐藏API和Internal包的使用之获取应用电量排行
- Android中的隐藏API和Internal包的使用之获取应用电量排行
- 使用内部(com.android.internal)和隐藏(@hide)API手记
- 使用内部(com.android.internal)和隐藏(@hide)API[第2部分,定制android.jar]
- 使用内部(com.android.internal)和隐藏(@hide)API[第3部分,定制android平台]
- android源代码分析一:使用内部(com.android.internal)和隐藏(@hide)API ——介绍
- android源代码分析一:使用内部(com.android.internal)和隐藏(@hide)API ——介绍
- 使用内部(com.android.internal)和隐藏(@hide)API ——[第三部分 定制android平台]
- 使用内部(com.android.internal)和隐藏(@hide)API[第2部分,定制android.jar]
- 定制android.jar-[使用内部(com.android.internal)和隐藏(@hide)API]
- 使用内部(com.android.internal)和隐藏(@hide)API[第1部分,介绍]
- 使用内部(com.android.internal)和隐藏(@hide)API[第4部分,定制ADT]
- 使用内部(com.android.internal)和隐藏(@hide)API ——[第四部分 定制ADT]
- jni的使用
- 开发中的小陷阱
- 连接mysql报 2002 (HY000) 错误
- 行锁定防止超卖
- 构建高可用高性能的gpfs集群
- [Android分享] 隐藏API和Internal包的使用
- 作业 2
- 用Trie树统计以给定字符串为前缀的单词个数
- 浅谈JAVA中的日志文件
- 多位数乘两位数乘法
- c# 委托学习文档
- javascript里面的object详解
- 10个数
- AYITACM2016省赛第一周(深搜+队列) A - 连连看