gradle implementation、compileOnly、api
最近在做项目的时候,由于使用了3.x的gradle,在制作完成sdk后使用到宿主工程后发现原本可用的string资源找不到了,原因是对于新版本的依赖还没有完整的看过,只是知道使用implementation代替了compile,api的使用等,这里写一篇做一个备注。Android Studio3.x 相比 2.x的版本,gradle版本相应的要求升级为了3.x了,升级后,默认的依赖compile变更为implementation,但是并非仅仅是这个变更,会有提示:
Configuration 'compile' is obsolete and has been replaced with 'implementation'.It will be removed at the end of 2018
其实除此外还有api和compileOnly,因此需要了解他们的机制,官网上有介绍,也就是现在compile拆分成了api和implementation两个,分工更加细致了,
- implementation:让依赖仅仅使用在自己的模块中,在编译的时候依赖项不会被他模块使用,但是在运行时可以被其他模块使用。这样可以显着缩短构建时间,因为它减少了构建系统需要重新编译的模块数量。
- api:当模块包含api依赖项时,模块的依赖项传递到其他模块,在运行时和编译时其他模块都可以使用它,如果api依赖的项更改了,Gradle将重新编译在编译时有权访问该依赖项的所有模块,因此,api依赖项会增加构建时间。
- compileOnly:如果使用此配置,则库模块必须包含运行时条件以检查依赖项是否可用,然后正常更改其行为,以便在未提供时仍可正常运行。 这有助于通过不添加不重要的瞬态依赖项来减小最终APK的大小。 此配置的行为与provided的一样(现已弃用)。
总结:
郭慕荣博客园