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

标签 android android-studio gradle aar

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

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

    最佳答案

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

    关于android - 如何构建 AAR 和示例应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30016984/

    相关文章:

    android - 无法使用 FileProvider 以编程方式将文件附加到电子邮件 Intent

    gradle - 使用 Android studio 构建项目失败

    android-studio - 如何将flutter项目迁移到androidx:任务 ':app:preDebugBuild'执行失败。 > Android依赖项'androidx.versionedparcelable

    java - Android Intent 安全

    android - 测试期间仍然要求提供信用卡 - 通过 Google Play 在 Android 应用程序中测试购买 IAP

    java - 用于检查未调用方法的注释

    android - 有没有办法可以从Linux终端下载Sdk命令行工具?

    Android Studio 和 Gradle

    gradle - 如何使用整个一个文件夹和另一文件夹的一部分作为gradle中的资源

    android - Kotlin位置离我的位置很远我该如何使其更加准确