外部Android库项目与Gradle

我正在尝试使用Gradle和Android Gradle插件来构build一个Android项目。 我想依靠外部(maven)存储库中find的库项目,例如ActionBarSherlock。

根据官方网站,这似乎是可能的:

使用库可以通过以下方式之一完成:

多项目设置。 请阅读: http : //www.gradle.org/docs/current/userguide/multi_project_builds.html

通过回购如maven或常春藤的依赖。

我的build.gradle的当前内容:

buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.2' } } apply plugin: 'android' repositories { mavenCentral() } dependencies { compile 'com.actionbarsherlock:library:4.2.0' } android { target = 'android-16' sourceSets { main { manifest { srcFile 'AndroidManifest.xml' } java { srcDir 'src' } res { srcDir 'res' } assets { srcDir 'assets' } resources { srcDir 'src' } } } } 

我正在使用Gradle 1.2。 当我尝试用gradle assemble构build时, gradle assemble以下错误:

 Error: duplicate files during packaging of APK /[path to project]/build/apk/[project name]-debug-unaligned.apk Path in archive: AndroidManifest.xml Origin 1: /[path to project]/build/libs/[apk name]-debug.ap_ Origin 2: /[home directory]/.gradle/caches/artifacts-14/filestore/com.actionbarsherlock/actionbarsherlock/4.2.0/apklib/dd63451a922558005d8c10be1085b488ed731d19/actionbarsherlock-4.2.0.apklib :packageDebug FAILED 

它似乎是试图从库项目和我的项目包括AndroidManifest.xml。 如果我删除sourceSets中的manifest规范,我仍然得到相同的错误。

该网站提到使用apply plugin: 'android-library'用于图书馆项目; 我猜这只是当build立实际的图书馆(与多项目设置),因为这样做不会产生一个APK。

我如何获得外部Android库项目依赖性工作?

Solutions Collecting From Web of "外部Android库项目与Gradle"

虽然可以通过Maven或Ivy存储库获得依赖关系,但是这些不会打包到标准Jar存档中。 有一个专门为这个构build系统devise的新格式。 types是'aar'

当前在Maven Central上可用的Android库是使用Maven插件创build的,它使用不同的存档格式('apklib'),因此它们不兼容。

如果你看看com.actionbarsherlock:actionbacksherlock(这是该库的新位置),你会看到它的格式是apklib。 http://search.maven.org/#artifactdetails%7Ccom.actionbarsherlock%7Cactionbarsherlock%7C4.2.0%7Capklib

查看源代码,我们检查“aar”包装,然后恢复为将所有其他人视为“jar”,这在这里显然是一个问题。 我们应该检测apklib并提供更好的错误信息。

你现在可以把ActionBarSherlock整合成一个aar。

只需将这个添加到您的build.gradle文件中的依赖定义:

 dependencies { compile 'com.android.support:support-v4:18.0.+' compile 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar' 

杰克·沃顿(Jake Wharton)发布了一个示例项目 ,展示了如何在Gradle中使用ActionBarSherlock

您正在使用Android Gradle插件的旧版本。
在最新的0.3版本中,这方面已经有了很大的改进。

我会build议你升级到这个插件的版本0.3。 也要知道,你必须使用更新版本的gradle(1.3或1.4)。

关于如何使用这个插件的外部库的更多信息。