在前一篇文章中,我解释了为什么不通过反射机制,不太容易使用com.android.internal[email protected],[email protected]类,这样在编译时刻就没有办法引用这些类了。 本文将说明如何恢复原始的android.jar,这样就可以使用内部API和隐藏API了,就如同使用公开API一样。 我们需要修改android.jar,让它包含所有原始的类文件(包括内部和隐藏API)。有两种方法: 1)Android是一个开源项目。我们可以下载源代码,定制构建系统,不从android.jar中移除内部和隐藏类。这种方法比较难。 2)每个模拟器或者真实设备都有一个与android.jar等价的包用于运行时。我们可以取得此jar,解出原始的.class文件,然后复制到android.jar。 我倾向于第二种方法,它比较容易,不需要linux机器(如果您是在windows下工作),也不需要编译所有的源码、定制构建系统,等等。 您可以用命令行(adb pull)或者DDMS(从eclipse,或者android 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,然后unzip到一个单独的目录,您应该可以得到如下所示的内容: ? 文件classes.dex就是我们要的。 首先我们需要将.dex文件转化为.jar文件格式。这可以用一个小工具dex2jar做到,您仅需要运行: dex2jar classes.dex 当转化完成后,会得到classes.dex.dex2jar.jar文件,将其命名为framework-class.zip。使用zip文件查看器,进到framework-class.zip/com/android/internal: 哇,我们得到了内部API和隐藏API的.class文件(虽然截图只确认了内部API)。 Android SDK中的android.jar位于ANDROID_SDK/platforms/android-X/android.jar(这里X代表API Level,比如X==9)。 复制android.jar为custom-android.zip。unzip到custom-android文件夹。从framework-class.zip中复制所有.class文件到custom-android文件夹(您需要替换所有已有的.class文件)。 然后zip文件夹custom-android为original-android.zip,重命名为original-android.jar。 完成。 我们恢复了原始的android.jar,包含内部API和隐藏API的.class文件。这只是第一步,下一步是创建定制的平台,使用未裁减版本的android.jar,然后加入到Android SDK platforms目录。如何获得原始(未裁减)的android.jar?
从设备获取framework.jar
创建framework-classes.zip
创建original-android.jar
步骤总结
结论
详细解决方案
运用内部(com.android.internal)和隐藏(@hide)API[第2部分,定制android.jar]
热度:79 发布时间:2016-05-01 19:18:21.0
相关解决方案
- The server encountered an internal error () that prevented it from fulfilling th解决方案
- 'Update Progress' has encountered a problem An internal error has occurred解决方案
- 大家帮帮忙呀The server encountered an internal error () that prevented it解决方法
- SOS-(奇怪现象)服务器暂不可用500 internal server error,该怎么解决
- WEBstruts The server encountered an internal error () that prevented it fr解决思路
- 'Update Progress' has encountered a problem An internal error has occurred解决方案
- android 读取byte[]中的元素解决方案
- android 标题栏兑现方式
- android 中Activity向BroadcastReceiver发送数据,该怎么解决
- Android 4.0 为什么模拟器老是提示小弟我谷歌拼音输入法已停止
- android:getSharedPreferences() 这是哪个类的方法解决思路
- android 怎么判断一个程序是否联网
- android 大量数据按周分组,该如何解决
- android RadioButton如何设置默认选中
- ksoap2-android-这个包,连接webService怎么设置超时
- android 怎么重新设置锚点
- android UI界面设计解决方案
- android 图片对象获取的有关问题
- android 怎么调用淘宝支付宝接口
- Android 沿袭InputMethodService自定义输入法
- android 关于服务连接的疑义
- android 两个activity如何通信
- Error 500-Internal Server Error 如何解决
- android 怎么实现对view的放大和缩小
- android 教程解决方法
- android ID,该如何处理
- 准备复习2-3个月,看java+android,请问有经验者,怎么看效果最好》
- android UI线程与AsyncTask的有关问题
- Error 500--Internal Server Error
- Error 500-Internal Server Error