treesAreEverywhere
treesAreEverywhere

Reputation: 3972

In an Android Gradle build, how to exclude dependencies from an included jar file?

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?

Upvotes: 33

Views: 60319

Answers (2)

Maheshwar Ligade
Maheshwar Ligade

Reputation: 6855

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

Upvotes: 47

Johan Paul
Johan Paul

Reputation: 2456

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.

Upvotes: 1

Related Questions