안드로이드 어플리케이션 오류 : unresolved references 해결
안드로이드 어플리케이션 개발 오류👊와 해결💪 : unresolved references
✨ Unresolved References 오류?
안드로이드 어플리케이션을 개발하면 만날 수 있는 다양한 오류 중 하나로 'unresolved references' 오류가 있다.
모든 모듈이나 패키지, 또는 잘못된 변수나 함수 이름 등 종류를 망라해 import 되지 않았다면 로그 창에 붉은 글씨로 출력 되는 오류다.
이 오류를 마주한 사람은 알겠지만, 특정 단어 한 가지에서만 일어나는 것이 아니라 다양한 단어를 대상으로 생기며, 분명 10분 전에 run할 때에는 괜찮았는데 갑자기 인식하지 못하겠다며 발생하기도 한다.
이를 해결하고자 많은 방법을 찾아다녔는데, 기록해두어 다음에는 더 수월하게 해결할 겸, 같은 문제를 마주한 다른 사람들에게 도움이 되고자 설명하고자 한다.
✨ Unresolved References 해결 방법?
나를 비롯해 많은 사람들을 힘들게 하는 이 문제에 대한 여러가지 해결 방법을 알아보자. 한 가지 방법으로 해결되지 않을 수 도 있어서 여러가지 방법을 찾아보았다.
📍 오타 확인
개발의 가장 큰 적은 오타라는 말에 동의하는 편이다. 혹여 오류가 난 부분이 id값, 파일 명이라면 다시 원본 텍스트를 그대로 복사해 넣어보자. 놓친 오타가 있었을 수도 있다. 하지만 만약 오타의 문제가 아니라면 아래의 방법을 시도해보길 바란다.
📍 import 구문 및 경로 확인
경우에 따라 상대 경로나 절대 경로를 사용하여 모듈을 임포트 해야 할 수 있다. 이러한 경우들을 잘 따져서 import 문을 작성했는지 확인해야 한다.
📍 프로젝트 구조 확인
오류가 발생한 파일이나 디렉토리가 올바른 위치에 있는지 확인한다. 페키지 구조와 파일 경로가 일치하는지 확인해 ide가 모듈을 잘 찾을 수 있도록 한다. 패키지 명은 각 코틀린 혹은 자바 파일의 첫 줄에 명명되어 있다.
📍 alt + enter
붉은 글씨로 표시되며 오류가 난 부분을 클릭한 뒤, 'alt +enter' 키를 함께 누르면 해당 오류를 해결할 방법을 ide가 추천해준다. 그중 'import' 항목이 있다면 이를 눌러서 해결할 수 있다.
📍 add unambiguous imports on the fly
안드로이드 스튜디오 설정 창에 들어가서 몇 가지 변경을 해주는 방법이다.
file > setting > editor > general > Auto import 경로로 이동해준다.
사용하고 있는 언어(Java / Kotlin / C / C++)에 따라 두 가지 이상의 설정을 확인한다. 혹은 setting으로 이동한 뒤, 검색 창에 unambiguous를 검색하면 된다.
file > setting > editor > general > Auto import |
작성한 파일 내에서 내가 사용하는 다양한 내용을 본 코드 작성에 앞서서 import 하는 과정이 필요하다. 보통 ide가 알아서 import시켜주거나, alt+enter를 이용해 사용자가 직접 넣는 과정을 통해서 해결할 수 있다. 그런데 이러한 과정으로도 잡히지 않았다면, 자동으로 불분명한 내용도 import 시키도록 설정하는 과정이 필요하다. 이를 위해서 두 가지 설정을 모두 체크 해 준다. 이후 오류가 난 부분을 지웠다가 다시 입력하는 방법 등을 통해 해결할 수 있다.
📍 프로젝트 빌드 초기화
ide의 상단 Build > Clean Project 를 눌러 프로젝트 빌드를 초기화 한다.
작성한 파일 내용이 삭제되는 것이 아니므로 걱정하지 않아도 괜찮다.
이후 동일한 경로에 있는 Build > Rebuild Project를 통해서 방금 전에 지운 프로젝트를 다시 빌드 해준다.
이와 같은 간단한 초기화 과정을 통해서 오류를 해결하는 방법이 있다.
📍 프로젝트 캐쉬 초기화
프로젝트를 개발하는 과정에서 여러 번 수정하고 빌드하는 과정에서 이전에 작업한 내용에 대한 캐쉬가 쌓여 프로그램 설치 혹은 로딩에 어려움이 생길 수도 있다. 이를 해결하기 위해서 캐쉬를 초기화 하는 방법이 있다.
ide 상단의 File > Invalidate Caches... 를 누르면,
아래와 같은 팝업 창이 뜨면서 캐쉬 삭제에 대한 몇 가지 옵션을 제시하면서 이후 프로젝트가 자동으로 다시 시작될 것을 이야기한다.
작업하려는 조건에 따라서 위 3가지 옵션을 선택한 후, Invalidate and Restart를 누른다.
ide가 자동으로 꺼졌다가 다시 켜지며 이전까지 작업한 내역에 따라 쌓여있던 캐쉬가 삭제될 것이다.
📍 관련 리소스 파일 삭제 후 실행
경우에 따라서 특정 단어와 관련된 unresolved references 오류의 경우에는 특정한 해결 방법이 있기도 하다. run 혹은 빌드 할 경우 자동으로 생기는 파일을 사용자가 수동으로 삭제한 후, 다시 프로젝트를 실행하는 방법이다. 설명이 추상적이므로 특정 오류를 예로 들어 살펴보자.
아래의 예시는 구글 로그인 인증 과정 코드 중 일부이다.
코드 내용 중, 주황색 박스 친 부분 "default_web_client_id" 에 대해서 unresolved references 오류가 발생할 수 있다.
이는 firebase를 통해서 사용자 로그인 인증에 대한 json파일을 추가 했을 때 자동으로 생기는 파일 values.xml에서 정의되는 내용과 관련이 있다. 그런데 이 내용의 파일이 정상적으로 작성되지 않았을 때 nresolved references 오류가 발생할 수 있다. 아래의 사진은 앞서 설명한 사용자가 직접 추가해야 하는 json파일이다.
그리고 자동으로 생기는 values.xml 파일은 아래와 같은 위치에서 확인할 수 있다.
전체 프로젝트 폴더 명 > app > build > generated > res > google-services > debug [main] > values > values.xml
아마 기본 프로젝트 설정이 'app'으로 되어있을 텐데, 이를 'project'로 바꾸면 더 쉽게 확인할 수 있다.
해당 위치에 values.xml 파일이 없다면, 앞서 설명한 사용자가 추가한 json 파일에 대한 인식이 원활하게 이루어지지 않은 것이다. 이를 삭제한 후, 다시 파이어 베이스로 이동해서 해당 구글 인증 관련 파일을 다운 받아서 편집 중인 파일에 다시 붙여 넣으면 된다.
위의 이미지는 앞서 설명한 values.xml 파일의 내부다. 만약 정상적으로 파일이 잘 생성되었다면 이미지의 주황색 박스에서 볼 수 있듯, "default_web_client_id" 라는 단어가 명명되었음을 확인할 수 있다.
결국 하고 싶은 말은, unresolved references 문제는 프로젝트 실행 시 자동으로 생성되는 파일의 오류로 인해 발생할 수도 있으며, 부분적인 초기화 및 프로젝트 재실행을 통해서 해결할 수 있다는 점이다.
이렇게 unresolved references 오류에 대한 8가지의 해결 방법을 간략히 살펴봤다. 이 문제에 대한 해결책은 아마 본 블로그에서 설명한 것보다 더 다양할 수 있다. 설명한 방법이 도움이 되었다면 좋겠다. 😉
댓글
댓글 쓰기
궁금한 점이나 더 알고 싶은 점이 있다면 거침없이 말해주세요!