如何构建AAR和示例应用程序

时间:2015-05-03 17:24:00

标签: android android-studio gradle aar

我在设置多模块项目时遇到了一系列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文件,因为它的目的 客户使用情况。

  3. 一般来说,是否有更好的方法来处理问题?

1 个答案:

答案 0 :(得分:0)

我在向compileReleaseSources任务添加依赖项时遇到了问题,described here这个解决方案对我有用。简而言之,需要在tasks.whenTaskAdded闭包中添加依赖项。