android - 我的项目没有拾取库模块 jar 文件夹中定义的类文件
问题描述
我已经添加了一个库File-> New ->Import Module
,该库添加成功,在这个导入的模块中添加了周围的8 jar
文件,但是在我的应用程序模块中我无法访问这些文件。
虽然我可以轻松访问库文件夹中可用的src
文件。
这些行被添加到库 gradle 文件中。
compile fileTree(dir: 'libs', include: '*.jar')
compile fileTree(dir: "$buildDir/native", include: 'native.jar')
构建.gradle(应用程序)
compile fileTree(dir: 'libs', include: '*.jar')
compile project(':myLibrary')
设置.gradle
include ':myLibrary'
如果我在一个新项目中执行这些步骤,我可以从我的 jar 文件中访问类app module
,但在我当前的项目中它们是不可访问的。
我也尝试删除android studio preference
, invalidate cache and restart
,但在这里似乎没有任何效果。
解决方案
在我当前的项目中,它们无法访问。
它们不应该是可访问的,因为这些依赖 jar 不是您的应用程序项目的一部分。
如果你想访问你的库模块所依赖的那些jar myLibrary
,你需要在你的app
项目中使用
compile fileTree(dir: '../myLibrary/libs', include: '*.jar')
compile fileTree(dir: "../myLibrary/native", include: 'native.jar')
并将您的myLibrary
设置更改为
provided fileTree(dir: 'libs', include: '*.jar')
provided fileTree(dir: "$buildDir/native", include: 'native.jar')
通过上述操作,您应该能够从您的应用程序模块访问您的 jar,并且不会有任何重复的类导致冲突。
也许将您的 Android Gradle 插件升级到 3.0+ 会更好。
有关 android gradle 插件版本的附加信息:
- https://stackoverflow.com/a/51392464/8034839
- https://developer.android.com/studio/build/dependencies
只需在此处引用关键解释,以获取有关provided
and的信息compileOnly
:
Gradle 仅将依赖项添加到编译类路径(也就是说,它不会添加到构建输出中)。当您创建 Android 模块并且在编译期间需要依赖项时,这很有用,但在运行时使其存在是可选的。
对于您的库模块,如果您不将它们打包到您的库.jar或.aar中,它本身实际上只需要在编译类路径中。在这种情况下,使用这个库的应用程序需要添加那些依赖于你的库模块的外部 jar,因为你的库模块没有打包它们(通过使用)。并且您的应用程序需要这些外部 jars 在运行时通过使用.compileOnly
compile
推荐阅读
- ruby-on-rails - 如何从 Rails 执行 shell 命令?
- javascript - React 压缩渲染,导致即使调用了 componentDidUpdate 也不更新组件
- swift - 如何在 Swift 中解开字符串以修复错误?
- api - OAuth中授权码的用途是什么
- ionic-framework - 离子滑块中的图像放大和缩小
- spring - Spring Kafka Listener 中保存的实体不会在事务测试中回滚
- javascript - 函数内部声明的数组是静态的?
- javascript - 使用 Javascript 变量作为 EJS 数组的索引 - NODEJS
- javascript - 无法访问 php 中发布的数据
- python - 如何让 python scapy 从命名的 fifo 中嗅探