Android Studio:从库项目中包含AAR库

5
在我的Android Studio项目中,我有两个子项目/模块:一个Android应用程序(App1)和一个Android库项目(LibraryProject1)。App1依赖于LibraryProject1。到目前为止还不错。
然而,LibraryProject1反过来需要导入一个AAR库才能正常工作。
因此,我的配置如下:
App1包含LibraryProject1
LibraryProject1包含dependency.aar 现在,为了包含dependecy.aar,我使用了这里详细介绍的方法: 如何使用新的Gradle Android构建系统手动包含外部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'
}

显然,我将我的dependency.aar文件放在LibraryProject1的libs目录中。
然而,这并没有起作用。似乎由LibraryProject1添加的存储库完全被忽略了,本地的“libs”文件夹未包含在存储库中,导致编译失败。
如果我从App1的build.gradle中添加存储库,它可以工作,但我不想这样做,需要AAR文件的是LibraryProject1,而不是App1。
我该怎么办?

1
我认为这提供了更好的选择。https://dev59.com/mY7da4cB1Zd3GeqP-DQD?rq=1 - ChillingVan
2个回答

4

我找到了一种方法,但是由于它非常“hacky”,所以我会保留这个问题的开放状态,以防有人提出更好、更“正式”的解决方案。

基本上问题是,如果在LibraryProject1的build.gradle脚本中包含flatDir存储库,则在编译时会忽略该存储库,因此我使用App1的build.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仍然无法识别这些类型。


我也遇到了同样的问题,但由于某些原因,我必须创建我的库项目的AAR文件。我该如何将这些文件添加到我的lib项目AAR中? - Vikasdeep Singh
1
如果您正在使用Gradle 3.0.0或更高版本,则此简单的Gradle设置适用于我:https://dev59.com/AF4b5IYBdhLWcg3wdxnG#50139545 - user1506104

0

我曾经遇到过同样的问题,后来我通过将所有依赖于LibraryProject1的库放在LibraryProject1/libs目录下作为一个.jar文件解决了这个问题。 我认为aar库不能链接到另一个aar库。 希望这能帮到你, 最好的祝福


不幸的是,我正在使用的AAR是预编译的,我必须使用它。此外,它是一个Android库,因此无法转换为JAR。 - Master_T

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接