Gradle3.0新指令api、provided、implementation等对比

Android Studio3.0正式版已经出来了,相比2.x的版本,Gradle版本也升级为了3.x,编译速度提升了很多。
在gadle3.0以后,默认的依赖由以前的compile更改成implementationjava

  • 对比表

    Android Studio 2.X Android Studio 3.X
    apk runtimeOnly
    provided compileOnly
    compile api
    没有对应 implementation
    debugCompile debugImplementation
    releaseCompile releaseImplementation
    androidTestCompile androidTestImplementation
  • api (compile)

    • 依赖向上传递
    • 若A api B, B api C,C module对A module可见
  • implementation (新指令: 具有依赖可见性)

    • 依赖不向上传递android

    • 若A implementation B, B implementation C,C module对A module不可见api

    • 若A implementation B, B api C,C module对A module可见ide

    • 功能同api,区别仅仅是增长了依赖可见性单元测试

  • compileOnly(provided)

    • 只在编译时有效,不会参与打包
    • 若A implementation C,打包后apk(A + C);而A compileOnly C,打包后apk(A);该指令实质:A module伪装依赖了C module经过欺骗编译器编译时检测以免java.lang.ClassNotFoundException编译报错
    • 使用情形
      • A implementation C,B implementation C,打包时A module生成aar(A + C),B module生成aar(B + C)
      • 若改为A implementation C,B compileOnlyC,打包时A module生成aar(A + C),B module生成aar(B)
      • 最终apk包(A + B + C),结果一致
      • 虽然aar(B)不真实依赖C module,但B module确实用到了C module的api。没有运行时错误的缘由:aar(A + C)与aar(B)合并生成apk,B module运行时找到并调用aar(A + C)中的C module
  • runtimeOnly(apk)

    只在生成apk的时候参与打包,编译时不会参与,不多用。测试

  • debugImplementation(debugCompile)

    debugImplementation 只在debug模式的编译和最终的debug apk打包时有效。debug

  • releaseImplementation(releaseCompile)

    releaseImplementation 仅仅针对release 模式的编译和最终的release apk打包。3d

  • androidTestImplementation(androidTestCompile)

    androidTestImplementation 只在单元测试代码的编译以及最终打包测试apk时有效。编译器

做者:Dsiner 连接:https://www.jianshu.com/p/83ddb81e73f9 来源:简书 著做权归做者全部。商业转载请联系做者得到受权,非商业转载请注明出处。
相关文章
相关标签/搜索