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

Mas*_*r_T 5 gradle android-studio aar

在我的Android Studio项目中,我有两个子项目/模块:Android应用程序(App1)和Android库项目(LibraryProject1).App1取决于LibraryProject1.到现在为止还挺好.

但是,LibraryProject1反过来,需要导入AAR库才能正常工作.

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

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

如何使用新的Gradle Android Build System手动包含外部aar包

所以基本上在我的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'
}
Run Code Online (Sandbox Code Playgroud)

显然,我将dependency.aar文件放在LibraryProject1的libs目录中

但是,这不起作用.似乎添加的存储库LibraryProject1完全被忽略,并且本地"libs"文件夹不包含在存储库中,导致编译失败.

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

我怎样才能做到这一点??

Mas*_*r_T 4

好吧,我找到了一种方法,但由于它非常“hacky”,我将保留这个问题,以防有人提出更好的“正确”解决方案。

基本上问题是,flatDir如果包含在 的 build.gradle 脚本中,则在编译时会忽略存储库,LibraryProject1所以我所做的是使用 的App1build.gradle “注入” 中的 flatDir 存储库LibraryProject1。像这样的东西:

//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
}
Run Code Online (Sandbox Code Playgroud)

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

//LibraryProject1 build.gradle
repositories {
    flatDir {
        dirs './libs'
    }
}
Run Code Online (Sandbox Code Playgroud)

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