Gradle实战-15-Android的不同的依赖方式

作者:一只懂音乐的码虫
链接:https://www.jianshu.com/p/0baed24e1efb
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

目前gradle支持的依赖配置有五种,分别是

  • implementation
  • api
  • compileOnly
  • runtimeOnly
  • annotationProcessor

常用的依赖配置是 implementation、api、compileOnly 。

一、implementation

依赖不可传递
会将对应的依赖添加到编译路径,并将依赖打包输出

假设项目下有两个模块A(app)、B,A依赖B,A可以访问B,B使用implementation方式依赖C,B可以访问到C,但是A是无法访问到C的。

implementation 依赖设置表示当前这个依赖在编译时只能在当前这个模块中访问,其他模块在编译时不能访问,依赖这个模块的其他模块在运行时可以访问这个库的实现。

二、api

依赖可传递
会将对应的依赖添加到编译路径,并将依赖打包输出

模块A依赖模块B,B依赖库C,模块B在编译时能够访问到库C,在模块A中库C也是可以访问的。

三、compileOnly

依赖不可传递
会添加到编译路径中,但是不会打包到apk中,只能在编译时访问

可保证编译正常,但是在运行时会报错 java.lang.noClassDefFoundError: failed resolution of ...

使用场景:例如封装一个网络库N,需要用到json库A,这个网络库N可能被宿主工程引用,而此时宿主工程也用到了同一个json库,此时就会存在包依赖冲突的问题,这种场景可以使用compileOnly来解决,但是要注意的是,在宿主工程中,必须得impementaion或者api的方式添加这个json库的依赖,否则会报 java.lang.noClassDefFoundError: failed resolution of ... 找不到这个json库的错误。

四、runtimeOnly

依赖不可传递
与compileOnly相反,它修饰的依赖不会添加到编译路径中,但是被打包到apk中,运行时使用。

不太常用

五、annotationProcessor

用于注解处理器的依赖配置,不太常用。

其他

除了上面五种,还有两种 testImplementation 和 androidTestImplementation 两种,用于指定在测试代码的依赖。

对于上面这么多的依赖,其中Implementation是我们最常用的依赖配置选项。

引入依赖的两种方式 compile provided 区别??特点
compile 引入第三方的时候 如引入第三方的代码和资源
provided 占位编译 编译的是一种情况 但打包的时候不会打入包中
1. 编译的时候 只在编译的时候起作用 但是打包的时候不起作用
2. 被依赖的工程已经有了第三方库,不需要其他库中引入的第三方库,则需要使用provided

//去除重复依赖
//socket.io
api('io.socket:socket.io-client:1.0.0') {
    exclude group: 'org.json', module: 'json'
}

// app/build.gradle 
//1.添加 flatDir 仓库
repositories {
    flatDir {
       dirs 'libs', '../libs'
    }
}

//2.添加libs目录下的aar文件
api files('libs/xx-sdk.aar')

//腾讯短视频sdk
api(name: 'LiteAVSDK_Professional_6.3.7089', ext: 'aar')

//exoplayer
api group: 'com.google.android.exoplayer', name: 'exoplayer', version: '2.8.4'

//公共包
api project(':fire')
 
//最常见的依赖方式 
//gif库,播放礼物gif用
api 'pl.droidsonroids.gif:android-gif-drawable:1.2.15'

有时候会出现so重复的问题,但是一时半会不清楚问题在哪,可以如下尝试将重复的so库排除。 

// app/build.gradle
android {
    ...
    packagingOptions { //避免重复导入库
        exclude 'lib/armeabi-v7a/libxxSDK.so'
    }
}

参考:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值