android - 使用 Gradle 的外部 Android 库项目

我正在尝试使用 Gradle 和 Android Gradle plugin 构建一个 Android 项目.我想依赖在外部(maven)存储库中找到的库项目,例如 Action 酒吧夏洛克。

根据 official site 这似乎是可能的:

Using a library is done one of the following way:

Multi-project setup. Read here: http://www.gradle.org/docs/current/userguide/multi_project_builds.html

Dependencies through a repo such as maven or ivy.

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

该网站提到使用 apply plugin: 'android-library' 用于库项目;我猜这只是在构建实际库时(使用多项目设置),因为这样做不会产生 APK。

如何让外部 Android 库项目依赖项工作?

最佳答案

虽然可以通过 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 并提供更好的错误消息。

https://stackoverflow.com/questions/15173923/

相关文章:

c# - 如何在解决方案级别使用 Microsoft.Net.Compilers?

visual-studio-2010 - 如何在VS2010后期构建步骤中添加双引号

android - 如何在 Gradle 构建脚本(Android)中定义和使用常量?

visual-studio-2010 - 从命令行发布 Web 应用程序

.net - MSBuild 和 F# 的 FAKE 有什么区别?

c# - 如何在我的应用程序中显示上次构建的内部版本号和/或日期时间?

java - 将 Google Guava 添加到 Android 项目 - 显着减慢构建速度

scala - SBT:如何访问环境变量或配置?

c# - 使用不同的 DLL 进行调试和发布版本

c++ - CMake - 创建一个静态库