【问题标题】:Android Studio: How to read classes from a jar file from a library?Android Studio:如何从库中的 jar 文件中读取类?
【发布时间】:2018-05-12 13:16:09
【问题描述】:

我有两个使用同一个库的项目。该库使用jar 文件作为依赖项,但是只有该库能够从jar 文件中读取类。这两个项目无权访问jar 文件中的类。

我尝试将jar文件分别添加到两个项目中,但是我得到一个构建错误,可能是因为现在它包含在项目级别和库级别导致冲突。

jar 文件是 YouTubeAndroidPlayerApi.jar

                /------------------- Project1 (can't read classes from jar)
Library(w/ jar)
                \------------------- Project2 (can't read classes from jar)

关于如何处理的任何想法?谢谢!

【问题讨论】:

  • “这两个项目无法访问 jar 文件中的类。”- 为什么不呢?如果它作为依赖项包含,则必须。
  • 你的 gradle 文件是什么样的?您在使用最新 gradle 的 Android Studio 3.0 吗?

标签: android android-studio jar


【解决方案1】:

如果您使用的是 gradle 4.1,请确保在将 .jar 导入您的库时使用 api 关键字。然后将其从您的其他项目中删除。

例如:api fileTree(dir: 'libs', include: ['*.jar'])

from the documentation:

当一个模块包含一个 api 依赖项时,它让 Gradle 知道该模块想要将该依赖项传递到其他模块,以便它们在运行时和编译时都可以使用它。此配置的行为就像 compile(现在已弃用),您通常应该只在库模块中使用它。这是因为,如果 api 依赖项更改了其外部 API,Gradle 会在编译时重新编译所有有权访问该依赖项的模块。因此,拥有大量 api 依赖项会显着增加构建时间。除非您想将依赖项的 API 公开给单独的测试模块,否则应用程序模块应改为使用实现依赖项。

【讨论】:

  • 乐于助人!迁移到 gradle 4.1 并不总是那么简单。
猜你喜欢
  • 2016-10-20
  • 2023-03-06
  • 1970-01-01
  • 1970-01-01
  • 2011-01-17
  • 1970-01-01
  • 2015-11-07
  • 1970-01-01
相关资源
最近更新 更多