0

我在我的一个项目中使用 TagSoup 并对 HTMLSchema.java 进行了一些修改以处理嵌套列表标签。当我测试这些更改时,它们根本没有效果。我在 Java 独立应用程序中测试了相同的更改,它们按预期工作。

当我尝试调试应用程序时,我注意到它没有在调试器中显示正确的行号,所以我做了你在这种情况下通常会做的事情:重新构建项目,重新启动 IDE,重新启动 Android 设备和PC,创建一个新的Android项目,都无济于事。

我从一些类中删除了所有代码,应用程序仍然像以前一样运行,所以很明显,Android 使用的类与我在应用程序中部署的类不同。我做了一个 Android 测试项目,除了通常的 MainActivity、布局和可绘制对象之外,什么都没有,添加了 TagSoup 类和使用 TagSoup 解析的代码,但它仍然没有使用“我的”TagSoup 类。我用两个 4.4.2 Nexus 设备和一个运行 4.1.2 的 Note 2 对此进行了测试。

只有当我将包名从 org.ccil.cowan.tagsoup 重命名为其他名称(如 org.ccil.cowan.tagsoup2)时,它才使用随我的应用程序部署的类。

我的问题很简单:到底发生了什么?

4

1 回答 1

2

TagSoup 是 Android 本身的一部分。随框架提供的类的副本会自动加载到您的虚拟机中……即使它们不是 Android SDK 的一部分。你会在像 BouncyCastle 这样的库中看到同样的情况。

重构第三方库 - 使用jarjar或其他方式 - 允许 Android 版本和您的库版本共存。

于 2014-02-04T19:13:39.457 回答