안드로이드 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 클래스에 정의되어 있습니다.
'Android' 카테고리의 다른 글
[안드로이드] 디버깅시 SQLiteCursor의 finalize 메소드에서 브레이크가 걸리는 현상 (3) | 2010.08.12 |
---|---|
[안드로이드] 쓰레드 덤프 보기 (1) | 2010.07.27 |
[안드로이드] Heap 메모리 분석 (2) | 2010.05.10 |
[안드로이드] 힙덤프 생성 방법 3가지 (0) | 2010.05.04 |
[안드로이드] 문제해결 방법론 메모 (0) | 2010.05.03 |