我正在尝试使用Gradle和Android Gradle plugin构建一个Android项目。我想依赖于在外部(maven)存储库中找到的库项目,例如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
进行构建时,出现以下错误:
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。如果我删除manifest
中的sourceSets
规范,我仍然会收到相同的错误。
该网站提到使用apply plugin: 'android-library'
进行图书馆项目;我猜这只是在构建实际的库(使用多项目设置)时,因为这样做不会产生APK。
如何让外部Android库项目依赖项工作?
答案 0 :(得分:20)
虽然可以通过Maven或Ivy存储库获取依赖关系,但这些存储库并未打包在标准的Jar存档中。有一种专门为此构建系统设计的新格式。类型是'aar'
Maven Central上现有的Android库是使用Maven插件创建的,它使用不同的存档格式('apklib'),因此它们不兼容。
如果你看一下com.actionbarsherlock:actionbacksherlock(这是该库的新位置),你会看到它的格式是apklib。 http://search.maven.org/#artifactdetails%7Ccom.actionbarsherlock%7Cactionbarsherlock%7C4.2.0%7Capklib
查看源代码,我们检查'aar'包装并恢复将所有其他包装处理为'jar',这显然是一个问题。我们应该检测apklib并提供更好的错误消息。
答案 1 :(得分:14)
您现在可以将ActionBarSherlock整合为aar。
只需将它添加到build.gradle文件中的依赖项定义中:
dependencies {
compile 'com.android.support:support-v4:18.0.+'
compile 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar'
Jake Wharton发表了example project,展示了如何将ActionBarSherlock与Gradle一起使用
答案 2 :(得分:-1)
您使用的是旧版本的android gradle插件 在最新版本0.3中,该领域已经有很多改进。
我建议你上升到这个插件的0.3版本。还要注意,您必须使用更新版本的gradle(1.3或1.4)。
有关如何在此插件中使用external libraries的详细信息。