안드로이드의 의존성을 관리하는 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 |