Gradle:错误:包含名称为“com.google.android.gms”的多个库

时间:2014-05-06 12:33:49

标签: android gradle android-gradle build.gradle

此错误消息是什么意思?我的项目中没有重复的包

  

错误:任务执行失败':SimpleReader:processDebugResources'   错误:包含名称为“com.google.android.gms”的多个库   您可以暂时禁用此错误   android.enforceUniquePackageName = false但是,这是暂时的   将在1.0

中执行

我的build.gradle看起来像这样:

buildscript {

    repositories {
        maven { url 'http://repo1.maven.org/maven2' }
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.9.1'
    }
}
apply plugin: 'android'
android {
    buildToolsVersion '19.0.3'
    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 17

    }
    compileSdkVersion 17
    packagingOptions {
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
    }
    buildTypes {
    }
}
dependencies {
    compile 'com.android.support:support-v4:19.0.1'
    compile 'com.google.android.gms:play-services:4.2.42'
    compile files('libs/gson-2.2.4.jar')
    compile files('libs/httpmime-4.1.jar')
    compile files('libs/httpclient-4.1.1.jar')
    compile files('libs/jsoup-1.7.3.jar')
    compile project(':libraries:actionbarsherlock')
    compile project(':libraries:sherlocknavigationdrawer')
    compile project(':libraries:googleplayservices')
    compile project(':libraries:androidslidinguppanel')
    compile files('libs/protocol-1.0.4.jar')
    compile files('libs/sentry-0.1.4.jar')
    compile files('libs/commons-lang-2.3.jar')
}

6 个答案:

答案 0 :(得分:34)

在我的情况下,问题是因为我包括:

compile 'com.google.android.gms:play-services-wearable:+'
compile 'com.google.android.gms:play-services:4.4.52'

可穿戴式游戏服务和常规游戏服务。 我评论了可穿戴部分,它起作用了。
不确定我是否需要它,但项目向导默认包含它

答案 1 :(得分:16)

今天我遇到了同样的问题。我需要使用Google Analytics,因此我按照教程导入google analytics lib:

compile 'com.google.android.gms:play-services-analytics:9.0.0'

然后编译项目,gradle告诉我Error: more than one library with package name 'com.google.android.gms'

我绝对可以肯定,我只能通过com.google.android.gms lib直接导入google analytics

所以我导航到Android Studio中的Project标签以查看此项目所依赖的库,然后我在play-services-6.5.87中显示External Libraries,如下面的屏幕截图所示:

see External Libraries

所以现在我知道还有另一个lib取决于play-services-6.5.87,但我不知道它是哪个lib。

然后我在控制台中使用gradle命令来查看项目依赖项:

$ ./gradlew -q app:dependencies

gradle dependencies

结果告诉我com.facebook.android:audience-network-sdk:4.6.0依赖它。

所以我们如何通过两种方式解决这个问题:

  1. 如果您不需要此audience-network-sdk,请将其删除。事实上我的项目并不需要它。
  2. 如果您还需要audience-network-sdkgoogle-analytics,请使用exclude group语法,例如关注代码段。

    //facebook SDK
    compile ('com.facebook.android:audience-network-sdk:4.6.0') 
            {exclude group: 'com.google.android.gms'}
    
    // google analytics
    compile 'com.google.android.gms:play-services-analytics:9.0.0'
    
  3. 在您的情况下,audience-network-sdk可以是依赖于与其他lib相同的lib的任何其他lib。这里只是思考如何解决类似的问题。

答案 2 :(得分:7)

尝试删除compile project(':libraries:googleplayservices')compile 'com.google.android.gms:play-services:4.2.42'。我很确定它们是同一个库。

答案 3 :(得分:1)

我遇到了类似的问题,我通过以下步骤解决了问题:

  1. 离子平台rm android

  2. 离子平台添加android

  3. 离子构建android

答案 4 :(得分:1)

这是版本的问题。如果您有相同包路径的多个依赖项,请确保版本相同

compile 'com.google.android.gms:play-services-ads:8.4.0'
compile 'com.google.android.gms:play-services-gcm:8.4.0'

答案 5 :(得分:1)

我很长一段时间都对这个问题感到困惑。虽然同样的错误日志,我的问题与问题没什么不同。我希望我的sublib的buildtype与我的应用程序的buildtype相同。所以我为文档告诉我分配了sublib的构建类型。 [Gradle Plugin用户指南] [1]

这是我得到的错误。

处理flavorCustomResource

错误:带有com.xxx.libCommon的多个库

这是我的结构。 lib1和lib2是相互独立的。

app

- > lib1 - > libCommon

- > lib2 - > libCommon

只有在构建自定义构建类型时才会出现错误。但是,发布版本还不错。

更多细节。我的build.gradle的某些部分

应用程式:

android {
    buildTypes {
        release{}
        custom{}
    }
}
configurations {
    flavorReleaseCompile
    flavorCustomCompile
}
dependencies{
    compile project(':lib1')
    flavorReleaseCompile project(path: ':lib2', configuration: ':release')
    flavorCustomCompile project(path: ':lib2', configuration: ':custom')
}

LIB1:

android {
    publishNonDefault true
    buildTypes {
        release{}
        custom{}
    }
}

dependencies{
    releaseCompile project(path: ':libCommon', configuration: ':release')
    customCompile project(path: ':libCommon', configuration: ':custom')
}

LIB2

dependencies {
    compile project(':libCommon')
}

解决方案:将lib2配置为lib1。问题将得到解决。

LIB2:

android {
    publishNonDefault true
    buildTypes {
        release{}
        custom{}
    }
}

dependencies{
    releaseCompile project(path: ':libCommon', configuration: ':release')
    customCompile project(path: ':libCommon', configuration: ':custom')
}

<强> 原因

问题在于图书馆出版

默认发布是发布。如果没有配置lib2,它将使用与lib1不同的默认发布libCommon(发布版本) - &gt;由lib1的build.gradle分配的libCommon(自定义版本)。这就出现了错误。

我希望我的帖子可以帮助某些人解决同样的问题,或者给他/她一些暗示。