30

In my Android project, I use a library that comes as a jar. I include it in the dependencies section like so:

dependencies {
    ...

    compile files('libs/thethirdpartylibrary.jar')
    ...
}

I also want to use the okhttp library, which I include like this:

compile ('com.squareup.okhttp:okhttp:2.7.5')

(This particular version of okhttp depends on okio 1.6.0.)

The problem is that the thirdparty jar library depends on okio v0.9.0 and what's worse, bundles it.

As a result, I get a dex conflict error at build time.

I was able to resolve this by manually removing okio from the jar file and this seems to work. But I'm wondering if there's a way to do this in gradle.

My question: Can I remove bundled, transitive ( <- I hope I'm using this word the right way) dependencies from an included jar during build-time with gradle?

treesAreEverywhere
  • 3,722
  • 4
  • 28
  • 51
  • 1
    Any reason why you can't simply recreate the third party jar to remove the classes in it that you don't want? I don't think gradle will allow you to select specific classes to exclude out of a file dependency. – Doug Stevenson Mar 21 '16 at 01:18
  • In fact, that's what I'm doing right now. I just was wondering if there's a (simple) way to do this with gradle, so that I don't have to do this manually every time the vendor library changes. – treesAreEverywhere Mar 21 '16 at 12:46
  • 1
    Hi, have you resolved this? Can you share your solution? – Jezer Crespo Jul 18 '16 at 02:45
  • have you got the answer to this? – Sagar Mar 17 '22 at 20:37

2 Answers2

44

Exclude the Group in the dependencies by using the below lines.

1.

configurations {
    all*.exclude group: 'com.android.support', module: 'support-v4'
}

2.

dependencies {
    compile 'com.android.support:support-v4:13.0.+'
    compile ("com.xxx:xxx-commons:1.+") {
        exclude group: 'junit', module: 'junit'
    }
}

3.

configurations {
    runtime.exclude group: "org.slf4j", module: "slf4j-log4j12"
}

Try this one.

For more detail

jeprubio
  • 17,312
  • 5
  • 45
  • 56
Maheshwar Ligade
  • 6,709
  • 4
  • 42
  • 59
1

According to this discussion here https://groups.google.com/forum/#!topic/adt-dev/g1AiJM7PeVs, what you want to do is not possible.

The syntax suggested in the other answers is for "normal" Maven dependencies.

Johan Paul
  • 2,203
  • 2
  • 22
  • 38