在我的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
。
我该怎么做?
答案 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库。 希望能帮到你, 最好的问候