안드로이드 스튜디오 라이브러리 오류 - andeuloideu seutyudio laibeuleoli olyu

2번째 방법, Sync Project with Gradle Files

2번째 방법입니다. 안드로이드 프로젝트는 초기 빌드 시 Gradle 파일이 생기며, 이와 동기화 시켜줍니다. Gradle은 호환될 기기의 버전, 외부 라이브러리 선언 등 다양한 설정을 하는 파일입니다. 필수적으로 사용자가 작성한 App의 프로젝트 코드와 동기화를 이루어야 정상적으로 디버깅이 가능하게 됩니다.

하지만 이러한 Sync가 제대로 맞춰져 있지 않을 경우 Gralde 파일과 프로젝트의 싱크를 다시 맞춰주는 작업을 시도해야 합니다. 그 작업이 바로 File 카테고리에 위치한 Sync Project with Gradle Files 입니다. 

안드로이드 스튜디오 라이브러리 오류 - andeuloideu seutyudio laibeuleoli olyu

스튜디오 우측 상단에 위치한 툴바에서 Sync 아이콘을 클릭하여 동작하는 방법도 있습니다.

3번째 방법, Invalidate Caches/Restart

3번째 방법입니다. 여기까지 안왔으면 더 좋았을텐데 아쉽습니다. 이번 방법은 시간이 오래걸리는 만큼 더욱 확실한 방법이며, 더이상은 마지노선에 다가섰다고 보시면 됩니다. File 카테고리의 Invalidate Caches/Restart 입니다.

이 방법은 캐시를 무효화하고, 스튜디오를 재시작하는 것으로 프로젝트와 관련한 모든 캐시를 삭제하여 재빌드하는 방법입니다. 만병통치약으로 불립니다.

위 같은 다이얼로그가 호출되면 파란색 버튼 '무효화와 재시작'을 클릭하시면 스튜디오가 종료되고, 재시작 됩니다. 이후 새롭게 빌드하게 됩니다. 이 방법으로 대체로 해결되나 저는 물론 해결하지 못했습니다.

마지막으로 제가 해결한 방법을 알려드리겠습니다.

마지막 방법, 다 갈아 엎기

부제목이 살벌하지만 정답입니다. 물론 스튜디오를 삭제하고 다시 설치하라는 뜻은 아닙니다. 저는 안드로이드 플러그인 버전이 3.1.X에서 3.2.1로 올라간지 얼마안돼서 이같은 오류가 발생했습니다. 따라서 버전이 이동하며 문제가 생겼다고 생각했고 다음과 같은 방법을 활용했습니다.

C:\Users\[유저이름]에 들어가시면 다음과 같은 '.AndroidStudio3.X' 폴더가 있습니다. 저는 3.0, 3.1, 3.2가 존재했습니다. 

이제 현재 버전에 맞지 않는 3.0과 3.1 폴더를 삭제하고, 스튜디오를 재시작합니다. 그럼 제일 처음 스튜디오를 깔았을 때와 같은 UI가 나오고, 프로젝트를 다시 여시면 됩니다. 오랜 시간 기다리면 빌드가 성공하고,(만약 실패할 경우 Rebuild) 'Cannot resolve symbol~' 과 같은 에러가 사라집니다. 외부라이브러리가 있었던 경우, 다시 Jar을 프로젝트에 풀어주어야 합니다.

만약 혹시 진짜 이 방법으로도 에러가 발생한다면,

그건 코드를 다시 확인하셔야합니다.

후기 및 정리

이틀동안 프로젝트를 진행하지 못하게 막았던 에러입니다. 온갖 시도 끝에 찾은 방법으로 여러분들은 이글을 보고 보다 빨리, 보다 쉽게 해결했으면 좋겠습니다. 감사합니다.

조금의 도움이 되셨다면 로그인 없이도 가능한 댓글과

왼쪽 아래 ♥공감 버튼을 꾹 눌러주세요! 

안드로이드 스튜디오 (버전 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번 항)

컴파일 타임에는 모듈에 종속성을 사용할 수 있으며, 런타임에만 모듈 소비자에게 종속성을 사용할 수 있습니다. 대규모의 다중 프로젝트 빌드에서 api/compile 대신 implementation을 사용하면 빌드 시스템이 재컴파일해야 하는 프로젝트의 크기가 줄어들기 때문에 빌드 시간이 상당히 개선될 수 있습니다. 대부분의 앱과 테스트 모듈은 이 구성을 사용해야 합니다.

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

implementation project(':NewLib')

마치며

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