我在设置多模块项目时遇到了一系列 gradle 问题。我正在尝试制作一个包含 SDK 的 AAR,供我们的客户使用。我还在尝试生成一个示例应用程序,该应用程序将该 AAR 用作内部开发平台,并作为我们的客户如何使用该平台的示例。
设置.gradle:
include :sdk
include :SampleApplication
构建.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')
}
...
示例应用程序/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任务上,我终于能够让它工作,但我仍然对解决方案不是特别满意,因为:
意味着我最终将 .aar 放入 git,这不是
特别好主意。
SampleApplication/build.gradle 文件,因为它是为
客户使用。
一般来说,有没有更好的方法来处理这个问题?
最佳答案
我在添加依赖项到 compileReleaseSources 任务和 described here 时也遇到了问题。一个对我有用的解决方案。总之,需要在tasks.whenTaskAdded闭包中添加依赖。
关于android - 如何构建 AAR 和示例应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30016984/