自定义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。并确认你能看到新的平台。
最后,享受便捷的开发吧。