본문 바로가기

OS/Android

안드로이드 ManifestFile

반응형

 

 

안드로이드를 개발하기 위해선 먼저 ManifestFile에 대해 알아야 작업하는 도중 헤매지 않고 수월하게 개발을 할 수 있다. 모두 다 외우진 않더라도 태그들을 보고 어떤 것을 의미하는지는 알아야 한다.

 

 

ManifestFile이란 무엇인가? 

 

Manifest의 사전적 의미 : 나타내다, 드러내다

 

모든 어플리케이션에는 루트 라이브러리에 AndoroidManifest.xml 파일이 존재해야 한다.

 

Android 시스템이 앱의 코드를 실행하기 전에 확보해야 하는 앱에 대한 필수 정보를 시스템에 제공한다.

 

Manifestfile을 보면 대략적인 어플리케이션 정보를 확인할 수 있다. 권한(Permission), API 최소 레벨, 라이브러리, 컴포넌트(Activity, Provider, Receiver, Service) 등

 

 

태그 역할

 

1. manifest : 패키지 이름, 버전 코드, 버전 이름을 정의한다.

 

Xmlns 속성은 xml namespace의 약자로 xml문서 작성시 네임스페이스를 지정해줌으로써 이 문서는 어떤 형태로 작성 되었는지 명시할 수 있다.

 

package 속성은 고유의 식별자이고 안드로이드에서 프로젝트를 생성할 때 자신이 생성한 package 이름이 자동적으로 생성된다. 쉽게 말해서 package는 앱의 고유 아이디라고 볼 수 있고 구글 앱 플레이 스토어에 앱을 올릴때 구분하는 역할을 한다.

 

package 속성은 고유의 식별자이고 안드로이드에서 프로젝트를 생성할 때 자신이 생성한 package 이름이 자동적으로 생성된다. 쉽게 말해서 package는 앱의 고유 아이디라고 볼 수 있고 구글 앱 플레이 스토어에 앱을 올릴때 구분하는 역할을 한다.

 

versionCode와 versionname은 똑같이 내부 버전을 뜻하지만 versioncode는 사용자에게 보여지는 번호가 아니고 versionname은 사용자에게 보여지는 번호라는 차이점이 있다.

 

installLocation은 응용프로그램의 기본설치 위치를 뜻하고 내부, 외부 저장소에 설치 가능하다.

 

shareUserid는 동일한 userid를 가진 응용프로그램의 경우 서로의 데이터에 접근할 수 있다. (보안상 문제로 잘안쓰인다고 한다.)

 

shareduserlabel은 동일한 userid를 가졌을 경우 구분하기 위해 사용하는 속성이다.

 

2. Componenet(Activity, Service, Receiver, Provider)

 

Activity : 사용자 인터페이스를 구성하는 기본 단위이다. 눈에 보이는 화면 하나가 activity이며 여러 개의 뷰들로 구성된다. 예를 들어서 보통 어플리케이션을 실행하였을 때 보여지는 화면들이라고 보면 쉽게 이해할 수 있을 것이다.

 

Service : UI가 없어 사용자 눈에 직접적으로 보이지 않으며 백그라운드에서 실행되는 컴포넌트이다. 예를 들어서 멜론이나 벅스와 같은 뮤직 플레이어 앱은 재생화면 외에 다른 화면에서도 정상적으로 음악이 흘러나오는 것을 예로 들 수 있다.

 

Receiver : 시스템으로부터 전달되는 방송을 대기하고 신호 전달시 수신하는 역할을 한다. 정확한 이름은 BroadCastReceiver이며 음악 플레이어 앱을 사용하는 도중에 전화가 오면 음악이 잠시 멈춰지는 것과 같이 어떠한 신호를 주고 받을 때 사용하는 것이다.

 

Content Provider : 다른 응용프로그램을 위해 자신의 데이터를 제공하거나 제공 받는 것을 Content Provider라고 한다. 예를들어 사용자의 주소록이 필요한 앱을 만들 때 기존에 사용자들이 설치한 전화번호 데이터를 활용할 때 사용된다.

 

                              

3. Intent

 

4가지 컴포넌트들을 통신하기 위한 중간자 역할을 담당한다.

 

어플리케이션 구성요소를 호출하거나 메시지를 보낼 때 사용하고 정보의 형태에 따라 명시적 인텐트와 암시적 인텐트로 나뉜다.

 

명시적 인텐트 : 구성 요소를 이름으로 지정하여 사용하는 것을 이야기 한다. 보통 명시적 인텐트는 자신이 만들 앱 안에서 구성요소를 시작할 때 사용된다. 따라서 intent filter를 무시하고 원하는 activity로 intent를 건내주는게 가능하다.

 

암시적 인텐트 : 특정 구성 요소의 이름을 대지 않지만 그 대신 수행할 일반적인 작업을 선언하여 또 다른 앱의 구성 요소가 이를 처리할 수 있도록 한다. 암시적 인텐트는 andoridmanifest에 정의된 intent-filter의 action과 category에 의해 인텐트를 필터하고 필터된 intent만을 건내주는 방식이다.

 

