gradle implementation和compile(gradle implementation api)

前言最近突然问自己一个问题:对于Gradle来说,实现和api有什么区别?不管有什么不同,我写了很多代码。为什么.
不过既然Google Dad推出了新的Gradle编译器依赖模型,那就有必要了解一下。以防你吹的时候不知道怎么张嘴。
随便Google了一篇文章,感觉特别好懂,很适合“科普”一般阅读。于是我就“厚颜无耻”地翻译了。
上一篇文章速度篇:
《短文速读》中a=a b和a=b的区别
你真的知道《短文速读》超载暗坑,超载改写吗?
一个明确的解释:最终?终于?敲定?
一个足以解决volatile关键字。
假设我们的项目需要以下四个依赖库:
librarylibrarylyyd的依赖关系图如下:
库D:
class class d { fun tellMeAJoke(): string { return \ ‘ You are fun :d \ ‘ } } library c :
class c { fun tellMeAJoke(): string { return \ ‘ You are fun : c \ ‘ } } library b :
class b { fun tellMeAJoke(): string { return \ ‘ You are fun : b \ ‘ } } library a :
A类{ funtellmeajoke(): string { return \ ‘ you are funny : A \ ‘ } }从上面的类文件可以看出,库A和库B分别依赖于库C和库D。在build.gradle中,我们对它们的依赖3360区别对待。我们让LibraryD的依赖使用api,LibraryC的依赖使用实现。
api关键字与旧的compile关键字完全相同。所以如果所有编译都换成api,那就完全是ojbk了。
美国石油学会(American Petroleum Institute)
Lobraryb的build . gradledependencies {//.API项目(path : ‘ 3360 library d ‘)}//build . gradledependencies of App {//.API Project(path : ‘ 3360 libraryB ‘)}这样,我们就可以很自然地使用library b和libraryD的内容了。
@ override protected void onCreate(Bundle savedInstanceState){ super . onCreate(savedInstanceState);class b b=new class b();ClassD d=new ClassD();}实施
当我们使用实现来依赖我们需要的库时会发生什么?
Lobrarya的build . gradledependencies {//.实现项目(path : ‘ 3360 Library ‘)}//build . gradledependencies of App {//.实现项目(PATH3360′ 3360 Librarya’)}在这种依赖下,如果我们想去new ClassC(),我们的ide会“好心”地告诉我们:
也就是说,在实现模式下,我们无法访问依赖(libraryA)的依赖(libraryC)。所以这里有个问题?这有什么好处?
首先,我们明确一下api的坏方式:以api的形式依赖它,你依赖的一切我都会依赖。也就是在我们上面的演示中,虽然我只使用API项目(路径:’ 3360 LibraryB ‘),但是也可以引用libraryD。在这种情况下,每当libraryD改变时,相关API的库将被重新编译。
您需要重新编译libraryD、libraryB和导入到libraryB中的所有其他模块,因为任何其他模块都可能使用libraryD的实现。
但执行却相反。假设libraryC发生了变化,但是由于只有libraryB直接依赖于它,所以只有B和C需要重新编译。
结论如果A依赖b,b依赖C,如果我们A不需要直接依赖C,那么我们就只用实现b,这样可以加快编译速度。

其他教程

adobe acrobat有用吗(adobe acrobat DC是什么软件)

2022-8-31 5:27:50

其他教程

小花疯浪:从街头卖唱到百万粉丝,一股疯浪遍布网络。她的魅力在哪里?

2022-8-31 5:29:54

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索