본문 바로가기

Trouble Shooting

안드로이드 새모듈 생성, 빌드시 오류

안드로이드 스튜디오 (버전 3.1)을 이용해서 새 모듈을 생성하고, 기존 앱 "build.gradle"파일에 새 모듈을 의존성에 추가, 빌드시 오류가 발생한다. 오류 문구로 이래와 같은 문구들이 여러개 뿌려진다.

"Unable to resolve dependency for ':app@debug/compileClasspath': Could not resolve project :module"


안드로이드 개발자 사이트 문서(한글본)는 최신 내용으로 수정되지 않아서 문제 해결에 도움이 되지 않는다. 또한 안드로이드 스튜디오(버전 3.1)가 모듈을 생성할 때, 파일을 정확히 설정하지 않는 것이 문제가 발생하는 원인중 하나이다.


해결방법 : 새모듈 생성 후 의존성 추가

  1. 스튜디오에서 "File > New > New Module"메뉴를 사용 모듈을 생성한다. 모듈 이름은 "NewLib" 라고 가정한다.
  2. "NewLib" 모듈의 "build.gradle"파일을 수정, 모듈의 플러그인 방식을 라이브러리 방식으로 설정한다.
  3. 앱, "settings.gradle" 'include'항목에 모듈이 추가 되었는지 확인, 없으면 추가한다.
  4. 앱, app모듈의 "build.gradle" 파일을 수정, 새로 생성한 모듈을 의존성에 추가한다. 
  5. 앱과 모듈간의 SDK 버전 혹은 라이브러리 버전등이 호환되도록 조정한다.



모듈의 플러그인 방식 변경 (2번 항)

스튜디오가 모듈 생성시 잘못 만든 "build.gradle"파일을 수정해야 한다. 
  • apply plugin: 'com.android.application' => apply plugin: 'com.android.library' 로 수정
  • "defaultConfig" 항목에서 "applicationId"항목을 삭제


앱, "settings.gradle" (3번 항)

'include' 항목에 모듈이 추가 되었는지 확인하고 없으면 추가한다. 경우에 따라 추가되지 않는다. 아래는 추가된 예이다.
include ':app', ':NewLib'


앱, app모듈에 의존성 추가 (4번 항)

"라이브러리 생성"에 대한 안드로이드 개발자 사이트 문서는 오래된 내용을 담고 있는 듯 하다. 몇몇 문서등에서 안내하는 모듈을 의존성에 추가할 때, 사용하는 'compile' 옵션은 지원 중단된 옵션으로 'implementation'옵션을 사용해야 한다. 관련된 내용은 구글 문서 "https://developer.android.com/studio/build/gradle-plugin-3-0-0-migration"에서 확인할 수 있다. 아래는 발췌한 문구이다.
컴파일 타임에는 모듈에 종속성을 사용할 수 있으며, 런타임에만 모듈 소비자에게 종속성을 사용할 수 있습니다. 대규모의 다중 프로젝트 빌드에서 api/compile 대신 implementation을 사용하면 빌드 시스템이 재컴파일해야 하는 프로젝트의 크기가 줄어들기 때문에 빌드 시간이 상당히 개선될 수 있습니다. 대부분의 앱과 테스트 모듈은 이 구성을 사용해야 합니다.

따라서 앱의 "build.gradle"파일 'dependencies' 항목에 아래 처럼 문구를 추가한다.

implementation project(':NewLib')



마치며

이 문제의 핵심은 스튜디오가 생성해주는 모듈의 "build.gradle" 파일이 잘못 생성되었기(버전 3.1) 때문이다. 따라서 위에서 안내한 대로 정확한 플러그인 방식을 라이브러리 방식으로 설정해주면 문제가 해결된다.