안드로이드 앱 개발을 시작하면,
화면 레이아웃을 표시하고, View를 참조하기 위해 아래와 같은 코드를 작성한다.
setContetView(R.layout.activity_main);
fineViewById(R.id.text_view_01)
그런데 저 R이란 대체 무엇일까?
# R.java 란?
안드로이드 리소스(레이아웃, 이미지, 문자열 등)를 식별하기 위한 변수들을 관리하는 R 클래스이다.
예를 들어,
1. res/drawable 경로에 my_image_01.png 파일을 추가하면,
2. R.java 파일에 정수 형태의 "my_image_01" 변수가 자동으로 생성되며,
3. 다른 자바 코드에서 "R.drawable.my_image_01" 으로 해당 이미지 리소스를 참조할 수 있게 된다.
/* R.java 클래스 */
public final class R{
// 이미지 리소스 관리
public static final drawable{
// ...
public static final int my_image_01 = 0x32f2729 // 새로 추가한 이미지
}
// 문자열 리소스 관리
public static final string{
// ...
public static final int xxx = 0x52f2723
}
// 레이아웃 리소스 관리
public static final layout{
// ...
public static final int xxx = 0x72f2722
}
}
마찬가지로,
res/layout 경로의 activity_main.xml 파일은 R.layout.activity_main으로 참조할 수 있다.
또한,
레이아웃 파일에 TextView 등을 추가하고 id 값을 설정하면,
R.java파일에 해당 id값을 이름으로하는 정수 타입의 변수가 생성된다.
이 것이 자바 코드에서 R.id.아이디값 으로 해당 뷰를 참조할 수 있게 되는 원리다.
예전에는 이러한 작업이 R.java파일을 통해 진행되었는데,
최신 버전의 Android Studio에서는 R.jar 형태로 변경된 것으로 보인다.
# R.java / R.jar의 위치는?
최신 Android Studio에서는 아래의 경로에 R.jar 형태로 존재하는듯 하다(이건 확실치는 않다...)
프로젝트폴더/app/build/intermediates/compile_and_runtime_not_namespaced_r_class_jar/debug/R.jar
* 최신 안드로이드스튜디오 버전에서는 R.java 를 생성하진 않고, R.class 형태로만 관리된다고 한다.
Android Studio 에서 확인해보려면 아래 경로로 접근하면 된다.
파일의 경로 및 형태와 존재유무는 버전에 따라 달라질 수 있다.
참고로 예전 버전의 Android Studio의 경우, 아래의 경로에 R.java파일로 존재했다.(버전별로 다름)
/프로젝트폴더/app/app/build/generated/source/r/R.java
습관적으로 R.xxx.xx 로 리소스를 참조해왔는데,
R의 정체가 바로 이것이었다.
*** R.java 관련 주의사항
R.java / R.jar은 정해진 규칙대로 리소스 식별 변수를 관리하기 때문에 아래 사항에 준수해야 한다.
1. res 경로의 디렉터리는 추가/수정이 불가하다.
2. 리소스의 파일명은 자바의 명명규칙을 준수해야 한다.(+대문자 사용 불가)
아무리 리소스 파일이 많아져도 폴더를 추가하는 등의 실수를 저지르면 안 된다.
'개발(Development) > Android(안드로이드)' 카테고리의 다른 글
[안드로이드] XML | 코드로 화면을 그리는 메서드: setContentView() (0) | 2021.07.11 |
---|---|
[안드로이드] Entry Point, Launcher, 4대 컴포넌트 개념 (0) | 2021.07.11 |
[안드로이드] 매니페스트(AndroidMainfest.xml) 개념과 구조 (0) | 2021.07.11 |
[안드로이드] 그레이들 Gradle Scripts에 대한 정리 (0) | 2021.07.10 |
[안드로이드] 앱 프로젝트 구조 (0) | 2021.07.10 |
댓글