无法解析从本地源模块构建的本地AAR

时间:2018-11-16 15:02:42

标签: android gradle android-gradle

我有一个库模块,希望将其作为AAR依赖项包含在示例应用程序中:

:my-library
:sample-app

因此,在sample/build.gradle中,我执行以下操作:

repositories {
    flatDir {
        dirs "../my-library/build/outputs/aar" 
    }
}

// I have different flavors that specify whether to use the source or binary (aar) dependency

flavorDimensions "SOURCE_OR_BINARY"
    productFlavors {
        source { }
        binary { }
}

dependencies {
    sourceImplementation project(':my-library')
    binaryImplementation(name: 'my-library-release', ext: 'aar') // <-- this line fails with error
}

tasks.whenTaskAdded { task ->
    def taskName = task.name.toLowerCase()
    if (taskName.toLowerCase().contains("binary")) {
        // Prepare libs as binaries
        task.dependsOn ('my-library:assembleRelease')
    }
}

在命令行上与./gradlew一起使用时效果很好,但是Android Studio在gradle同步期间报告了Failed to resolve: :my-library-release:。如果我在命令行上执行./gradlew assemble然后同步Android Studio,则AS Gradle同步成功。

问题与binaryImplementation(name: 'my-library-release', ext: 'aar')的时间有关。执行Gradle Sync时,aar尚不存在,因为尚未构建。

是否有更好的方法来避免Failed to resolve Android Studio Gradle同步错误?

4 个答案:

答案 0 :(得分:0)

您需要将此添加到您的应用程序主build.gradle。

    repositories {
          /...
          /...
         flatDir {
            dirs 'libs'
        }
    }

如果您将.aar文件放在lib文件夹中,则可以执行以下操作。

implementation files('libs/assembleRelease.aar')

答案 1 :(得分:0)

您可以尝试通过这种方式导入

文件->新模块->导入.Jar / .AAR包

答案 2 :(得分:0)

我建议您使用本地Maven存储库而不是flatDir。来自FileCollection和/或flatDir的依赖项不如来自“真实”存储库(例如maven / ivy)的依赖项功能齐全

例如:

repositories {
    maven {
        url file("${rootProject.projectDir}/mavenRepo") 
    } 
} 
dependencies {
    binaryImplementation "my-group:my-library:1.0@aar"
    ... 
} 

然后,您将使用maven repository directory layout存储工件。例如:

rootProject/mavenRepo/my-group/my-artifact/1.0/my-artifact-1.0.aar

答案 3 :(得分:0)

可以在此处找到答案-公开具有该AAR的配置,并在下游使用该配置

https://docs.gradle.org/current/userguide/cross_project_publications.html