안드로이드 Resources, Assets, R 클래스에 대해 간단히 알아봅니다.

1. Resources

  • 리소스는 애플리케이션이 필요로 하는 코드 이외의 자원
  • 이미지, 오디오, 비디오, 텍스트 문자열, 레이아웃, 테마 등
  • 리소스는 res/ 폴더에 위치시킴
  • 리소스 파일명은 소문자, 숫자, 마침표(.), 언더바(_)로만 구성
  • 리소스는 빌드타임에 안드로이드 빌드시스템에 의해 감지되며, 각 리소스는 고유의 ID를 부여받음
  • 안드로이드는 리소스ID를 포함하는 R 클래스를 생성해줌(aapt)
  • 리소스는 Resources 인스턴스를 통해 액세스됨
  • 리소스는 빌드시 컴파일되어 애플리케이션 바이너리에 포함됨


2. Assets

  • Resources와 비슷하나 자주 사용되지 않음
  • assets/ 폴더에 위치함
  • 어떤 종류의 파일이든 가능
  • 컴파일되지 않고 원시형태 그대로(raw) 패키징됨
  • 바이트스트림(InputStream) 형식으로 읽기 가능
  • 파일시스템의 파일처럼 다루어짐(리소스ID 없음)
  • AssetManager를 이용


* 파일 시스템처럼 다루어진다는 의미
 - 파일목록을 구할 수 있고 순회할수 있고 원하는 파일을 찾을 수 있다(listed, iterated, discovered)

* 하위 디렉토리 구조
 - Assets 디렉토리(assets/)는 하위 디렉토리 구조(hierachy)를 유지할 수 있다.
 - Resources 디렉토리(res/)는 하위 디렉토리 구조를 가질 수 없다(R 클래스에 나타나지 않게됨)
 
* res/raw/ 폴더와 assets/ 폴더의 차이점
 - 리소스ID가 있는가 없는가
 - Resources를 이용하는가 AssetManager를 이용하는가
 - 그 외 큰 차이없는 듯

3. R 클래스
안드로이드는 애플리케이션 소스코드에서 리소스 ID를 쉽게 참조할 수 있게 aapt(android asset packaging tool)를 이용하여 R클래스를 자동으로 만들어서 제공합니다.

 

R 클래스의 구조는 다음과 같습니다.

참고로 framework-res.apk에 포함된 시스템 리소스들의 ID는 android.R 클래스에 정의되어 있습니다.

Posted by 에코지오
,