【发布时间】:2014-03-14 05:46:31
【问题描述】:
我正在开发一个带有可插入 .jar 模块的 Android 应用程序。
我的问题是,当我加载两个不同的 .jar 文件时,第一个 .jar 文件中的类无法“看到”第二个 .jar 文件中的 (Class.forName()) 类,反之亦然。我使用 DexClassLoader 从主应用程序加载外部 .jar。
=== 这是一个示例情况 ===
我们有两个模块:
- First.jar(包含 FirstA 和 FirstB 类,打包在 classes.dex 中)
- Second.jar(带有 SecondA 类,同样在 classes.dex 中)
通过使用 DexClassLoader,我加载了 First.jar。一切正常。 然后再次使用 DexClassLoader,我加载 Second.jar,SecondA 无法使用 Class.forName()“看到”FirstA 或 FirstB。我得到 java.lang.ClassNotFoundException。当我使用 Class.forName() 从 SecondA 检查 FirstA 时,我没有设置类加载器参数。
=== 示例情况结束 ===
我在想,当一个类被加载到 dalvik/jvm 中时,它将在同一个 dalvik/jvm 中的所有其他类中可见/可访问。事实并非如此,还是我完全错了? 为了让 SecondA 能够看到 First.jar (Class.forName()) 中的类,我必须做什么?
欢迎任何我可以学习的建议或资源! 伙计们,我被困住了!
编辑:
- 所有模块都在运行时加载。
- 每个模块都由不同的 DexClassLoader 实例加载,因为我需要提供 .jar 文件的路径,并且我无法将所有模块打包到一个 jar 中。
【问题讨论】:
标签: java android jar classloader dalvik