上午发布的文章《自行修改android.jar使其包含隐藏api》(点击阅读),按照文章所述替换了 android.jar 后,会发现依然无法使用
com.android.internal 包下的资源,这是由于 ADT 插件作了限制,如果您使用 Intellj IDEA
作为开发环境,那么可以路过这篇文章,IDEA 并不会对 internal 包作任何限制,本篇仅针对使用 eclipse + ADT
方式开发的工程师。
先讲一下原理,ADT 插件针对 internal 包的限制在 AndroidClasspathContaine rInitializer.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/AndroidClasspathContaine rInitializer.class
./adt_changer -n com/android/ide/eclipse/adt/internal/project/AndroidClasspathContaine rInitializer.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 插件针对 internal 包的限制在
该文件指出了要被过滤的包,即 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/AndroidClasspathContaine
./adt_changer -n com/android/ide/eclipse/adt/internal/project/AndroidClasspathContaine
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