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"文件夹不包含在存储库中,导致编译失败.
如果我从添加该存储库中App1的build.gradle它的工作原理,但我不想这样做,这是LibraryProject1需要的AAR文件,而不是App1.
我怎样才能做到这一点??
好吧,我找到了一种方法,但由于它非常“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 仍然无法识别类型。
| 归档时间: |
|
| 查看次数: |
2154 次 |
| 最近记录: |