【问题标题】:I added *.aar to my project ,when I run it the project runs well but I get error when starting activity , how to solve it?我在我的项目中添加了*.aar,当我运行它时,项目运行良好,但在启动活动时出现错误,如何解决?
【发布时间】:2019-06-02 07:29:29
【问题描述】:

aar 作为一个项目运行良好,然后我将其转换为库模块并将其添加到一个简单的项目中以测试它是否正常工作

错误:

"java.lang.NoClassDefFoundError: 解析失败: Lcom/google/gson/Gson;"

我已经将Gson 添加到 aar 中。但是在启动活动时它给了我这个错误(在 aar 内)

如何解决?

【问题讨论】:

  • 你为什么要在你的项目中添加一个 aar 文件?
  • 要先测试这个 aar,我想把它作为库提供给某人
  • 你是如何将 Gson 添加到 aar 中的?

标签: android aar


【解决方案1】:

使用这个依赖而不是 *.aar 文件。

实现'com.google.code.gson:gson:2.8.5'

【讨论】:

  • 我已经将它添加到我的 *.aar 我不相信它应该这样工作,但我会测试它让你知道
  • 删除你的 *.aar 文件,只使用这个依赖就可以了。
  • 看起来aar是一个依赖Gson的自定义库。
  • @EugenPechanec - 我将它添加到 (library) project 的 gradle 并且它在那里没有问题 - 通过 (library) project - 我的意思是我转换为 aar 的项目
  • @EugenPechanec - aar 是一个有 gradle 的项目,我在项目的 gradle 中添加了它,然后项目工作正常,我将模块项目转换为模块库(很容易),所以 Gson(实现。 ..) 已经在那里了
【解决方案2】:

aar 作为一个项目运行良好,然后我将其转换为库模块

AAR 本身不包含任何依赖项。它甚至没有指定依赖项。依赖项在单独的 POM 文件中定义。

如果您手动包含 AAR,您还需要在您自己的模块中手动重新声明其依赖项。 否则不会添加依赖项,类将丢失,您将获得运行时错误。

当您定义对 Maven 工件(如 com.xxx:yyy:1.2.3)的依赖项时,Gradle 会下载 JAR/AAR 以及 POM 文件,这反过来又允许 Gradle 下载传递依赖项

【讨论】:

  • thx 我使用 api 而不是实现 aar lib gradle 然后在我的 testProject 中再次测试 aar 但是当我添加“实现'com.google.code.gson:gson:2.8.5'时仍然出现同样的错误" 来测试项目的 gradle 它工作了 - 但它看起来不太好
  • 您的应用程序模块是否依赖于库模块 (implementation project(':library-module-name')) 或者您是否正在分解 AAR 文件并依赖于它?第一种方法会自动将 Gson 打包到您的 apk 中。但使用原始 AAR 不会自动处理依赖关系。
  • 您可以提出您的应用程序如何依赖 lib 的问题,以便我做出更好的回答。
  • @EugenPechanec 这有点老了,但我在图书馆开发过程中遇到了同样的问题。所以你基本上说的是,如果我使用 implementation fileTree(dir: "libs", includes: ["*.aar"]) 手动将 aar 文件导入到测试项目中,那么库项目中的所有依赖项都可以不要添加到测试项目中,我必须手动添加它们。并且只有类似 maven 的存储库才能使用 pom xml 为我的库提供所有依赖项?
  • @AlonMinski 正确。 JAR 或 AAR 通常只包含一个没有依赖关系的库。在 Maven 存储库中,依赖项在单独的 POM 文件中指定,在使用 Maven 坐标 (group:module:version) 声明依赖项时首先下载并解析该文件。在构建您自己的库时,它的依赖项不会捆绑到生成的 JAR/AAR 中。
【解决方案3】:

您还必须将库 (aar) 的所有依赖项添加到应用程序的 build.gradle 中。库不包含它们的依赖项。

【讨论】:

  • AAR 不包括捆绑的依赖项,正确。库模块可以声明 implementationapi 依赖项,这些依赖项会放入使用该库模块的应用的生成 APK 中。
【解决方案4】:

解决方案是将“implementation 'com.google.code.gson:gson:2.8.5'”添加到测试项目中,这解决了我的问题,但我还是不喜欢它;)

【讨论】:

  • 我更新的答案应该解释你为什么需要这个。
猜你喜欢
  • 2018-08-16
  • 2015-11-12
  • 2019-09-23
  • 2021-01-13
  • 2021-03-12
  • 1970-01-01
  • 1970-01-01
  • 2022-11-25
  • 1970-01-01
相关资源
最近更新 更多