有时候,人就得狠狠抽自己个大嘴巴子,不然自己不抽总会有人替你抽。
----泰语心说
近期我们将开发一个新闻SDK供中兴公司使用,以后也将供给其他三方公司使用。为了使SDK的通用型更强,减少与三方依赖库的冲突,有必要好好了解下Android 中库依赖的方式。
Android Studio 2.x 和 3.x 中的依赖方式发生了些许的变化,
主要变动:
- implementation 和 api 代替了compile;
- compileOnly 代替了 provided;
- runtimeOnly 代替了 apk;
记重点:
compile(2.x):
该方式依赖的库将会参与编译和打包。
implementation(3.x):
该依赖方式所依赖的库不会传递,只会在当前module中生效。例如我在一个common module 中使用 implementation 依赖了一个 SmartRefreshLayout 库,然后 APP 模块依赖了 common module 这个模块,但是APP 模块是不能使用 SmartRefreshLayout 库的。如果,APP 模块也得使用 SmartRefreshLayout 库,那么就得使用 api 依赖了。
api(3.x)和 2.x 版本中的 compile 用法完全一样:
该依赖方式会传递所依赖的库,当其他module依赖了该module时,可以使用该module下使用api依赖的库。
compileOnly:provided
只在编译时有效,不会参与打包。当我们做 SDK 时,为了防止 com.android.support 包冲突时,可以在 SDK 的module 中使用 compileOnly 或者 provided 对com.android.support 进行引用。当然,前提时使用你SDK的module 必须依赖了 com.android.support 包。