对于一个项目,我有这种类型的结构:--- 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/