【问题标题】:IllegalArgumentException: already added: Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoIcsImpl;IllegalArgumentException:已添加:Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoIcsImpl;
【发布时间】:2018-07-08 00:06:17
【问题描述】:

我在 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')
}

【问题讨论】:

标签: android gradle build.gradle gradlew


【解决方案1】:

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

1) PagerSlidingTabStrip 库依赖于本地支持 lib v4 jar。删除依赖项并将项目作为库项目添加到您的应用程序中,并在其中添加支持 v4 的 maven 依赖项。所以它应该和上面的 Facebook 库项目一模一样。

2) RoboSpice 库依赖于支持库 v4 (https://github.com/octo-online/robospice/issues/195) 中的 LRUCache。只需将它从您的主 bu​​ild.gradle 文件中排除,您就可以开始了。

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

希望这会对某人有所帮助,而不是像我那样花整整一周的时间来解决这个问题。哦,感谢@Snicolas。没有他的帮助是无法解决的。

编辑:从 RoboSpice v1.4.8 开始,不再有本地支持 lib 依赖项,因此已修复此问题。

【讨论】:

  • 很好的答案。 PagerSlidingTabStrip 更新到 1.0.1 解决了我的问题。
【解决方案2】:

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

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

【讨论】:

  • 我这样做了,现在我得到了这个错误:没有找到匹配RestoreAssemblyResources AssemblyName 元数据'Xamarin.Android.Support.v4'的引用
  • 这并没有立即解决我的问题。对于其他遇到此问题的人,我建议您花点时间摆弄一下包和参考资料。
  • 使用 Xamarin 的解决方法是更新我的 Xamarin.Support 库。就我而言,它是从 23.3.0 到 25.3.1
  • 我发现只需从磁盘上的项目文件夹中删除 obj 文件夹就足以解决问题(或者可能是与之前删除 nuget 包文件夹相结合) - 我建议尝试这个最重要的是
【解决方案3】:

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

一旦您删除了包和依赖包,请尝试构建项目。成功构建后,使用 正确版本Nuget 包管理器 重新安装包。 (包版本根据 API 级别列出,例如: Android 6 是 API 23,将支持版本 23.x.x 的包)

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

希望这将有助于清理混乱!

【讨论】:

  • 我遇到了同样的错误,但无法删除有问题的包,因为 Xamarin.Forms 依赖于它。我无法删除 Xamarin.Forms,因为其他包依赖它。
  • 我所做的是,我记下了我要删除的所有相互链接的包。然后将他们连同他们的家属一起移除。然后用正确的版本重新安装它们。
【解决方案4】:

运行“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'
  }
}

【讨论】:

    【解决方案5】:

    页面滑块库也有支持库依赖。因此,您会收到此错误。如果是 maven,您只需将支持库的主项目 pom 文件依赖项更改为提供的范围。

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

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

    更多详情请参考以下链接Convert Maven to Gradle

    【讨论】:

    • 好的,我可以确认这是 PagerSlidingTabStrip 库的问题,我已经联系了它的作者来解决这个问题。但是 PlayServices 呢?编译后我看不到 /libs 文件夹,就像我在 PagerSlidingTabStrip 看到的那样。
    • 如果您使用的是 Android Studio,没有得到您的问题,您唯一需要做的就是编辑 build.gradle 文件并确保没有 android 或 google jar 库,这意味着您将需要从您的项目中删除 jar 库。
    • 我指的是这一行: compile 'com.google.android.gms:play-services:3.1.36' 这会产生同样的错误。
    • 我想我解决了 PagerSlidingTabStrip 的问题,方法是在 lib 的本地项目中包含“com.android.support:support-v4:18.0.+”,然后将其包含到 Facebook lib 中,然后包含Facebook 进入 MyProject。问题仍然存在,现在可能是由于 PlayServices... 有什么想法吗?
    • 我在使用 action bar 、 facebook sdk 和 view pager library 时遇到了类似的问题。 scope=provided 对我有用。正如我之前提到的,你需要在 gradle 中做类似的事情。
    【解决方案6】:

    我也遇到了同样的问题。我只是将所有 Xamarin.Android.Support... nuget 包更新到相同版本。

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

    祝你好运! 汤姆

    【讨论】:

      【解决方案7】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-01-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-12
        • 2017-01-28
        相关资源
        最近更新 更多