본문 바로가기
개발(Development)/Android(안드로이드)

[안드로이드] R.java / R.jar 개념 및 위치: 리소스 식별 변수 관리 원리

by 카레유 2021. 7. 11.

안드로이드 앱 개발을 시작하면,

화면 레이아웃을 표시하고, 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. 리소스의 파일명은 자바의 명명규칙을 준수해야 한다.(+대문자 사용 불가)

 

아무리 리소스 파일이 많아져도 폴더를 추가하는 등의 실수를 저지르면 안 된다.

 

 

 

댓글