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

时间:2015-06-17 14:16:30

标签: android-studio gradle aar

在我的Android Studio项目中,我有两个子项目/模块: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.gradle LibraryProject1我有:

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"文件夹未包含在存储库中,导致编译失败。

如果我从App1 build.gradle添加了存储库,那么它有效,但我不想这样做,它是LibraryProject1需要AAR文件,而不是App1

我该怎么做?

2 个答案:

答案 0 :(得分:3)

好吧,我找到了一种方法,但由于它非常“hacky”,我会将问题保持开放,以防任何人提出更好的“适当”解决方案。

基本上问题是flatDir存储库在编译时被忽略,如果包含在LibraryProject1的build.gradle脚本中,那么我所做的就是使用App1的构建.gradle在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仍然无法识别类型。

答案 1 :(得分:0)

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