본문 바로가기
학습/Gradle

[gradle] api와 implementation

by KKambi 2020. 4. 26.

api (= old compile keyword)

  • gradle 3.0부터 deprecated된 compile을 대체!
  • transitive dependency들도 consumer에게 라이브러리 노출 O
  • transitive dependency들도 consumer의 classpath에 포함 O

 

implementation

  • transitive dependency들은 consumer에게 라이브러리 노출 X
  • transitive dependency들은 consumer의 classpath에 포함 X
  • 그래서 노출될 필요 없는 의존성들은 api(compile)보다 implementation을 권장

 

api와 implementation 예시

api : 의존 라이브러리 수정 시, 해당 라이브러리를 포함하게 되는 모든 모듈 recompile

implementation : 의존 라이브러리 수정 시, 이를 포함한 라이브러리까지만 recompile

 

Ex. api

  • 라이브러리 B에서 라이브러리 D를 의존성으로 추가
  • app module에서 라이브러리 B를 의존성으로 추가
    • 두 라이브러리 모두 app module에서 접근가능 (classpath에 포함되기 때문)
    • 라이브러리 D 수정 시, D / B / app 모두 리컴파일 필요
    • 라이브러리 D를 포함하고 있는, 라이브러리 B를 추가한 모듈들 모두 recompile

Ex. implementation

  • 라이브러리 A에서 라이브러리 C를 의존성으로 추가
  • app module에서 라이브러리 A를 의존성으로 추가
    • app module에선 라이브러리 A만 접근가능
    • 라이브러리 C가 수정 시, C를 의존성으로 추가한 A까지만 리컴파일하면 됨

 

 

 

참고

https://tjandroid.blogspot.com/2018/11/api-implementation.html

https://jongmin92.github.io/2019/05/09/Gradle/gradle-api-vs-implementation/

댓글