Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Gradle的外部Android库项目_Android_Maven_Build_Gradle - Fatal编程技术网

使用Gradle的外部Android库项目

使用Gradle的外部Android库项目,android,maven,build,gradle,Android,Maven,Build,Gradle,我正在尝试用Gradle和。我希望依赖于外部(maven)存储库中的库项目,例如ActionBarSherlock 根据以下情况,这似乎是可能的: 使用库可通过以下方式之一完成: 多项目设置。请看这里: 通过回购协议(如maven或ivy)的依赖关系。 my build.gradle的当前内容: buildscript { repositories { mavenCentral() } dependencies { classpath 'c

我正在尝试用Gradle和。我希望依赖于外部(maven)存储库中的库项目,例如ActionBarSherlock

根据以下情况,这似乎是可能的:

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

多项目设置。请看这里:

通过回购协议(如maven或ivy)的依赖关系。

my 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'
            }
        }
    }
}
我使用的是Gradle1.2。当我尝试使用
gradle assembly
构建时,出现以下错误:

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。如果删除
sourceset
中的
manifest
规范,仍然会得到相同的错误

该网站提到使用
应用插件:“安卓图书馆”
进行图书馆项目;我猜这只是在构建实际库(使用多项目设置)时,因为这样做不会生成APK


如何使外部Android库项目依赖项正常工作?

您使用的是旧版本的Android gradle插件。
在最新版本0.3中,在这方面有了很多改进

我建议你升级到这个插件的0.3版本。还要注意的是,您必须使用更新版本的gradle(1.3或1.4)


有关如何与此插件一起使用的更多信息。

虽然可以通过Maven或Ivy存储库获取依赖项,但这些依赖项并没有打包在标准Jar归档中。有一种新的格式专门为这个构建系统设计。类型为“aar”

Maven Central上当前可用的Android库是使用Maven插件创建的,该插件使用不同的归档格式(“apklib”),因此它们不兼容

如果您查看com.actionbarsherlock:actionbacksherlock(该库的新位置),您将看到其格式为apklib。


查看源代码,我们检查“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发表了一篇文章,展示了如何将ActionBarSherlock与Gradle结合使用

新的aar格式是像jar这样的编译发行版,还是像apklib这样的原始源代码压缩包?对于0.3版的插件,构建Android库项目似乎会产生aar(包含编译类和资源的存档)。在它变得更广泛之前,有没有办法让Android Gradle插件与Maven Central上现有的apklib打包库一起工作(等等)?编辑:考虑到网站上当前的信息:“库的二进制打包仍在进行更改。暂时不要将库上载到maven central(或其他类似的repo)。”aar与apklib类似,它是一个包含jar和其他文件的zip文件。支持apklib并不是真的计划好了,但我可以研究一下。@XavierDucrohet在Android Studio中有没有机会使用那个akplib文件?如果这很重要的话,我用gradle 1.10作为0.4。4@rekire现在还没有。我已经试了一段时间了!非常感谢。