본문 바로가기

코딩/안드로이드

Gradle : implementation VS compileOnly

안드로이드의 의존성을 관리하는 gradle을 이용하게 되면 습관적으로 implementation을 사용하게 된다.

 

그런데 여러 모듈을 개발하고 해당 모듈의 aar을 이용하여 개발을 만약 하게 된다면, 의존성 충돌때문에 빌드가 되지 않는 경우를 경험할 수 있을 것이다.

 

예를 들면 이렇다.

 

 

메인 프로젝트 : rxjava는 jar을 통해 implemetation, rxandroid는 aar을 통해 implementation, 그 외에 여러가지 jar, aar 파일을 implementation filetree를 통해 의존

 

서브 모듈 : rxjava와 rxandroid를 마찬가지로 jar과 aar을 통해 의존

 

 

이런 프로젝트에서 서브 모듈을 aar로 빌드한 뒤 메인프로젝트에 넣고 메인프로젝트를 빌드하면

 

rxjava, rxandriod가 중복되어 의존하게 되어서 빌드되지 않는다.

 

이럴때 서브모듈에서 implementation이 아니라 compileOnly를 이용하여 rxjava와 rxandriod를 의존하면 된다.

 

complieOnly filetree(....include: [rxjava-2.7.1.jar, rxandroid-2.1.1.arr,.....]......)

 

 

이렇게하면 서브모듈에서는 컴파일 할 때만 rx에 의존성을 가지게 되고 메인 프로젝트에서는 서브모듈의 의존성을 알수 없게 되므로 빌드가 잘된다.

 

 

 

그 외에 gradle에는 implementation외에 api와 같은 것들이 있으니 알아보면 쓸모가 있을 수 있다.

 

 

'코딩 > 안드로이드' 카테고리의 다른 글

헤더가 찰싹 달라 붙는 스크롤 뷰 (Sticky Scroll View)  (4) 2019.09.28
Android DiffUtil  (0) 2019.09.12
RxJava와 Room DB  (0) 2019.05.26
Android Action Mode  (0) 2019.05.13
Android View Stub  (0) 2019.05.13