最近在优化一个老项目,发现项目当中有一些Module还在使用compile来依赖三方库,所以就想讲讲compile、implementation和api有什么区别
首先我们创建一个Project,然后再生成一个Module,并且Project去引用这个Module
dependencies {
XXXXX
implementation project(path: ':myapplication')
}
这个时候假设Module中引入了一些三方库,比如谷歌的Gson库,首先可以明确一点,就是compile、implementation和api都能将Gson引入到Module当中,那他们到底有什么区别呢?现在假设我们使用的是implementation关键字去引入,然后在Project中去尝试使用Gson,会发现Project中根本找不到Gson对象
dependencies {
XXXXX
implementation 'com.google.code.gson:gson:2.8.8'
}
但是如果换成api关键字去引入,则会发现能找到Gson对象
dependencies {
XXXXX
api 'com.google.code.gson:gson:2.8.8'
}
那么使用compile是什么情况呢?我们会发现它其实已经过时了,并且sync时直接会报错,其实它的作用和api是一致的,可以说api关键字就是用来替代compile关键字的,所以我们现在使用api即可
dependencies {
XXXXX
compile 'com.google.code.gson:gson:2.8.8'
}
compile is deprecated; replace with either api to maintain current behavior, or implementation to improve build performance by not sharing this dependency transitively.
总结
同一个Module中
compile(过时)、api、implementation的使用效果相同
不同的Module中
compile(过时)、api关键字引入的包对于其他Module来说是可见的,而implementation关键字引入的包对于其他Module来说是不可见的