2019. 2. 7. 11:29ㆍProgramming/Android
Configuration ‘compile’ is obsolete and has been replaced with ‘implementation’ and ‘api’.
Android Studio 3.0에서 빌드를 시도하려고 하니, 위와 같은 오류가 발생했다. compile이 deplecated 됐으니, 대신 implementation이나 api를 사용하라는 내용이다. 그런데 deprecated된 키워드는 하나인데, 대체 키워드는 왜 두 개지? 궁금해서 검색하다가, 다음과 같은 글을 발견했다.
원문; Implementation Vs Api in Android Gradle plugin 3.0, Bedanta Bikash Borah
번역; Implementation Vs Api in Android Gradle Plugin, 오경식 님
위 글에는 Api와 Implementation의 차이가, 예제와 함께 자세히 설명되어 있다. 번역도 잘 되어있으므로, 꼭 한번 읽어보도록 하자.
implementation과 api의 차이
implementation
키워드를 사용하는 경우에는, 직접 참고하고 있는 라이브러리만 사용할 수 있다. 간단히 말해서 main
이 LibraryA
를 참조하고, LibraryA
는 LibraryB
를 참조하고 있는 경우, main
에서는 LibraryA
만 참조할 수 있고 LibraryB
는 참조할 수 없다. 반면 api
키워드는 compile
과 동일하며, api
/compile
을 사용하는 경우에는 모두 참조할 수 있다.
implementation과 api를 구분해서 사용하는 목적
compile이 api, implementation 두 개의 키워드로 구분된 이유는, 빌드에 소요되는 시간 때문이다. 위에 링크를 걸어놓은 글에서도 잘 설명되어있지만, Implementation vs API dependency, Jeroen Mols의 Problem situation과 빌드 구성, Android Developers을 읽어보도록 하자. compile과 api를 사용할 경우에는 항상 의존관계에 있는 모든 라이브러리까지 다시 빌드하므로, 빌드에 상당한 시간이 소요되게 된다.
하지만 implementations
을 사용할 경우에는 직접 의존관계에 있는 모듈에만 사용하므로, 이러한 문제를 어느정도 해결할 수 있다. 위에서 예제로 든 main
->LibraryA
->LibraryB
관계에서, LibraryB
가 바꼈다고 가정하자. 이 때 api
키워드를 사용했다면, main
, LibraryA
, LibraryB
를 모두 다시 빌드해야 한다. 하지만 implementation
를 사용하면, 변경된 LibraryB
를 직접 참조하는 LibraryA
만 빌드하면 된다. main
은 LibraryB
를 직접 참조하지 않으므로, 빌드할 필요가 없다. 따라서 빌드에 소요되는 시간이 줄어들게 된다.
이러한 내용은 의존성이 복잡하면 복잡할수록, 빛을 발하게 된다.
'Programming > Android' 카테고리의 다른 글
RecyclerView와 IndexOutOfBoundsException (0) | 2019.02.14 |
---|---|
WebView와 WebSettings (0) | 2019.02.12 |
loop에서 findViewById 사용하기 (getIdentifier) (0) | 2019.02.11 |
Android Studio의 AVD에서 LG폰이 검색되지 않을 때 (0) | 2019.02.07 |
Multidex와 관련된 문제 정리 (0) | 2019.02.07 |