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.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
.
我该怎么做?
我遇到了同样的问题,我通过将所有依赖于 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 仍然无法识别类型。
在我的 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.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
.
我该怎么做?
我遇到了同样的问题,我通过将所有依赖于 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 仍然无法识别类型。