【问题标题】:How to Build AAR and Sample Application如何构建 AAR 和示例应用程序
【发布时间】:2015-05-03 17:24:00
【问题描述】:

我在设置多模块项目时遇到了一系列 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 任务上来实现它,但我仍然对解决方案不是特别满意,因为:

  1. 它要求我在 gradle 运行之前将 aar 安装到位,这 意味着我最终将 .aar 放入 git,这不是 特别好主意。

  2. 我不希望 AAR 生成泄漏到 SampleApplication/build.gradle 文件,因为它是为 客户使用情况。

一般来说有没有更好的方法来处理这个问题?

【问题讨论】:

  • 我不知道“更好”,但这是我为我的 CWAC 库所做的,它们具有类似的库和演示设置。我有 debug 演示应用程序构建只是指向库模块(例如,debugCompile project(':lib'))。我使用 maven 插件将我的 AAR 发布到我的 Maven 存储库(在我的情况下是一个附加脚本,因为我的存储库位于 Amazon S3 上)。然后,我的演示应用程序使用 releaseCompile 从存储库中提取工件,以确认我可以针对 AAR 进行构建。我的方法可能需要一些修饰,但它可以完成工作。

标签: android android-studio gradle aar


【解决方案1】:

我也有问题添加依赖项到 compileReleaseSources 任务和described here 一个对我有用的解决方案。总之,需要在tasks.whenTaskAdded闭包中添加依赖。

【讨论】:

    猜你喜欢
    • 2021-03-13
    • 2012-07-02
    • 2015-11-07
    • 2016-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多