[안드로이드] 리소스, 그리고 에셋 ( Asset )

반응형





읽기전에 손가락 한번 클릭~ >_<

고마워요 ~ Chu ~ ♥


이어지는 글이 굉장히 늘어나 버렸습니다.-_-;
리소스 관련하여 여러가질 종합하다보니 너무나도 많네요...
아무래도 안드로이드에서 가장 중요한 부분이라 쭐이고 쭐여도 이정도 인듯;;;;




리소스, 그리고 에셋 ( Asset )

리소스는 매우 중요한 부분으로서, 일반적으로 참조하고자 하는 이미지, 오디오, 비디오, 문자열, 테마, 레이아웃 등과 같은 외부 요소들로 이루어집니다.

모든 안드로이드 어플리케이션은 리소스 디렉토리(res/) 와 에셋 디렉토리(asstes/) 를 가집니다.

여기에서 에셋은 원시 바이트를 읽을 때 에셋으로써 저장하는 일을 하며 사용빈도는 실제론 매우 작습니다. 사실, 리소스와 에셋은 차이가 많지는 않은데요,

일반적으로 에셋보다는 리소스를 주로 사용하게 됩니다. 그 이유는 안드로이드의 R 클래스를 통하여 쉽게 참조가 가능하기 때문이겠지요.

에셋은 디렉토리 내의 모든 데이터를 원시 파일로 관리하기 때문에, 그것을 읽기 위해서는 바이트 스트림으로 파일을 읽기위해 에셋 매니저(AssetManager) 를 사용해야되면서, 사실 조금 불편합니다 ㅎ


리소스

리소스는 외부의 비코드(non-code) 파일입니다. 또 빌드시점에서 컴파일되어 어플리케이션에 포함되는데, XML, PNG 등의 파일포맷을 지원합니다.

리소스는 소스 코드 외부에 존재하며, 그 중에서 XML 파일은 호출을 위해 빠르게 로딩될 수 있는 바이너리로 컴파일 된다는 점을 주의하세요.

문자열은 압축 저장형태로 저장이 됩니다. 리소스 시스템은 어플리케이션과 관련된 모든 비코드 정보를 유지해 줍니다. 어플리케이션 소스에서 리소스에 접근하려면 리소스(Resources) 클래스를 사용합니다. 리로스의 인스턴스는 Context.getResources() 메소드로 얻을 수 있습니다~

리소느는 빌드 시점에 바이너리로 컴파일 된다고 했습니다. 이것은 바꿔 말하면, 빌드 과정의 일부로써 각각의 리소스에 대한 심볼들이 만들어 집니다. 즉, 소스코드와 리소스가 일치하는지를 컴파일하여 점검하는 작업입니다.


리소스 생성

리소스는 많은 타입의 리소스를 지원하며, 각각의 포맷, 저장되는곳 들은 그 객체에 타입에 따라 달라집니다.

일반적으로는 세 개의 타입으로 리소스를 만들면 됩니다.
1. XML 파일 ( 비트맵, 우너시 파일을 제외한 모든 것 )
2. 비트맵 파일 ( 이미지 등 )
3. 원시(raw) 파일 : (사운드파일 같은) 그외 모든것들..


실제로는 또 다른 두가지의 다른 타입의 XML 이 존재하는데, 현재 그대로 패키지로 컴파일되는 것과 aapt 에 의해 리소스 생성을 위해 사용되는 것이 있습니다.

프로젝트 내의 'res' 디렉토리 아래 또는 그 하위에 리소스 파일을 저장합니다. 리소스가 위치하는 하위폴더와 파일 포맷에 따라 그것들을 컴파일하는 리소스 컴파일러(aapt) 를 가지고 있습니다.


리소스는 최종적으로 .apk 파일내에 컴파일이 되며, R 이라는 래퍼(wrapper) 클래스를 통해 리소스들을 참조할 수 있게 해줍니다. R 클래스는 파일 경로와 그에 따르는 서브클래스를 포함하고 있습니다.



리소스 파일 타입


res/anim
애니메이션 프레임 또는 트윈드(tweened) 객체로 컴파일되는 XML 입니다.


res/drawable
드로블 리소스 서브타입으로 컴파일되는 이미지 ( png , 9.png - 나인패치 이미지 , jpg 등 ) 파일들. 이 타입의 리소스는 Context.Resource.getDrawable ( R.drawable.imageID ) 로 얻을 수 있습니다.

여기에 위치한 이미지 리소스는 aapt 도구에 의해 무손실 이미지 압축을 통하여 자동으로 최적화됩니다. 이 작업은 동일한 품질의 이미지를 만들지만 메모리는 더 작게 사용하는 기법입니다. 결국 여기의 이미지 바이너리는 빌드 과정에서 변경될 수가 있다는 것을 뜻합니다.

만약, 이미지 최적화를 쓰지 않으려면 이미지를 ' res/raw ' 디렉토리에 넣고 비트스트림으로 이미지를 읽어야만 합니다.



res/layout
레이아웃 또는 레이아웃관련 XML 파일이 위치합니다.


res/values
여러 종류의 리소스 XML 파일들이 위치할 수 있습니다.

※ 디렉토리의 파일 이름은 어떤것이든 가능합니다. 하지만 여기에는 전형적인 이름들이 있습니다. 따라서 여기에 맞추어 만들게되면 좀 더 확장적이고 직관적인 구조를 만들 수 있게 됩니다 ^^

⊙ array.xml : 배열을 정의합니다.

⊙ colors.xml : 컬러 드로블이나 컬러 문자열의 값을 정의합니다. 각각에 대응되는 Resources.getDrawable() 메소드와 Resources.getColor() 메소드를 호출하여 리소르를 얻을 수 있습니다.

⊙ dimens.xml : 크기 ( dimension ) 값을 정의합니다. Resources.getDimension() 메소드로 리소스를 얻을 수 있습니다.

⊙ string.xml : 문자열 값을 정의합니다. Resources.getString() 또는 Resources.getText() 메소드로 얻을 수 있으며 getText() 메소드를 사용하는것이 권장되고 있습니다.

⊙ styles.xml : 스타일을 정의합니다.


res/xml
컴파일 후, Resources.getXML() 메소드 호출로 얻어지는 XML 파일들이 위치합니다.


res/raw
디바이스에 직접적으로 복사되는 파일들이 위치합니다. 즉, 어플리케이션 빌드 과정에서 압축되거나 하지 않는 파일들 말이지요...

R.raw.filename 형태의 ID를 이용하여 Resources.openRawResource() 메소드를 호출하여 얻을 수 있습니다.



컬러 값

컬러값은 16진수의 상수로 정의됩니다.

#RGB
#ARGB
#RRGGBB
#AARRGGBB

로 지정을 할 수 있도록 되어 있습니다. 모든 컬러 값은 알파채널을 지원하기 때문에  'AA' 같은 'A' 는 투명도를 나타냅니다. 투명도가 0인 것은 투명한 상태입니다. 디폴트는 당연히 불투명이지요 ^^






꽤나 긴 글이 될 거라 생각했었는데, 생각보다는 짧은 글이었습니다.
리소스에 대한 내용은 게속 이어집니다 ㅎ

다음글은 이러한 리소스를 사용하기~!
 


관련글



반응형

댓글

Designed by JB FACTORY