본문 바로가기

안드로이드스튜디오

안드로이드 스튜디오 리소스와 매니페스트

728x90
반응형

* 안드로이드 앱은 크게 '자바 코드'와 '리소스'로 구성된다.

자바 코드에서는 앱의 흐름과 기능을 정의하고 리소스에서는 레이아웃이나 이미지처럼 사용자에게 보여주기 위해 사용하는 파일이나 데이터를 관리한다.

 

* 매니피스트는 리소스는 아니지만 설치된 앱의 구성 요소가 어떤 것인지, 그리고 어떤 권한이 부여되었는지 시스템에 알려주기 때문에 매우 중요하다. 

모든 안드로이드 앱은 가장 상위 폴더에 매니페스트 파일이 있어야하며, 이 정보는 앱이 실행되기 전에 시스템이 알아야 할 내용들을 정의하고 있다.

 

* 매니페스트 파일에 들어갈 수 있는 태그 항목

[Reference]
<action> <instrumentation> <provider>
<activity> <intent-filter> <receiver>
<activity-alias> <manifest> <service>
<category> <permission> <uses-library>
<data> <permission-group> <uses-permission>
<data> <permission-group> <uses-permission>
<grant-uri-permission> <permission-tree> <uses-sdk>

이 태그들 중에서 <activity>, <service>, <receiver>, <provider>와 같은 태그들은 앱 구성 요소를 등록하기 위해 사용된다.

 

* 매니페스트의 주요 역할

- 앱의 패키지 이름 지정

- 앱 구성 요소에 대한 정보 등록 (액티비티, 서비스, 브로드캐스트 수신자, 내용 제공자)

- 각 구성 요소를 구현하는 클래스 이름 지정

- 앱이 가져야 하는 권한에 대한 정보 등록

- 다른 앱이 접근하기 위해 필요한 권한에 대한 정보 등록

- 앱 개발 과정에서 프로파일링을 위해 필요한 instrumentation 클래스 등록

- 앱에 필요한 안드로이드 API의 레벨 정보 등록

- 앱에서 사용하는 라이브러리 리스트

 

* 매니페스트 파일에는 타이틀이나 아이콘과 같은 앱 자체의 정보를 속성으로 지정할 수 있으며, 이미지 리소스로 포함된 정보들은 "@drawable/ ..."과 같이 참조하여 지정할 수 있다. 이 때 어플리케이션을 의미하는 <application> 태그는 매니페스트 안에 반드시 하나만 있어야 한다. 나머지 <application> 태그 안의 구성 요소들은 같은 태그가 여러 번 추가되어도 괜찮다.

 

* 리소스를 자바 코드와 분리하는 이유는 이해하기 쉽고 유지관리가 용이하기 때문이다.

프로젝트를 처음 만든 후에는 /app/res 폴더 이외에 /app/assests 폴더를 따로 만들 수 있는데 두 가지 모두 리소스라고 할 수 있으며 대부분은 /app/res 폴더 밑에서 관리된다.

 

* 두 데이터의 차이점

- 애셋(Asset)은 동영상이나 웹페이지와 같이 용량이 큰 데이터를 의미한다.

- 리소스는 빌드되어 설치 파일에 추가되지만 애셋은 빌드되지 않는다.

 

* 리소스는 /app/res 폴더 밑에 있는 여러 가지 폴더에 나누어 저장되며 리소스 유형별로 서로 다른 폴더에 저장한다.

리소스가 갱신되면 그때마다 리소스의 정보가 R.java 파일에 자동으로 기록되며 그 정보는 리소스에 대한 내부적인 포인터 정보가 된다.

 

* Resources 객체는 Context.getResources() 메서드를 이용해 액티비티 안에서 언제든지 참조할 수 있다. 이 객체는 리소스의 유형에 따라 읽어 들일 수 있는 메서드가 정의되어 있어 필요에 따라 사용할 수 있다.

 

* 스타일과 테마는 여러 가지 속성들을 한꺼번에 모아서 정의한 것으로 가장 대표적인 예로 대화상자를 들 수 있다.

대화상자의 경우에는 액티비티와 달리 타이틀 부분과 모서리 부분에 형태가 약간 다르게 보이는데 이런 속성들을 다이얼로그(Dialog) 테마로 정의하여 액티비티에 적용하면 대화상자 모양으로 보이게 된다. 

스타일을 직접 정의하여 사용하고 싶다면 /app/res/values/themes.xml 파일에 추가해야 한다.

반응형