Java包名称和冲突

时间:2010-12-02 14:02:12

标签: java android

一个简单的问题,但我意识到我不确定这个问题的答案....

如果我正在使用名为

的库包创建一个Android应用程序
com.example.one

然后我创建另一个应用程序并包含另一个名为

的包
com.example.one

有一个稍微重构的类,这会导致任何一个应用程序出现任何问题吗?

我问的原因是最近我遇到了一些谷歌源代码的问题,这是因为设备制造商在我的apk中使用的自定义操作系统中包含了相同的库,而且它不是快乐! (或者我被告知)

如果有人可以在这里填写我,因为我很难理解这里非常有用的东西:)

thankx

编辑: Android和Java软件包名称之间差异的良好链接http://blog.javia.org/android-package-name/

4 个答案:

答案 0 :(得分:4)

类加载器无法加载同一个类的两个版本。它只选一个。但是哪一个被选中是未定义的。是的 - 这会引起麻烦。

某些平台(java-ee)可以选择为这些情况指定jar优先级。我不知道android。

更新:如果我的初步理解不正确,即你在类路径上没有两次相同的jar(库),而是使用不同版本的jar启动2个独立的应用程序 - 那么它们不会干扰彼此(因此没有问题)

答案 1 :(得分:3)

是的,这可能会导致问题,但前提是您的包中存在冲突的类名。

这似乎不是您的应用程序的问题,因为您有两个应用程序和两个库(请参阅LordT的回答)

答案 2 :(得分:3)

实际上,在两个单独的Android应用程序的情况下,它不应该导致问题。 Android应用程序在Sandboxes中运行,即应用程序A的类加载器看不到任何类别的应用程序B,反之亦然。 对于系统范围的库来说,这显然是不同的。它们可以由类加载器访问(当然),如果你的应用程序中有相同的类,将会导致麻烦。

答案 3 :(得分:0)

任何简单的解决方法都是在包中包含app / library名称。例如:

com.app1.example.one
com.app2.example.one

这消除了混乱和两个包之间的干扰。