在eclipse中替换android.jar

时间:2013-12-02 06:22:06

标签: java android eclipse jar shared-libraries

我需要在android源代码(android.jar)中进行更改。

我知道我可以进行更改并编译一个新的android.jar文件。关于这一点,我也在SO上找到了一些链接。

但我想要做的是,为了让我的项目在eclipse上运行,而不是创建一个android.jar,我想单独添加framework.jar,common.jar,core.jar等,并删除来自eclipse中构建路径的android.jar库。

甚至可能。

我试过了,但它没有用。我将jar文件添加为系统用户库。我甚至将jar文件设置为在构建路径配置中导出。我的代码被编译,但它为模拟器提供了一个启动错误。

任何人都可以就此错误向我提供任何意见。

1 个答案:

答案 0 :(得分:3)

Afaik android.jar库只是一个骨架,是正在运行的Android系统上存在的android.jar库的模型。

如果你反编译它,我认为如果需要的话,大多数类中的方法只用throw UnsupportedOperationExceptionreturn null来实现。

这已经完成,因此编译/部署应用程序的速度更快,结果.apk占用的空间更少。

因此更改.jar中的源代码将毫无用处,因为它不会部署到设备/模拟器。

如果您有兴趣更改Android源代码,您应该检查documentation for the Android source code并从源代码构建整个操作系统。

编辑:

重新阅读有关将.jar添加为用户库的问题部分。

如果将android.jar部署为用户库(即不共享),则在尝试多次加载类(来自不同来源)时,应用程序将在运行时崩溃,因为类已存在于{ {1}}出现在设备上。

即。您将无法加载自己的android.jar实现,因为它会与启动应用程序时由Android初始化的Application类冲突。在启动应用程序时加载Application类之前,您的代码将不会运行,因此,您将无法“覆盖”该代码。

您可以查看this question了解更多信息(尤其是获得奖励的答案)。

还有this question的一些信息,我想在此添加,afaik,你在使用它时不能卸载一个类:如果你想使用自定义要加载系统类的类加载器,您必须停止使用您尝试使用的类的实例的应用程序的所有线程,保留有关类的现有实例和类的静态数据的信息,卸载Android系统类,加载自定义系统类,重新创建保留信息的所有实例(还恢复静态数据),然后恢复已停止的所有线程。此外,期望其他地方的事情也会中断,因为您不会覆盖的所有其他类/库可能依赖于您正在更改的代码。