In an Android Gradle build, how to exclude depende

2019-02-16 11:23发布

问题:

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?

回答1:

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



回答2:

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.