본문 바로가기

IT/안드로이드 관련

[안드로이드] 전이 의존성 exclude transitive dependency

안녕하세요 남갯입니다

 

오늘은 개발경험하다가 빌드 에러가 난 전이 의존성에 대해 포스팅 해보려고 합니다.

 

프로젝트가 모듈화가 되어있는데, 빌드하는 버젼이 꼬이는 문제가 있었습니다.

 

문제점

1. A모듈에서 특정 라이브러리를 사용하고 있었는데, 해당 라이브러리에서 구글플레이 라이브러리를 사용하고 있었다.  

2. 공통모듈로 뽑을수있는 코드가 있어서 구글플레이 라이브러리의 일부 기능을 공통모듈로 옮겨 사용했다.

 

여기서 문제가 된점은

A 모듈에서 사용한 라이브러리의존성전이가 된 것입니다.  즉 A모듈내의 라이브러리에서 의존성이 전이 되어 빌드버전이 꼬인것이다.

 

의존성확인

위와같이 dependency를 보는방법은

1. 프로젝트로 변경한뒤 external library를 확인한다.

2. 아래의 방법을 통해 그래들에서 원하는 모듈의 의존성을 확인한다.

 

이 작업을 실행하려면 다음 절차를 따르세요.

  1. View > Tool Windows > Gradle을 선택하거나 도구 창 메뉴에서 Gradle 
    을 클릭합니다.
  2. AppName > Tasks > android를 펼치고 androidDependencies를 더블클릭합니다. Gradle에서 작업을 실행하면 Run 창이 열리고 출력 내용이 표시됩니다.

 

 

 

 

com.google.android.gms 의 의존성을 해결방법으로는 두가지가 있다.

 

1. 해당 모듈 라이브러리의 의존성을 배제한다.

implementation ("aaaa.aaa:1.0.1")

예를 들면 이런라이브러리를 사용한다고 했을때

 

implementation ("aaaa.aaa:1.0.1"){
	exclude group: "com.google.android.gms"
}

를 입력해서 사용하는 라이브러리에서의 해당 코드의 의존성 전이를 끊어버린다.

 

 

2. 전체 설정을 통해 배제하는 방법

configurations { 
	all*.exclude group: 'com.google.android.gms'
}

해당코드는 전체 그룹의 의존성을 배제하는 방법으로 추천하지는 않는다.

 

 

 

 

출처

https://developer.android.com/studio/build/dependencies?hl=ko#dependency-types
https://www.crocus.co.kr/1587
https://stackoverflow.com/questions/36103299/in-an-android-gradle-build-how-to-exclude-dependencies-from-an-included-jar-fil