使ADT支持internal包

2013-11-19 14:05阅读:
上午发布的文章《自行修改android.jar使其包含隐藏api》(点击阅读),按照文章所述替换了 android.jar 后,会发现依然无法使用 com.android.internal 包下的资源,这是由于 ADT 插件作了限制,如果您使用 Intellj IDEA 作为开发环境,那么可以路过这篇文章,IDEA 并不会对 internal 包作任何限制,本篇仅针对使用 eclipse + ADT 方式开发的工程师。
先讲一下原理,ADT 插件针对 internal 包的限制在 AndroidClasspathContainerInitializer.class 文件内,该文件位于 ADT 插件包的 com.android.ide.eclipse.adt.internal.project 空间内
该文件指出了要被过滤的包,即 com.android.internal,仅需要将该字符串替换即可正常使用 internal 包
同样的,我也写了一个脚本来完成这项工作
#!/bin/sh
ADT=$1
OUT=$2
cp $ADT adt.zip
unzip -o adt.zip com/android/ide/eclipse/adt/internal/project/AndroidClasspathContainerInitializer.class
./adt_changer -n com/android/ide/eclipse/adt/internal/project/AndroidClasspathContainerInitializer.class
zip -r adt.zip com/
mv adt.zip com.android.ide.eclipse.adt_patched.jar
mv com.android.ide.eclipse.adt_patched.jar $OUT
echo 'done'
将以上脚本保存为 patchadt.sh
并给予可执行权限,执行时,找到 ADT 插件包,将其路径作为输入参数即可
$ patchadt.sh ~/eclipse/plugins/com.android.ide.eclipse.adt_22.0.5.v201307292155--757759.jar ~/Desktop/
执行完毕后,即可以桌面上看到一个名为 com.android.ide.eclipse.adt_patched.jar 的文件,将该文件替换回 eclipse 插件目录即可,注意改名
此时再打开 eclipse,即会发现,com.android.internal 包可以正常访问了。
这段脚本中使用到的 adt_changer 这个程序是用来修改 class 文件的,需要自行编译
包括早上的文章中的脚本一起,所有的源码均已上传到github,地址如下
https://github.com/rarnu/root-tools/tree/master/tools