关于compile,api和implementation的区别

本文深入解析Gradle中compile, implementation及api三种依赖关键字的区别。在Android项目开发中,使用不同的关键字会影响模块间依赖的可见性。例如,implementation仅在当前模块可见,而api或compile则对所有模块开放。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Android开发中使用AndroidStudio开发的时候是使用Gradle来构建我们的Android项目的,其中app目录下有个build.gradle文件,

在dependencies {...}的闭包中有一些我们引用的第三方maven的远程依赖库,以前我们都是这样依赖的:

compile 'com.android.support:appcompat-v7:26.1.0'

然后sync project,就能成功引用对应的包到项目之中了,十分方便。除了使用compile关键字,使用implementation和api也能将包引用到项目中。随着Gradle版本的更新,Gradle越来越不推荐这种方式来引用远程依赖了,而是推荐这种方式:

api 'com.android.support:appcompat-v7:26.1.0'

所以以后使用api的引用方式就可以了,但是又一个问题,还有一种引用方式implementation与以上这种有什么区别呢?

想象一种情况,当我们的项目越来越大的时候,有时候会使用多个module来开发,其中每个module都有自己的build.gradle,都有自己的依赖,这个时候implementation依赖的库就只能在当前module中使用了,相当于当前module的私密依赖。

在同一个module下,implementation和compile的使用效果相同,但是在不同module下,就会有所区别了。举个例子,在项目中有一个名为action的module,其gradle配置文件中引用了两个包:

implementation 'com.android.support:appcompat-v7:26.1.0'
compile 'com.android.support:design:26.1.0'

然后在app module中引入action module:

compile project(':action')

如果此时你尝试在app module中引入action module在gradle中配置的两个maven库,你会发现,使用implementation关键字的appcompat-v7包无法在app module中使用,而使用compile关键字的design包则可以使用。
这样,两个关键字的区别就显而易见了,总结:api或compile关键字引用的包对于其他module来说是可见的,而implementation关键字引用的包对于其他module来说是不可见的。

gradle implementationcompile都是在项目中使用的依赖管理关键字。 在旧版本的Gradle中,使用的是compile关键字来引入项目中所需要的依赖库。例如,使用compile 'com.android.support:appcompat-v7:28.0.0'来引入Android Support库中的appcompat库。 然而,在Gradle 3.0及以上的版本中,compile已经被implementation所取代。这是由于implementation可以更好地处理依赖的传递性问题。所谓的传递性问题是指当一个库依赖另外一个库时,是否需要将被依赖的库也自动地引入到项目中。 通过使用implementation关键字,Gradle能够更好地优化编译过程,只将直接使用的库引入项目中,而不会将间接使用的库也引入项目中。这可以有效减少项目的编译时间,并减少最终应用包的大小。 例如,假设库A依赖库B,而项目只直接使用了库A。如果使用compile关键字,则会将库B也引入到项目中,即使项目中并没有直接使用库B。但如果使用implementation关键字,则只会将库A引入项目中,不会引入库B,从而减少了项目的依赖。 除了implementation之外,还有另外两个依赖管理关键字:apitestImplementationapi关键字可以将依赖库引入到项目的编译路径中,并可以传递给依赖项目。而testImplementation关键字则是专门用于引入测试时所需的库。 总而言之,compileimplementation都是用于项目中的依赖管理,但Gradle 3.0及以上的版本推荐使用implementation来更好地管理项目的依赖关系。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值