Android Studio:包括来自库项目的 AAR 库

Android Studio: including AAR library from a library project

在我的 Android Studio 项目中,我有两个 subprojects/modules:一个 Android 应用程序(App1)和一个 Android 库项目(LibraryProject1). App1 取决于 LibraryProject1。到目前为止一切顺利。

但是,LibraryProject1又需要导入AAR库才能正常工作。

所以我的配置如下:
App1 包括 LibraryProject1
LibraryProject1 包括 dependency.aar

现在,要包括 dependecy.aar 我使用此处详述的方法:

How to manually include external aar package using new Gradle Android Build System

所以基本上在我的 build.gradleLibraryProject1 我有:

repositories {
    flatDir {
        dirs 'libs'
    }
}

dependencies {
    compile (name:'dependency', ext:'aar') //my AAR dependency
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:22.1.1'
}

显然,我把我的 dependency.aar 文件放在 LibraryProject1

的 libs 目录中

但是,这不起作用。似乎完全忽略了LibraryProject1添加的仓库,本地"libs"文件夹没有作为仓库包含,导致编译失败。

如果我从 App1build.gradle 添加存储库,它可以工作,但我不想这样做,是 LibraryProject1 需要 AAR 文件,而不是App1.

我该怎么做?

我遇到了同样的问题,我通过将所有依赖于 LibraryProject1/libs 中的 LibraryProject1 的库作为 .jar 来解决这个问题。 我认为 aar 库不能链接到另一个 aar 库。 希望对你有帮助, 最好的问候

好吧,我找到了一个方法,但是因为它非常 "hacky" 我会留下这个问题,以防万一有人提出更好的 "proper" 解决方案。

基本上问题是 flatDir 存储库在编译时被忽略,如果包含在 LibraryProject1 的 build.gradle 脚本中,所以我所做的是使用 App1 的 build.gradle 到 "inject" LibraryProject1 中的 flatDir 存储库。像这样:

//App1 build.gradle
dependencies {
    //get libraryproject1 Project object
    Project p = project(':libraryproject1')

    //inject repository
    repositories{
        flatDir {
            dirs p.projectDir.absolutePath + '/libs'
        }
    }

    //include libraryproject1
    compile p
}

这有效地允许 LibraryProject1 包含外部 AAR 库而无需 App1 包含它。这很hacky但它​​有效。请注意,您仍然需要输入:

//LibraryProject1 build.gradle
repositories {
    flatDir {
        dirs './libs'
    }
}

LibraryProject1 的 build.gradle 中,否则,即使项目本身可以正常编译,IDE 也无法识别 AAR 库中包含的类型。请注意,路径中的 ./ 似乎也很重要,没有它 IDE 仍然无法识别类型。