Android开发中经常需要引入第三方库,然而引入第三方库时候经常出现版本号冲突以及重复依赖等问题,下边就介绍几种方法去解决该类问题。
Android Gradle 3.0 依赖方式
Implementation
对于使用了该命令编译的依赖,对该项目有依赖的项目将无法访问到使用该命令编译的依赖中的任何程序,也就是将该依赖隐藏在内部,而不对外部公开。
使用implementation会使编译速度有所增快:比如我在一个library中使用implementation依赖了gson库,然后我的主项目依赖了library,那么,我的主项目就无法访问gson库中的方法。这样的好处是编译速度会加快,我换了一个版本的Gson库,但只要library的代码不改动,就不会重新编译主项目的代码。
api
等同于compile指令
compileOnly
等同于provided,只在编译时有效,不会参与打包,不会包含到apk文件中。可以用来解决重复导入库的冲突
解决方案
1.force = true
implementation('org.hibernate:hibernate:3.1') {
//不同版本同时被依赖时,那么强制依赖这个版本的,默认false
force = true
}
2.exclude
implementation('org.hibernate:hibernate:3.1') {
//exclude可以设置不编译指定的模块,有三种写法:
exclude module: 'cglib'
exclude group: 'org.jmock'
exclude group: 'org.unwanted', module: 'iAmBuggy'
}
3.transitive
implementation('org.hibernate:hibernate:3.1') {
//禁止依赖的传递,gradle自动添加子依赖项(依赖包所需的依赖),设置为false,则需要手动添加每个子依赖项,默认为true。
transitive = false
}
4.configurations设置
configurations.all {
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
def requested = details.requested
if (requested.group == 'com.android.support') {
if (!requested.name.startsWith("multidex")) {
details.useVersion '26.1.0'
}
}
}
}
5.compileOnly
可以解决重复依赖问题,假如你引入的某个arr包中的库与你项目中的库重复依赖,可以指定其中一个的编译方式为compileOnly,那么就不会重复依赖
网友评论