当前位置: 代码迷 >> Android >> 应用内部(com.android.internal)和隐藏(@hide)API[第4部分,定制ADT]
  详细解决方案

应用内部(com.android.internal)和隐藏(@hide)API[第4部分,定制ADT]

热度:74   发布时间:2016-05-01 19:18:26.0
使用内部(com.android.internal)和隐藏(@hide)API[第4部分,定制ADT]

在前面的文章中,我讲述了如何创建定制的original-android.jar和创建定制的android平台以使用original-android.jar。这仅仅能够使用隐藏API,还为内部API留有一个障碍: ADT。ADT定义了一个规则禁止使用来自com.android.internal的类。

image_thumb30_thumb

?

有几种方法可以越过该限制规则:

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,解压文件到一个单独的文件夹,下面就是我所得到的:

image11

现在进入到com/android/ide/eclipse/adt/internal/project子目录,找出AndroidClasspathContainerInitializer.class文件。

image12

该文件包含了字符串"com/android/internal/**”,下一步就是替换该字符串为其它的字符串,如"com/android/internax/**”。改变字符串的长度可能没什么问题,但最好只替换一个字母,保持长度相同。

我是用notepad++进行替换的,因为它支持非打印字符,而且在编辑打印字符时不会修改非打印字符。

image13

修改完后,保存文件,zip压缩文件夹,文件名和原始版本一样。以我的为例:com.android.ide.eclipse.adt_8.0.1.v201012062107-82219.zip,然后重命名为*.jar。

注意:请确保您正确的压缩了文件,可以比较一下修改的zip和原始的zip的内部目录结构。

现在删除eclipse plugins文件夹下的原始ADT*.jar文件,复制经过修改的版本,重启eclipse。

如果没有问题,则会如下图所示:

image14

步骤总结:

  1. 停止eclipse
  2. 从eclipse的plugins文件夹取得adt插件的jar文件。
  3. 重命名.jar为.zip,然后解压到一个单独的目录。
  4. 找到com/android/ide/eclipse/adt/internal/project/AndroidClasspathContainerInitializer.class
  5. 将字符串"com/android/internal/**”替换为"com/android/internax/**”
  6. zip压缩所有文件
  7. 重命名.zip为.jar
  8. 用修改版本替换eclipse plugins文件夹下的原始adt jar文件
  9. 启动eclipse。

  相关解决方案