首页 > Android浏览器 > 使用内部(com.android.internal)和隐藏(@hide)API[第4部分,定制ADT]

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

2011年7月6日 发表评论 阅读评论

转载时请注明出处和作者联系方式: http://mogoweb.net mogoweb@gmail.com

本文翻译自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的类。

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

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。

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

步骤总结:

  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。

转载时请注明出处和作者联系方式: 使用内部(com.android.internal)和隐藏(@hide)API[第4部分,定制ADT] mogoweb@gmail.com

分类: Android浏览器 标签:
  1. zw
    2011年8月30日08:45 | #1

    谢谢博主哈,我先尝试一下,就是用 dex2jar会报错,产生不了完整的源文件。

  2. jacson14
    2011年9月5日15:47 | #2

    博主你好、为什么我按照这个做下来、结果出现了the import android can not be resolved

  3. alex
    2011年9月8日07:41 | #3

    @zw
    具体什么错误?dex2jar只是将dex格式的包转为jar格式,不会产生源文件呀

  4. alex
    2011年9月8日07:42 | #4

    @jacson14
    怎么操作的呢?

  5. 匿名
    2012年4月23日15:32 | #5

    com.android.ide.eclipse.adt_*.jar类似这样的文件,我在eclipseplugins目录下,没有发现

  6. alex
    2012年4月24日16:48 | #6

    匿名 :
    com.android.ide.eclipse.adt_*.jar类似这样的文件,我在eclipseplugins目录下,没有发现

    没有安装ADT插件,或者找找类似文件名的

  1. 本文目前尚无任何 trackbacks 和 pingbacks.