当前位置: 代码迷 >> Android >> 自定义android.jar(包孕internel,hide)
  详细解决方案

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

热度:120   发布时间:2016-05-01 19:37:42.0
自定义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的使用限制

?

(这一步我验证会导致Unsupported major.minor version 8241.8224的错误,在尝试之前请先备份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文件

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

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。并确认你能看到新的平台。

?

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


  相关解决方案