IllegalArgumentException:已添加:Landroid / support / v4 / accessibilityservice / AccessibilityServiceInfoCompat $ AccessibilityServiceInfoIcsImpl;

时间:2013-09-26 14:00:54

标签: android gradle build.gradle gradlew

我在MyProject + Facebook api上使用Android Studio + gradle作为库。请参阅以下设置。

我已尝试删除support-v4的所有引用(r7或18.0.0)并将其替换为support-v13,但v4的消息仍然存在。我也注意到support-v4-r7出现在外部库中,即使它根本没有被引用。这会是问题吗?

MyProject build.gradle:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.5.+'
    }
}
apply plugin: 'android'

repositories {
    mavenCentral()
    maven {
        url "https://raw.github.com/ark/ark/master/releases/"
    }
}

dependencies {
    compile 'com.andreabaccega:android-form-edittext:1.0.3'
    compile 'com.astuetz:pagerslidingtabstrip:1.0.0'
    compile 'org.codehaus.jackson:jackson-mapper-asl:1.9.12'
    compile 'com.octo.android.robospice:robospice-spring-android:1.4.7'
    compile 'com.google.android.gms:play-services:3.1.36'
    compile files('libs/imageloader-core-1.5.8.jar')
    compile project(':libs:Facebook')

}

android {
    compileSdkVersion 17
    buildToolsVersion "18.1"

    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 17
    }
    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['res']
            res.srcDirs = ['res']
        }

        debug {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src', 'libs/Facebook/src', 'libs/Facebook/build/source/r/debug', 'libs/Facebook/build/source/buildConfig/debug']
            resources.srcDirs = ['build', 'libs/Facebook/build/source/r/debug', 'libs/Facebook/build/source/buildConfig/debug']
            res.srcDirs = ['res']
        }
    }
}

MyProject settings.gradle:

include ':MyProject'
include ':libs:Facebook'

Facebook build.gradle:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.5.+'
    }
}
apply plugin: 'android-library'

repositories {
    mavenCentral()
}

dependencies {
    compile 'com.android.support:support-v4:18.0.0'
}

android {
  compileSdkVersion 17
  buildToolsVersion '18.1'

    defaultConfig {
        minSdkVersion 8
    }

  sourceSets {
    main {
        manifest.srcFile 'AndroidManifest.xml'
        java.srcDirs = ['src']
        resources.srcDirs = ['res']
        res.srcDirs = ['res']
    }
      debug {
          manifest.srcFile 'AndroidManifest.xml'
          java.srcDirs = ['src', 'build/source/r/debug', 'build/source/buildConfig/debug']
          resources.srcDirs = ['build/source/r/debug', 'build/source/buildConfig/debug']
          res.srcDirs = ['res']
      }
  }
}

编辑:我尝试在另一个项目中逐个添加我在此项目中使用的库,以查看失败的内容。显然这两个人是罪魁祸首。如果我包含其中任何一个或两个,我会收到上述错误。

compile 'com.astuetz:pagerslidingtabstrip:1.0.0'
compile 'com.google.android.gms:play-services:3.1.36'

关于如何管理这个的任何想法?

Edit2:显然,另一个项目会出现同样的问题。请参阅下面的build.gradle依赖项。 StickyListHeaders项目不再包含依赖项。所以我认为这是因为ActionBarSherlock?

dependencies {
    compile 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar'
    compile 'com.android.support:support-v4:18.0.+'
    compile 'org.codehaus.jackson:jackson-mapper-asl:1.9.12'
    compile 'com.octo.android.robospice:robospice-spring-android:1.4.7'
    compile project(':Project Base:libs:StickyListHeaders')
}

7 个答案:

答案 0 :(得分:7)

显然这个问题有两个原因。

1)PagerSlidingTabStrip库依赖于本地支持lib v4 jar。删除依赖项并将项目添加为应用程序中的库项目,并在其中添加maven依赖项以支持v4。所以它看起来应该与上面的Facebook库项目完全一样。

2)RoboSpice库依赖于支持lib v4(https://github.com/octo-online/robospice/issues/195)的LRUCache。只需将它从主build.gradle文件中排除,你就应该好了。

compile ('com.octo.android.robospice:robospice-spring-android:1.4.7')
        {
            exclude module: 'support-v4'
        }

希望这会对某人有所帮助,而不是像我一样花一整个星期处理这个问题。哦,还有万亿感谢@Snicolas。没有他的帮助就无法解决它。

编辑:从RoboSpice v1.4.8开始,没有更多的本地支持lib依赖项,所以这个问题已修复。

答案 1 :(得分:7)

对于任何碰巧在使用Visual Studio和Xamarin时遇到此错误的人,就像我一样;

我通过简单地从项目中的References文件夹中删除对“Xamarin.Android.Support.v4”的引用来解决它,然后正常清理和构建项目。

答案 2 :(得分:2)

如果是 Xamarin.Android ,则对于已依赖的软件包之间的版本不匹配会发生此错误。您必须从项目中删除此 Xamarin.Android.Support.v4 包以及其他不匹配的包。 (这里的不匹配意味着,如果你的目标Android版本是Android 6,那么packages.config文件中列出的所有软件包都应该包含 targetFramework =“monoandroid60”软件包。如果有任何软件包赢了' t遵守这个,这是一个不匹配的版本)。如果你已经搞乱了版本,那么单独删除引用和清理内容是行不通的。您必须从 Nuget Package Manager 中删除所有不匹配的软件包(工具> NuGet软件包管理器> 管理NuGet解决方案包...)。请注意,当您要删除这些包时,您还需要删除所依赖的包。没有任何伤害并将其全部删除,您可以使用正确的版本重新安装它们。

一旦将包与依赖包一起删除,请尝试构建项目。成功构建后,使用正确版本 Nuget Package Manager 重新安装软件包。 (根据API级别列出软件包版本, Ex: Android 6,即API 23,将支持版本23.x.x的软件包)

清理项目并构建它,希望它能够成功构建!

希望这有助于清理混乱!

答案 3 :(得分:1)

运行" gradle androidDependencies"并检查您的从属树。为重叠的模块添加排除。

例如,我必须执行以下操作:

dependencies {
  compile 'com.google.android:support-v4:r7'
  compile project(':libraries:actionbarsherlock')
  compile ('com.github.chrisbanes.actionbarpulltorefresh:extra-abs:+') {
    // Need to specifically exclude this as it is specified in our own project
    exclude module: 'actionbarsherlock'
    exclude module: 'support-v4'
  }
}

答案 4 :(得分:0)

页面滑块库还具有支持库依赖性。因此,您收到此错误。在maven的情况下,您需要做的就是将支持库的主项目pom文件依赖项输入更改为提供的范围。

<dependency>
    <groupId>android.support</groupId>
    <artifactId>compatibility-v4</artifactId>
    <version>13</version>
    <scope>provided</scope>
</dependency>

如果是gradle,我认为您需要更改依赖关系配置以匹配maven提供的范围

有关详细信息,请参阅以下链接Convert Maven to Gradle

答案 5 :(得分:0)

我刚遇到同样的问题。我只是将所有Xamarin.Android.Support…nuget软件包更新为相同版本。

注意:此应用程序较旧,因此我没有使用最新的稳定版本,因为还有其他依赖项需要更新。我只是将它们全部移到了最高通用版本。

祝你好运! 汤姆

答案 6 :(得分:-2)

删除所有旧的引用.dll并与之相关并再次从NuGet添加。