一个简单的问题,但我意识到我不确定这个问题的答案....
如果我正在使用名为
的库包创建一个Android应用程序com.example.one
然后我创建另一个应用程序并包含另一个名为
的包com.example.one
有一个稍微重构的类,这会导致任何一个应用程序出现任何问题吗?
我问的原因是最近我遇到了一些谷歌源代码的问题,这是因为设备制造商在我的apk中使用的自定义操作系统中包含了相同的库,而且它不是快乐! (或者我被告知)
如果有人可以在这里填写我,因为我很难理解这里非常有用的东西:)
thankx
编辑: Android和Java软件包名称之间差异的良好链接http://blog.javia.org/android-package-name/
答案 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
这消除了混乱和两个包之间的干扰。