我在设置多模块项目时遇到了一系列gradle问题。我正在尝试制作一个包含SDK供客户使用的AAR。我还试图生成一个示例应用程序,该应用程序将AAR用作内部开发平台,并作为客户如何使用该平台的示例。
settings.gradle:
include :sdk
include :SampleApplication
的build.gradle:
...
// copy the AAR produced by the SDK into the SampleApplication
task import_aar(type: Copy) {
dependsOn ":sdk:build"
from(new File(project(':sdk').getBuildDir(), 'outputs/aar')) {
include '*-release.aar'
rename '(.*)-release.aar', '$1-v1.0.0.aar'
}
into new File(project(':SampleApplication').projectDir, 'aars')
}
...
SampleApplication /的build.gradle:
...
repositories {
...
flatDir {
dirs 'aars'
}
}
...
dependencies {
...
// This causes gradle to fail if the AAR hasn't been copied yet
compile 'com.moxiesoft.netagent:moxieMobileSDK:+@aar'
compile project(':moxieMobileSDK')
...
}
因此,我现在遇到的最大问题是让import_aar
任务在compileDebug/ReleaseSources
任务之前运行。我已经尝试将明确的依赖项添加到编译任务中,但我显然找不到正确的方法。
我已尝试将其放入SampleApplication / settings.gradle:
tasks['compileReleaseSources'].dependsOn(':import_aar')
但gradle失败,因为没有compileReleaseSources
任务,即使gradle:SampleApplication:tasks显示一个。
我也尝试在settings.gradle中添加类似的东西,但它也失败了,错误是任务compileReleaseSources不存在。
我把它放在SampleApplication / settings.gradle:
中确实取得了有限的成功tasks['build'].dependsOn(':import_aar')
但如果我使用“gradle build”,那只会产生正确的影响,如果我正在调试或从Android Studio运行,就不会发生这种情况。
我终于能够通过将dependsOn放在preBuild任务上来实现这一点,但我对解决方案仍然不是特别满意,因为:
它要求我在gradle运行之前将aar放在适当的位置 意思是我把.aar放到git中,这不是一个 特别好的主意。
我宁愿没有AAR一代泄漏到 SampleApplication / build.gradle文件,因为它的目的 客户使用情况。
一般来说,是否有更好的方法来处理问题?
答案 0 :(得分:0)
我在向compileReleaseSources任务添加依赖项时遇到了问题,described here这个解决方案对我有用。简而言之,需要在tasks.whenTaskAdded闭包中添加依赖项。