【问题标题】:Android Studio: including AAR library from a library projectAndroid Studio:包括来自库项目的 AAR 库
【发布时间】:2015-06-17 14:16:29
【问题描述】:

在我的 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添加的repository被完全忽略了,本地的“libs”文件夹也没有作为repository包含,导致编译失败。

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

我该怎么做??

【问题讨论】:

标签: android-studio gradle aar


【解决方案1】:

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

基本上问题是flatDir 存储库如果包含在LibraryProject1 的build.gradle 脚本中,则会在编译时被忽略,所以我要做的是使用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 中?
  • 如果您使用的是 Gradle 3.0.0 或更高版本,这个简单的 Gradle 设置对我有用:stackoverflow.com/questions/29081429/…
【解决方案2】:

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

【讨论】:

  • 不幸的是,我使用的 AAR 是预编译的,我必须使用它。另外,它是一个 Android 库,所以无论如何都无法转换为 JAR。
猜你喜欢
  • 2015-02-13
  • 2016-07-10
  • 2015-11-11
  • 2014-01-09
  • 2016-06-07
  • 1970-01-01
  • 2018-04-02
  • 2017-07-04
  • 2015-01-31
相关资源
最近更新 更多