Android Studio 3.0+后的module依赖:

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}

在Android studio3.0+中:

  • compile已被弃用,被implementation和api替代
  • provided已被弃用,被compileOnly替代
  • testCompile已被弃用,被testImplementation替代
  • androidTestCompile已被弃用,被androidTestImplementation替代

它们决定了依赖的可见范围。 如:

  • implementation:使用该命令编译的依赖,仅仅对当前的Module提供接口。将该依赖隐藏在内部,而不对外部公开,这是implementation关键字的作用。 该依赖方式所依赖的库不会传递,只会在当前module中生效。 依赖优先设置为implementation的,如果有错,再考虑使用api指令。这样做一来可以隐藏对外不必要的接口,二来可以加快编译速度。可以加速编译的原因是当项目中含有多个Module模块时, 使用implementation指令编译的依赖可以单独在模块内编译。 如果使用的是api或者compile,那么其他模块有引用它时,其他的模块也需要重新编译。

  • api:使用该命令编译的依赖,可以对项目里的所有模块提供接口,对外部公开。 该依赖方式会传递所依赖的库,当其他module依赖了该module时,可以使用该module下使用api依赖的库。
    注意:当我们依赖一些第三方的库时,可能会遇到com.android.support冲突的问题,就是因为开发者使用的compile或api依赖的com.android.support包与我们本地所依赖的com.android.support包版本不一样,所以会报All com.android.support libraries must use the exact same version specification (mixing versions can lead to runtime crashes这个错误。参考《com.android.support版本号冲突的解决办法》

  • compileOnly:只在编译时有效,不会参与打包。可以在自己的module中使用该方式依赖一些如com.android.support这些常用的库,避免冲突。

  • testImplementation:只在单元测试代码的编译和最终打包测试apk时有效。

谢谢阅读

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