自定义android.jar(包含internel,hide)

在Eclipse开发中,我们可能会需要引用android的hide或internals或自己添加到源码中的接口

所以公共api包无法满足我们的要求,为了方便开发。需要自定义android.jar,实质上就是把源码中的jar拖出来用,详细步骤如下。

在查阅了一些资料后,及验证后整理如下:

一、在源码中找到编译好的jar包。

地址如下:out\target\common\obj\JAVA_LIBRARIES\framework_intermediates\classes.jar

这个jar包, 这里面包含了framework中的包括hide和internal以及你自己添加的属性及方法

二、找到公共AndroidSDK下的jar包。

在你的AndroidSDK目录android-sdk-windows\platforms下找到对应以上源码版本下的android.jar

三、合并覆盖jar包。

(按照他人提供的资料,直接解压两个jar包,拷贝,然后重新打包的话,我打包的新的android.jar无法正常使用,原因未知)

解决方法如下:同时用rar打开两个jar包, 然后直接将上述的classes.jar里的东西全部拖到android.jar下,覆盖,然后直接打包。这样新的android.jar就可以正常使用了

四、取消ADT对internal的使用限制

(在尝试之前请先备份ADT jar)

这对Hidden API来说足够了。但对Internal API来说,仍然还有一个包袱:Eclipse的ADT插件。

它限制使用com.android.internal包中的任何类。

1) ADT源码可以下载。因此,删除/修改代码中的某些代码,从而编译出一个新的ADT是可以的。麻烦的是你需要搭建64位Linux系统,下载源码,编译等。它需要花费一些时间。当有新的ADT版本时,你需要重来一遍。

2) 另外的方法就是修改ADT的字节码。用一个类似于“com/android/internax/**”的字符串替换“com/android/internal/**”。

1. 关闭Eclipse

2. 从Eclipse的plugin文件夹中拷贝出ADT插件的jar文件

3. 重命名.jar -> .zip,然后解压至独立的文件夹

4. 找到com/android/ide/eclipse/adt/internal/project/AndroidClasspathContainerInitializer.class文件(用UE或其他支持十六进制编辑的工具打开,不要直接用记事本打开修改)

5. 用“com/android/internax/**”替换“com/android/internal/**”

(搜索2A 2A即**这两个字符然后把internal的l的16进制码6C改成78即x,然后添加进jar包即可。

要不然会导致Unsupported major.minor version 8241.8224的错误)

6. 压缩这个文件夹

7. 重命名 .zip -> .jar

8. 用修改后的jar替换原始的ADT jar文件

9. 启动Eclipse

五、创建自定义Android平台以方便随时切换工程引用的api版本

为了达到这样的灵活性,你需要创建一个新的自定义的Android平台。当不需要访问internal和hidden API时,你只需使用原有的Android平台。当你使用这些API时,你使用自定义的Android平台。

(假设当前操作源码为2.3.1)为了创建一个新的平台,我们需要拷贝android-9文件夹 -> android-9-internals。让我们做一些修正:

1. 删除其中的android.jar

2. 拷贝新的android.jar

3. 修改build.prop文件:

ro.build.version.sdk=9 -> ro.build.version.sdk=-9

ro.build.version.release=2.3 -> ro.build.version.release=2.3.extended

重启Eclipse。并确认你能看到新的平台。

最后,享受便捷的开发吧。

相关推荐