不能在库模块中使用本地 .aar 文件
我添加了 socialauth-android 库的 aar
我的项目.我已将它放在 flatDir
目录中,如 此处,效果很好.
现在,我将我的一些代码移动到名为 commons
的库模块中,以便在另一个项目中重用它.socialauth-android
将完全由库模块使用,所以我将它移到 project/commons/libs/
中并重写了我的 build.gradle
代码>文件.从现在开始我无法构建我的项目,因为出现以下错误:
I have an aar
of socialauth-android library added to my project. I've put it inside the flatDir
directory as described here and it works just fine.
Now, I'm moving some of my code into the library module named commons
, to reuse it in the another project. socialauth-android
will be used entirely by library module, so I've moved it inside the project/commons/libs/
an rewritten my build.gradle
files. From now on I can't build my project, because the following error arises:
Error:A problem occurred configuring project ':ScrollApplication'.
> Could not resolve all dependencies for configuration ':ScrollApplication:_developmentDebugCompile'.
> Could not find :socialauth-android:.
Searched in the following locations:
http://dl.bintray.com/populov/maven//socialauth-android//socialauth-android-.pom
http://dl.bintray.com/populov/maven//socialauth-android//socialauth-android-.aar
https://oss.sonatype.org/content/repositories/snapshots//socialauth-android//socialauth-android-.pom
https://oss.sonatype.org/content/repositories/snapshots//socialauth-android//socialauth-android-.aar
https://repo1.maven.org/maven2//socialauth-android//socialauth-android-3.2.pom
https://repo1.maven.org/maven2//socialauth-android//socialauth-android-3.2.aar
file:/home/artem/Workspace/scrollandroid/libraries/socialauth-android-3.2.aar
file:/home/artem/Workspace/scrollandroid/libraries/socialauth-android.aar
Required by:
scrollandroid:ScrollApplication:unspecified > scrollandroid:commons:unspecified
该错误表明依赖项解析器试图在 project/libraries
文件夹中查找 socialauth-android.aar
,该文件夹是我的模块之间共享的所有公共库的文件夹项目.但是我在我的 project/commons/build.gradle
文件中写了 flatDir
的 commons
模块是 project/commons/库
!此外,在构建过程中可以找到 project/commons/libs/
中包含的所有 jar
库,没有任何问题.
The error says that dependency resolver tries to find socialauth-android.aar
inside the project/libraries
folder which is the folder for all common libraries shared between modules of my project. But I've written in my project/commons/build.gradle
file that the flatDir
for the commons
module is project/commons/libs
! Moreover, all jar
libraries contained inside the project/commons/libs/
are found during the build w/o any issues.
这个问题的根源是什么?
What can be the source of this issue?
以下是我的 build.gradle 文件(为简洁起见,删除了其中的一些代码,如依赖项声明):
Following are my build.gradle files (some of its code, like dependencies declarations, is dropped for brevity):
project/settings.gradle:
include ':ScrollApplication', ':commons'
project/build.gradle:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.0.0-rc1'
}
}
project/commons/build.gradle:
apply plugin: 'com.android.library'
repositories {
maven { url 'https://oss.sonatype.org/content/repositories/snapshots/' }
mavenCentral()
flatDir {
dirs "libs"
}
}
android {
compileSdkVersion 21
buildToolsVersion "21.1.1"
defaultConfig {
minSdkVersion 14
targetSdkVersion 21
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile(name:'socialauth-android', ext:'aar')
}
project/app/build.gradle:
apply plugin: 'com.android.application'
repositories {
maven { url "http://dl.bintray.com/populov/maven" }
maven { url 'https://oss.sonatype.org/content/repositories/snapshots/' }
mavenCentral()
flatDir {
dirs "../libraries"
}
}
configurations {
apt
}
android {
compileSdkVersion 21
buildToolsVersion "21.1.1"
defaultConfig {
minSdkVersion 14
targetSdkVersion 21
}
lintOptions {
abortOnError false
}
}
dependencies {
compile project(':commons')
compile fileTree(dir: '../libraries', include: ['*.jar'])
}
Upd:添加的项目结构
├── build.gradle
├── commons
│ ├── build.gradle
│ ├── libs
│ ├── proguard-rules.pro
│ └── src
│ ├── androidTest
│ │ └── java
│ └── main
│ ├── AndroidManifest.xml
│ ├── assets
│ ├── java
│ └── res
├── gradle
│ └── wrapper
├── libraries
│ ├── aws-android-sdk-1.7.1.1-core.jar
│ ├── aws-android-sdk-1.7.1.1-s3.jar
│ ├── libGoogleAnalyticsServices.jar
│ └── supertooltips-3.0.1.aar
├── scrollandroid-hg.iml
├── ScrollApplication
│ ├── build.gradle
│ ├── proguard.cfg
│ ├── ScrollApplication.iml
│ └── src
│ └── main
│ ├── AndroidManifest.xml
│ ├── assets
│ ├── java
│ └── res
├── settings.gradle
└── stacktrace.txt
看来 commons
库正在正确构建(可以单独编译以验证吗?) 但应用程序不是.Gradle 有一些特殊的规则来处理传递依赖(嵌套在其他依赖中的依赖),因为 commons
依赖于 socialauth-android
.
It appears that the commons
library is being built correctly (can you compile it separately to verify?) but the application is not. Gradle has some special rules for handling transitive dependencies (dependences nested in other dependencies) which exists since commons
depends on socialauth-android
.
尝试在project/app/build.gradle"中的flatDir"属性中添加一个额外的目录
Try adding an extra directory to the "flatDir" attribute in "project/app/build.gradle"
flatDir {
dirs "../libraries", "../commons/libs"
}