4. Intent-Filter

 

암시적 인텐트 해석 과정에서 각 컴포넌트의 정보를 비교하기 위해 각 컴포넌트에 자신이 받을 수 있는 인텐트의 종류를 매니페스트에 정의하는 것이다.

 

구성요소(activity service, broadcast, receiver)가 응답할 수 있는 intent 타입을 지정한다. 즉, 수행되어야 할 action을 서술해 놓은 묶음이며, action, category, data를 포함한다.

 

5. Action

 

수행되어야 하는 작업 내용이다.

 

암시적 인텐트 내의 액션을 검사하여 intent- filter에 정의된 액션과 일치하는지 여부를 검사한다.

 

최소한 한 개 이상 intent-filter에 포함되어야 한다.

 

Activity, Broadcast 두 종류의 action이 있다.

 

6. Category

 

인텐트 내의 카테고리를 검사하여 인텐트 필터에 정의된 카테고리와 일치하는 검사한다.

 

Action 검사는 인텐트에 정의되어 있지 않을 때도 검사를 통과할 수 있지만 카테고리 검사는 정확히 일치해야 통과할 수 있다.

 

인텐트를 수신하여야 할 컴포터넌트의 종류에 대한 정보를 포함하는 문자열을 정의한다.(즉, 액션이 필요한 추가적인 정보를 제공한다.)

 

7. URI(Data, 데이터주소)

 

인텐트 내의 데이터를 검사하여 인텐트 필터에 정의된 data와 일치하는지 검사한다.

 

Data는 데이터의 값을 의미하는 것이 아니라 호출 대상 activity가 처리 해주었으면 하는 "데이터 주소"이다. 예를 들어서 action이 action_dial 상수라면 데이터 필드는 통화해야 할 전화번호를 가진 'tel:URI'를 가지고 와야 한다.

 

8. Application

 

어플리케이션의 제목과 아이콘을 정의한다.

 

manifest 밑에는 하나의 application만 정의된다.

 

9. Uses-permission

 

어플리케이션의 리소스 접근 및 기능 사용 권한을 정의한다.

 

안드로이드 어플리케이션이 특정 내장 리소스에 접근하거나 특정 내장 기능을 사용하려 한다면 필요한 권한을 명시해야 한다.

 

10. Permission

 

안드로이드 어플리케이션이 제공하는 데이터나 기능 등에 대한 사용을 제한하는 자신만의 권한을 등록하여, 다른 어플리케이션들이 해당 어플리케이션의 데이터나 기능 등을 이용할 때 설정해야만 하는 권한이다. (고유한 이름을 사용해야 한다)

 

11. grant-uri-permission 

 

content provider와 연관되어 있다.

 

일시적인 권한을 얻을 때 사용된다.

 

만약 grant-uri-permission의 속성이 true인 경우 데이터에 대해서 provider에 권한이 있을 경우 권한을 줄 수 있다.

 

12. path-permission

 

provider 내의 특정 데이터들에 대한 사용권한과 경로를 정의한다.

 

여러번 지정하여 여러 경로를 제공할 수 있다.

 

13. Permission-tree

 

퍼미션 트리에 대한 이름을 선언한다. 트리내 모든 이름들에 대해 권리를 갖는다.

 

14. Permission-group

 

퍼미션 그룹에 대한 이름을 선언한다.

 

15. Uses-sdk

 

안드로이드 어플리케이션이 필요로 하는 최소, 최대 SDK 버전을 지정한다.

 

즉, Uses-sdk를 보면 어떤 단말기를 지원하는지 알 수 있다.

 

16. Uses-feature

 

안드로이드 어플리케이션이 필요로 하는 모바일 기기의 하드웨어나 소프트웨어 기능을 지정한다.

 

Uses-permission과는 달리 앱 내에서 특정 API나 기능을 사용하는데 영향을 미치치 않으며 오직 외부 어플리케이션이 앱의 특징을 확인하기 위해 사용된다.

 

 

17. Uses-configuration

 

어플리케이션이 필오로 하는 HW, SW 기능을 지정한다. 만약 서로 다른 디바이스 설정을 필요로 한다면 별도로 선언해야 한다.

 

18. supports-screen

 

어플리케이션이 지원할 수 있는 화면 크기와 지원할 수 없는 크기를 지정할 수 있다.

 

요즘 스마트폰들은 대부분의 화면 크기를 지원하고 있다.

 

19. data

 

intent 내의 data를 검사하여 intent - filter에 정의된 data와 일치하는지 검사한다.

 

Data의 타입을 지정한다.

 

Data는 데이터의 값을 의미하는 것이 아니라 호출 대상 activity가 처리해 주었으면 하는 "데이터 주소"이다.

 

20. meta-data

 

-  기본적으로 전체 프로젝트를 통해 엑세스할 수 있는 정보를 저장하는 추가 옵션이다.

 

manifest 파일에 애드몹 키 값과 같은 데이터를 저장할 때 사용된다.

 

21. supports-gl-texture

 

어플리케이션이 해당 포맷을 지원하도록 한다. 

 

반응형