我的开发环境
android studio 3.6.1
gradle 5.4.1
classpath 'com.android.tools.build:gradle:3.5.2'
classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1'
我们先要明白三个角色(我们要站在多个项目、多个module来理解)
1 my library (就是一个新项目工程,然后在这个项目中new了一个 android library,然后把主要功能代码写到library中, 测试代码写在app中, 通过jitpack发布远程依赖)
2 第三方依赖库
3 使用者(依赖my library 的项目工程)
我是站在my library 的角度上理解
compileOnly :我希望别人来导入我需要库,如果你不导入我要的库,运行时我就报错给你看
compileOnly 只会参与编译,而且不会参与打包。 所以在使用complieOnly时,我们要保证使用者包含 complieOnly的依赖
compileOnly 一般依赖公共库,保证整个项目统一,比如support v7, androidx
implementation :我不准别人使用我依赖的库。你想用,自己去依赖。 你可以不提供我依赖的库并且我保证运行正常
implementation 依赖库只能当前module使用,会参与打包
多个implementation 相同库的不同版本号, 编译器会优先选择版本号高的
api:我允许别人使用我依赖的库
api:会把依赖库传给使用者,使用者的项目External Libraries 中能够看的见。可以在其他module使用,会参与打包。
compile 我老了,有什么事找我儿子api
compile和api一样功能,已被官方废弃不建议使用