Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

IllegalArgumentException: already added: Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoIcsImpl;

I'm using Android Studio + gradle on MyProject + Facebook api as a library. See below settings.

I've tried removing all references of support-v4 (either r7 or 18.0.0) and replace them with support-v13, but the message with v4 was still present. I've also noticed that support-v4-r7 appears in External libraries, even though it's not referenced at all, anywhere. Would that be the problem ?

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']
      }
  }
}

Edit: I've tried adding the libs that I use in this project, in another project, one by one, to see what fails. Apparently these 2 are the culprits. If I include any or both of them, I get the above error.

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

Any ideas on how to manage this ?

Edit2: Apparently another project presents the same issue. See build.gradle dependencies below. StickyListHeaders project doesn't contain anymore dependencies. So I presume it's because of 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')
}
like image 850
Bogdan Zurac Avatar asked Sep 26 '13 14:09

Bogdan Zurac


4 Answers

Apparently there were 2 reasons for this issue.

1) PagerSlidingTabStrip library depends on a local support lib v4 jar. Remove the dependency and add the project as a library project in your app and inside it add the maven dependency for support v4. So it should look exactly like the Facebook library project from above.

2) RoboSpice library depends on LRUCache from support lib v4 (https://github.com/octo-online/robospice/issues/195). Just exclude it from your main build.gradle file and you should be good to go.

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

Hopefully this will help somebody and not spend an entire week with this problem like I did. Oh, and trillion of thanks to @Snicolas. Couldn't have solved it without his help.

Edit: As of RoboSpice v1.4.8, there is no more local support lib dependency, so this issue is fixed.

like image 115
Bogdan Zurac Avatar answered Nov 07 '22 05:11

Bogdan Zurac


For anyone who happens to hit this error while using Visual Studio with Xamarin, like I did;

I solved it by simply removing the reference to "Xamarin.Android.Support.v4" from the References folder within the project, then cleaned and built project as normal.

like image 23
IfElseTryCatch Avatar answered Nov 07 '22 05:11

IfElseTryCatch


When this is for Xamarin.Android, this error occurs for version mismatching between depended packages. You've got to remove this Xamarin.Android.Support.v4 package from the project along with other mismatching packages. (What does mismatching means here is, if your target Android version is Android 6, all packages listed in the packages.config file should have targetFramework="monoandroid60" packages. If any package won't abide this, it's a mismatching version). If you have messed with versions, then removing the reference and cleaning stuff alone won't work. You've got to remove all the mismatching packages from the Nuget Package Manager (Tools > NuGet Package Manager > Manage NuGet Packages for Solution...). Note that when you're to remove these packages, you'll also need to remove the depended packages. No harm go ahead and remove them all and you can re-install them with the correct version.

Once you've removed the package along with the dependent packages, try building the project. After a successful build, re-install the packages from the Nuget Package Manager with the correct version. (Package versions are listed according to the API levels, Ex: Android 6 which is API 23, would support packages of version 23.x.x)

Cleanup the project and build it, hopefully it'll succeed building!

Hope this'll help cleanup the mess!

like image 38
Rizan Zaky Avatar answered Nov 07 '22 05:11

Rizan Zaky


Run "gradle androidDependencies" and check your dependencie tree. Add an exclude for the modules that are overlapped.

For example i had to do the following:

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'
  }
}
like image 42
TjerkW Avatar answered Nov 07 '22 05:11

TjerkW