Gradle for Android AAR依赖于AAR,在同一个远程仓库中?

关于Gradle中的AAR文件的传递依赖关系,有几个问题需要解决:

  • Android Studio 0.2.3无法parsing传递的aar依赖项
  • Android Gradle库依赖与库依赖使用Nexus
  • Aar在仓库里。 外部依赖和NoClassDefFoundError

我也遇到了类似的问题,试图设置远程存储库中的AAR文件的传递依赖。 我有应用程序A,取决于图书馆B,而这又取决于图书馆C.图书馆C是在Maven回购。 库B处于同一个库中,包含对库C的依赖关系的POM。应用程序A在其依赖项中包含库B. 但是,运行gradle clean assembleDebug结果是:“模块版本[库B]依赖于库,但不是库本身”。

我试图在这些问题中的一个赏金,希望澄清,没有运气。

我的猜测是,有两个可能的困难来源,我和上述SO问题的人都看到:

  1. 来自远程存储库的传输AAR依赖性被简单地破坏了

  2. 来自远程存储库的传递式AAR依赖性工作,但是在我们的POM文件, build.gradle文件或者打破依赖

问题 :有人知道某个公共存储库(例如Maven Central)中的AAR工件,它依赖于另一个AAR工件,也存在于同一个公共存储库中?

我对AAR不感兴趣,它依赖于本地存储库中的某些东西,比如Maven Central中依赖com.android.support:support-v4的AAR。 在我的情况下,如果库B和库C都在我的本地Maven仓库( ~/.m2 ),一切工作正常。

根据Xav, 我在做什么应该工作 。 因此,我希望有人能指点我一个可行的例子,以便我可以用它来确定我们其他人可能出错的地方。

注意 :我知道要求非现场资源是严厉的。 在这种情况下,我并不是在寻找自己的资源,而是作为工作configuration的一个例子来帮助debugging非工作configuration。 如果您有另外一种方式来写出一个显示工作configuration的答案,那就太棒了!

谢谢!

Solutions Collecting From Web of "Gradle for Android AAR依赖于AAR,在同一个远程仓库中?"

我没有公开示例,但是我已经在内部托pipe的Nexus存储库中成功设置了此scheme。 这是设置:

应用程序 – Android应用程序项目LibraryB – Android库项目picasso – 来自Square的开源库(Maven Central提供)LibraryA – Android库项目

应用程序依赖于LibraryB和毕加索LibraryB依赖于LibraryA

这里是LibraryB的POM(从Nexus下载)

 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>LibraryB</artifactId> <version>0.1</version> <packaging>aar</packaging> <dependencies> <dependency> <groupId>com.example</groupId> <artifactId>LibraryA</artifactId> <version>3.0.1</version> <scope>compile</scope> </dependency> <dependency> <groupId>com.squareup.picasso</groupId> <artifactId>picasso</artifactId> <version>2.1.1</version> <scope>compile</scope> </dependency> </dependencies> </project> 

这是LibraryB的build.gradle

 buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.6.+' } } apply plugin: 'android-library' apply plugin: 'maven' version versionProp group 'com.example' repositories { mavenCentral() maven { url(exampleReleaseRepoUrl) } } android { compileSdkVersion 19 buildToolsVersion "19.0.0" defaultConfig { minSdkVersion 8 targetSdkVersion 19 } release { runProguard false proguardFile 'proguard-rules.txt' proguardFile getDefaultProguardFile('proguard-android.txt') } } dependencies { compile 'com.example:LibraryA:3.0.1' compile 'com.squareup.picasso:picasso:2.1.1' } uploadArchives { repositories { mavenDeployer { repository(url: uri(exampleReleaseRepoUrl)) { authentication(userName: nexusUsername, password: nexusPassword) } snapshotRepository(url: uri(exampleSnapshotRepoUrl)) { authentication(userName: nexusUsername, password: nexusPassword) } } } } 

这是LibraryA的POM(从Nexus下载)

 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>LibraryA</artifactId> <version>3.0.1</version> <packaging>aar</packaging> <dependencies> <dependency> <groupId>com.android.support</groupId> <artifactId>support-v4</artifactId> <version>19.0.0</version> <scope>compile</scope> </dependency> </dependencies> </project> 

LibraryA的build.gradle与上面的LibraryB非常相似。

LibraryA和LibraryB的工件和POM通过下面的Gradle命令上传

 gradle uploadArchives 

应用程序的build.gradle看起来像这样

 buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.6.+' } } apply plugin: 'android' repositories { mavenCentral() maven { url(exampleReleaseRepoUrl) } } android { compileSdkVersion 19 buildToolsVersion "19.0.0" defaultConfig { minSdkVersion 8 targetSdkVersion 19 } buildTypes { release { runProguard false proguardFile getDefaultProguardFile('proguard-android.txt') } } productFlavors { defaultFlavor { proguardFile 'proguard-rules.txt' } } } dependencies { compile 'com.android.support:support-v4:19.0.0' compile 'com.android.support:appcompat-v7:19.0.0' compile 'com.example:LibraryB:0.1' } 

如果你需要更多的信息,请告诉我。

看来我的问题已经清除了Gradle 1.9和com.android.tools.build:gradle:0.7.+ 。 至less,我不能再重现这个问题。

从Android Studio 0.4.4开始,使用.AAR依赖关系和使用.JAR依赖关系一样简单。 把它放到\libs目录下,并在build.gradle引用它:

 compile files('libs/YOUR_LIBRARY_NAME.aar')