아는 사람은 알겠지만, Eclipse + Android 는 기본 설정이 Auto Build 다.
즉, 코드 치면 실시간으로 compile 하면서 에러 잡는다.
그리고, 기본적으로 화면 구성하는 layout 은 그냥 xml 추가하면 알아서 R.java 에서 Resource 관리한다.
근데, 이게 ... "cannot be resolved or is not a field" 라고 에러를 뿜어내는 경우가 있다.
보통은 이런 에러 보기도 힘든데.... 그때문에 한번 이런 에러가 나오면, 어찌 대처할 지 모른다.
해당 에러의 근본적인 원인은, 글에 써 있는대로 R.java 에서 추가한 xml 을 사용할 수 없는거다. 이하의 내용을 확인해 보자( 편의상, 추가한 xml 은 layout1.xml 이라고 하자. )
이 경우, 에러 원인은 두 가지다.
1. R.java 에 실제로 layout1.xml 이 없는 경우
> 이클립스 화면 왼쪽 "Package Explore" 에서 현재 작업중인 프로젝트 아래의 "gen" 아래에 있는 R.java 를 확인해 본다.
만일 static final int layout1 이 선언되어 할당되어 있지 않다면, 이건 layout1.xml 파일 자체가 에러가 있는거다.
여기서 주의할 점은, layout1.xml 자체에는 에러가 없다고 하더라도 layout1.xml 이 외부 리소스를 참고하고 있는데 ( include 나 string, style, color , theme 등 ) 해당 리소스가 없거나 맞지 않다면, 에러가 발생해도 화면에 표시되지 않는다.
2. R.java 에는 static final int layout1 이 선언되어 있는데, java 소스 코드에서 SetContent( R.layout.layout1 ) 을 읽지 못하는 경우.
> R.java 에 layout1 이 있는걸 확인했는데도 cannot be resolved or is not a field 가 계속 뜬다면, 이것은 해당 소스가 R.java 를 제대로 include하고 있지 않을 가능성이 크다.
이클립스에서 java 소스 개발할때는 , CTRL + SHIFT + O 키를 누르면 필요한 파일들이 알아서 IMPORT 된다.
그런데 andriod 의 경우... 리소스 파일을 참조하기 위해서는 import 할 때 "패키지 이름.R" 을 import 해야 한다.
예를 들어,
package 이름이 "kr.co.comp.pkg1" 이라면,
import 해야 하는 파일은 "kr.co.comp.pkg1.R" 이다.
근데, 이걸 확인안하고 습관대로 CTRL + SHIFT + O 로 include 하면,
"android.R" 이 import 될 때가 있다.
이러면, 코드 자체에는 문제가 없지만 프로젝트의 R.java 를 가져오지 못했기 때문에 에러가 난다.
이 사실을 모르고 작업하면, 아무리 xml 을 뒤져봐도 문제를 해결할 수가 없다.
이 경우는.... 구글 뒤져봐도 소용없고, StackOverflow 봐도 답없다. 그냥 끝없이 삽질하는 거임.
이상 기록 끝.
'프로그램 > 안드로이드' 카테고리의 다른 글
안드로이드 - @SuppressLint(“NewApi”) annotation (0) | 2014.06.13 |
---|---|
Android의 AndroidManifest.xml 에서 Google Play Service 관련 오류 발생 해결. (0) | 2014.04.15 |
안드로이드 + 이클립스에서 Android SDK 를 업뎃하라고 나오는데, 업뎃하면 에러 떨어질 때. (0) | 2014.04.07 |
LG G2 로 이클립스 안드로이드 개발자 모드 변경. (0) | 2014.03.19 |
Android 에서 Application 객체로 전역변수를 사용할 수 없을 때. (0) | 2013.12.04 |