使用内部(com.android.internal)和隐藏(@hide)API[第4部分,定制ADT]
转载时请注明出处和作者联系方式: https://mogoweb.net(betway官网首页) betway官网首页@gmail.com
本文翻译自https://devmaze.wordpress.com/2011/01/18/using-com-android-internal-part-4-customizing-adt/
在前面的文章中,我讲述了如何创建定制的original-android.jar和创建定制的android平台以使用original-android.jar。这仅仅能够使用隐藏API,还为内部API留有一个障碍: ADT。ADT定义了一个规则禁止使用来自com.android.internal的类。
有几种方法可以越过该限制规则:
1)完整的ADT源代码可以下载,可以移除或者修改代码,编译然后安装新的定制版本ADT。不好的地方是您必须配置一台64位linux系统,下载源码,编译之。这会花费一些时间,当新版本的ADT出来后,您又需要重新来过。
2)另外一种方式是修改ADT的字节码,只需替换"com/android/inter/**”字符串为其它的字符串,比如"com/android/internax”。
第二种方法可通过脚本自动化完成,也不需要访问源码,在windows下也能工作,这也是我在本文中说明第二种方式的原因。
修改ADT字节码
进入到您的eclipse的plugins文件夹,找出名为com.android.ide.eclipse.adt_*.jar的文件。做一个备份(以防修改错了),另外复制一份改文件到一个单独的"experimental”文件夹,在那里进行字节码修改。
修改*.jar为*.zip,解压文件到一个单独的文件夹,下面就是我所得到的:
现在进入到com/android/ide/eclipse/adt/internal/project子目录,找出AndroidClasspathContainerInitializer.class文件。
该文件包含了字符串"com/android/internal/**”,下一步就是替换该字符串为其它的字符串,如"com/android/internax/**”。改变字符串的长度可能没什么问题,但最好只替换一个字母,保持长度相同。
我是用notepad++进行替换的,因为它支持非打印字符,而且在编辑打印字符时不会修改非打印字符。
修改完后,保存文件,zip压缩文件夹,文件名和原始版本一样。以我的为例:com.android.ide.eclipse.adt_8.0.1.v201012062107-82219.zip,然后重命名为*.jar。
注意:请确保您正确的压缩了文件,可以比较一下修改的zip和原始的zip的内部目录结构。
现在删除eclipse plugins文件夹下的原始ADT*.jar文件,复制经过修改的版本,重启eclipse。
如果没有问题,则会如下图所示:
步骤总结:
- 停止eclipse
- 从eclipse的plugins文件夹取得adt插件的jar文件。
- 重命名.jar为.zip,然后解压到一个单独的目录。
- 找到com/android/ide/eclipse/adt/internal/project/AndroidClasspathContainerInitializer.class
- 将字符串"com/android/internal/**”替换为"com/android/internax/**”
- zip压缩所有文件
- 重命名.zip为.jar
- 用修改版本替换eclipse plugins文件夹下的原始adt jar文件
- 启动eclipse。
转载时请注明出处和作者联系方式: 使用内部(com.android.internal)和隐藏(@hide)API[第4部分,定制ADT](betway官网首页) betway官网首页@gmail.com
谢谢博主哈,我先尝试一下,就是用 dex2jar会报错,产生不了完整的源文件。
博主你好、为什么我按照这个做下来、结果出现了the import android can not be resolved
@zw
具体什么错误?dex2jar只是将dex格式的包转为jar格式,不会产生源文件呀
@jacson14
怎么操作的呢?
com.android.ide.eclipse.adt_*.jar类似这样的文件,我在eclipseplugins目录下,没有发现
没有安装ADT插件,或者找找类似文件名的