java - 对 Android 库使用提供的/compileOnly 依赖项

标签 java android gradle jar

对于一个项目,我有这种类型的结构:
--- app => my Android application | \- lib => my Android library
应用程序使用 lib 中的方法,但我想要一个不嵌入 lib 中的类的构建(因为它们也可用于自定义 AOSP 构建),这可以通过提供/compileOnly 依赖项指令来完成。问题是该指令不适用于由 Android 插件生成的 aar 库,仅适用于 jars。

我找到了一种使用此处找到的自定义 makeJar 任务来构建 jar 文件的方法:
Build library jar with Gradle

然后在应用程序的 build.gradle 中,我可以添加这样的依赖项:
dependencies { compileOnly fileTree(dir: '../lib/build/outputs/jar', include: ['*.jar']) ... }
这工作正常,但前提是 jar 已经由以前的构建生成,这意味着我必须启动 ./gradlew build两次让它工作。

我想问题在于,与常规依赖项不同(即 compileOnly project(':lib') ),评估 fileTree 依赖项时无需请求构建子项目,并且在第一次构建时,不会将 jar 文件添加到类路径中。

我试过像 preBuild.dependsOn(':lib:makeJar') 这样的东西但没有成功,因为它是在评估后执行的。

我无法将 lib 切换到 Java 插件,因为它是 Android 特定代码,我需要为其他项目构建 aar,那么有没有更好的方法来使用 compileOnly 指令和这个模块?或者可能是一种在评估应用程序 build.gradle 之前强制构建库的方法?

最佳答案

将此添加到您的 build.gradle(app)

compile fileTree(include: ['*.jar'], dir: 'libs')

或者直接编译你的jar文件如下
compile files('libs/your_filename_in_libs_folder.jar')

关于java - 对 Android 库使用提供的/compileOnly 依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47944441/

相关文章:

java - 将 XML 键值映射转换为 JSON 对象

android - 了解自定义包的 XML 属性

java - APK 中复制的重复文件 - Android

Gradle:关于任务失败的自定义消息?

android - 在项目目录下找不到应用程序build.gradle文件

java - 在 XOM 中解析 XHTML 文档时出现 DTD 下载错误

java - Windows XP 上的 System.nanoTime()

java - GridView.setOnItemClickListener 触发整行

android - 应用程序在没有 stackTrace 的情况下旋转时崩溃

java - 在 while 循环内使用 post 处理程序