使用内部(com.android.internal)和隐藏(@hide)API[第4部分,定制ADT]
2014-05-08 18:13
489 查看
本文翻译自http://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的类。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/07/6e2bcfbda829d046c3d5aa0c754cfb2d.png)
有几种方法可以越过该限制规则:
1)完整的ADT源代码可以下载,可以移除或者修改代码,编译然后安装新的定制版本ADT。不好的地方是您必须配置一台64位linux系统,下载源码,编译之。这会花费一些时间,当新版本的ADT出来后,您又需要重新来过。
2)另外一种方式是修改ADT的字节码,只需替换"com/android/inter/**”字符串为其它的字符串,比如"com/android/internax”。
第二种方法可通过脚本自动化完成,也不需要访问源码,在windows下也能工作,这也是我在本文中说明第二种方式的原因。
修改*.jar为*.zip,解压文件到一个单独的文件夹,下面就是我所得到的:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/07/9dad87ee76713be80cd2cba1dd82e332.png)
现在进入到com/android/ide/eclipse/adt/internal/project子目录,找出AndroidClasspathContainerInitializer.class文件。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/07/87bc8c96703d61800c822b6a6d4627d1.png)
该文件包含了字符串"com/android/internal/**”,下一步就是替换该字符串为其它的字符串,如"com/android/internax/**”。改变字符串的长度可能没什么问题,但最好只替换一个字母,保持长度相同。
我是用notepad++进行替换的,因为它支持非打印字符,而且在编辑打印字符时不会修改非打印字符。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/07/3a11b2241510db948cf93946f77484f4.png)
修改完后,保存文件,zip压缩文件夹,文件名和原始版本一样。以我的为例:com.android.ide.eclipse.adt_8.0.1.v201012062107-82219.zip,然后重命名为*.jar。
注意:请确保您正确的压缩了文件,可以比较一下修改的zip和原始的zip的内部目录结构。
现在删除eclipse plugins文件夹下的原始ADT*.jar文件,复制经过修改的版本,重启eclipse。
如果没有问题,则会如下图所示:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/07/0e8c4ce84769a175a13c68dfce82d699.png)
从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。
原文:http://mogoweb.net/archives/117
在前面的文章中,我讲述了如何创建定制的original-android.jar和创建定制的android平台以使用original-android.jar。这仅仅能够使用隐藏API,还为内部API留有一个障碍: ADT。ADT定义了一个规则禁止使用来自com.android.internal的类。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/07/6e2bcfbda829d046c3d5aa0c754cfb2d.png)
有几种方法可以越过该限制规则:
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,解压文件到一个单独的文件夹,下面就是我所得到的:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/07/9dad87ee76713be80cd2cba1dd82e332.png)
现在进入到com/android/ide/eclipse/adt/internal/project子目录,找出AndroidClasspathContainerInitializer.class文件。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/07/87bc8c96703d61800c822b6a6d4627d1.png)
该文件包含了字符串"com/android/internal/**”,下一步就是替换该字符串为其它的字符串,如"com/android/internax/**”。改变字符串的长度可能没什么问题,但最好只替换一个字母,保持长度相同。
我是用notepad++进行替换的,因为它支持非打印字符,而且在编辑打印字符时不会修改非打印字符。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/07/3a11b2241510db948cf93946f77484f4.png)
修改完后,保存文件,zip压缩文件夹,文件名和原始版本一样。以我的为例:com.android.ide.eclipse.adt_8.0.1.v201012062107-82219.zip,然后重命名为*.jar。
注意:请确保您正确的压缩了文件,可以比较一下修改的zip和原始的zip的内部目录结构。
现在删除eclipse plugins文件夹下的原始ADT*.jar文件,复制经过修改的版本,重启eclipse。
如果没有问题,则会如下图所示:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/07/0e8c4ce84769a175a13c68dfce82d699.png)
步骤总结:
停止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。
原文:http://mogoweb.net/archives/117
相关文章推荐
- 使用内部(com.android.internal)和隐藏(@hide)API[第4部分,定制ADT]
- 使用内部(com.android.internal)和隐藏(@hide)API ——[第四部分 定制ADT]
- 使用内部(com.android.internal)和隐藏(@hide)API[第2部分,定制android.jar]
- 使用内部(com.android.internal)和隐藏(@hide)API ——[第三部分 定制android平台]
- 使用内部(com.android.internal)和隐藏(@hide)API[第2部分,定制android.jar]
- 使用内部(com.android.internal)和隐藏(@hide)API[第3部分,定制android平台]
- 使用内部(com.android.internal)和隐藏(@hide)API[第3部分,定制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[第1部分,介绍]
- android源代码分析一:使用内部(com.android.internal)和隐藏(@hide)API ——介绍
- android源代码分析一:使用内部(com.android.internal)和隐藏(@hide)API ——介绍
- 使用内部(com.android.internal)和隐藏(@hide)API ——介绍
- 使用内部(com.android.internal)和隐藏(@hide)API手记
- 使用内部(com.android.internal)和隐藏(@hide)API手记
- 使用内部(com.android.internal)和隐藏(@hide)API手记
- Android 内部API (android.internal)和隐藏代码(@hide)概述
- Eclips 开发 apk 使用android内部(com.android.internal) API
- 使用internal(com.android.internal)和hidden(@hide)APIs – Part 2