java - .jar 库中的 Android .jar 库 - 嵌套依赖项

标签 java android dependencies

我最近问了一个非常相似的问题,但不确定如何措辞。在收到一些反馈并研究了一些可能的解决方案后,我现在再次提问,我认为这是对问题的更好解释。

我的 Android 应用程序使用我的库 (parentLib),这个库是从另一个库 (childLib) 引用方法构建的。因此,App 本身使用 parentLib(一个 .jar 库),而 parentLib 又使用 childLib(另一个 .jar 库)。

这里的问题是,当应用程序尝试使用任何涉及嵌套库 (childLib) 的内容时,它会收到一个 NoClassDefFoundError,这会导致应用程序崩溃。我认为这个问题是由于应用程序无法解析嵌套依赖造成的。

我不能真正使用 Android 库项目,因为我需要源代码尽可能混淆和难以理解。我也尝试过使用 Android Studio 创建这些库,遗憾的是没有收到更好的结果。

我的选择(我认为)是:

合并库

我可能会将 childLib 和 parentLib 合并到一个 .jar 库中,将它们分成不同的包。不过这会很困难,因为在实践中,我的预期应用程序大约有 6 个嵌套库。

坚持客户使用多个库

与其对客户说“这里有一个简单的库 (parentLib) 供您使用”,我可以说“这里有 7 个不同的库供您导入(parentLib、childLib 等),否则什么都不会工作”。不完全专业!

其他选项

我欢迎任何人提出任何其他建议!

提前致谢。

最佳答案

NoClassDefFoundError 表示该类在编译期间存在,但在尝试执行时在类路径中不可用。

因此,您需要告诉 gradle 编译这些库并将它们打包到 apk 中。

将您需要的所有库 jar 复制到项目根目录中的 libs 文件夹中。然后,编辑 gradle.build 文件并添加以下内容:

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
}

这会将所有必需的库添加到您的 apk 中。这样,当您执行需要它们的代码时,您需要的类将出现在类路径中。

关于java - .jar 库中的 Android .jar 库 - 嵌套依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24054102/

相关文章:

java - 如何在 Java Swing 中使用鼠标平移图像

Android - 如何检索 SQL 格式的日期时间而不考虑电话日历设置(奇怪的字符问题)

android - 2.2 横向模式下不显示软键盘

c# - 方法依赖 - 最佳实践?

scala - org.flywaydb#flyway-sbt; 3.1的SBT ResolveException;

java - 关于框架(概念)

java - 使用 Delphi 中的 Java 函数/类

java - 带有自定义 CacheStoreAdapter 的 Apache Ignite 可用性问题

Assets 文件夹中的Android外部数据库

java - 使用 maven 依赖项从 ant 运行项目 java 类