1. 안드로이드 매니페스트(AndroidMainifest)란

안드로이드 어플리케이션에 대한 각종 정보를 기술한 어플리케이션 명세서

 

 

 

2. AndroidMainifest.xml에 기술된 내용

- 안드로이드 어플리케이션을 구성하는 컴포넌트들(Activity, Service, Broadcast Receiver, Content Provider)을 기술해야 한다.

- 어플리케이션을 구성하는 Component들에 대한 해당 클래스명을 정의하고, 그 Component가 처리할 수 있는 기능이 무서인지 Intent-filter를 정의

> 이를 통해 한 안드로이드 어플리케이션 안에 어떤 Component들이 존재하며, 어떤 조건에 해당 Component가 시작돼야 하는지 안드로이드 플랫폼이 알 수 있다.

 

- 안드로이드 어플리케이션이 안드로이드 플랫폼의 제한된 API에 접근하거나 다른 어플리케이션의 제한된 컴포넌트를 사용하기 위해서 필요한 권한을 설정

 

- 안드로이드 어플리케이션을 구동하기 위한 최소한의 SDK 버전을 정의

 

- 안드로이드 어플리케이션이 사용하는 다른 추가적인 라이브러리들을 정의

 

 

 

3. AndroidMainifest.xml

기본적으로 AndroidManifest.xml은 루트 요소가 <manifest>이고, 그 자식으로 <application> 요소가 하나 존재한다.

① <manifest>

 

안드로이드 어플리케이션의 패키지명버전정보(버전 이름과 버전 코드 등)를 정의

여기서는 안드로이드 어플리케이션을 구성하는 자바 클래스들의 패키지명이 android.sample로 시작한다.

 

② <application>

 

어플리케이션의 제목과 아이콘을 정의하고, <manifest> 밑에는 하나의 <application>만 정의된다.

여기서는 안드로이드 어플리케이션 제목이 string 리소스에 있는 app_name 문자열 값으로 설정되어있다.

 

③ <activity>

 

안드로이드 어플리케이션을 구성하는 네가지 Component 중에 Activity를 정의하는 요소

Activity 클래스명과 Activity의 제목을 정의할 수 있다.

여기서는 네 가지 Activity인 MyMultimediaActivity, PictureActivity, MusicActivity, WallpaperActivity가 해당 안드로이드 어플리케이션에 존재하는 것을 알 수 있다.

 

④ <intent-filter>

 

해당 Component의 intent-filter를 가리키는 것으로, 해당 Component(Activity,Service,Broadcast Receiver 등)가 어떤 암시적 Intent를 처리할 수 있는지 정의

<intent-filter>는 그 밑으로 <action> 요소를 정의하여 어떤 작업을 처리할 수 있는지 정의할 수 있다.

<category> 요소를 정의하여 Component의 유형이 무엇인지 정의할 수 있다.

여기에 설정된 intent-filter는 해당 Activity가 안드로이드 어플리케이션이 실행될 때 처음 시작되는 main Activity임을 정의하고 있다.

 

⑤ <uses-permission>

 

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

여기서는 해당 어플리케이션이 카메라와 바탕화면 배경 그림 설정, 진동 기능을 사용할 수 있도록 권한을 설정하였다.

 

 

 

4. <manifest> 밑에 정의될 수 있는 주요 XML요소

 

 

 

5. <application>에 정의될 수 있는 주요 속성

1) <application>

- android:icon : 화면에 표시될 안드로이드 어플리케이션의 아이콘 이미지를 설정

이 안드로이드 어플리케이션에 포함된 모든 Component에 기본 아이콘 이미지로 설정된다.

- android:label : 화면에 표시될 안드로이드 어플리케이션의 제목을 설정

이 안드로이드 어플리케이션에 포함된 모든 Component에 기존제목으로 설정된다.

 

 

2) <activity>

- Activity Component를 정의

- android:name : 속성을 통해 Activity 클래스명을 설정할 수 있다.

- android:icon와 android:label 속성을 재정의하여 해당 Activity만의 아이콘 이미지 제목을 설정할 수 있다.

 

 

일반적으로, 다음과 같이 Intent-filter를 설정하면, 해당 Activity를 해당 어플리케이션이 실행되는 진입점으로 설정할 수 있다.

 

 

3) <service>

- 서비스 Component를 정의

- android:name : 속성을 통해 서비스 클래스명을 설정

- android:icon와 android:label 속성을 재정의하여 해당 서비스만의 아이콘 이미지와 제목을 설정할 수 있다.

<service> 밑으로 <activity>와 마찬가지로 <intent-filter>와 <meta-data> 요소를 정의할 수 있다.

 

 

4) <receiver>

- Boradcast Receiver Component를 정의

- android:name 속성을 통해 Broadcast Receiver 클래스명을 설정할 수 있다.

- android:icon와 android:label 속성을 재정의하여 해당 Broadcast Receiver만의 아이콘 이미지와 제목을 설정할 수 있다.

<receiver> 밑으로 <activity>와 마찬가지로 <intent-filter>와 <meta-data> 요소를 정의할 수 있다.

 

 

5) <provider>

- Content Provider Component를 정의

- android:name 속성을 통해 Content Provider 클래스명을 설정할 수 있다.

- android:icon 과 android:label 속성을 재정의하여 해당 Content Provider만의 아이콘 이미지와 제목을 설정할 수 있다.

<provider> 밑으로는 <grant-uri-permissions>와 <meta-data> 요소를 정의할 수 있다.

 

 

 

6) <uses-library>

이와 같이 Component 외에도 <application>에는 <uses-library>를 자식 XML 요소로 정의할 수 있는데, <uses-library>는 안드로이드 어플리케이션이 다른 추가적인 라이브러리를 사용할 때 해당 패키지를 정의할 때 사용된다.