모든 안드로이드 앱 프로젝트는 프로젝트 소스 세트의 루트에 AndroidManifest.xml 파일이 있어야 한다.
매니페스트 파일은 안드로이드 빌드 도구, Google Play 에 앱에 관한 필수 정보를 설명한다.
해당 파일의 정의뿐만 아니라, 구성요소들을 살펴보자.
Manifest 란?
- 사전적 의미
[동] 나타내다, 분명해지다
[형] 분명한
[명] (배ㆍ비행기의) 화물 목록, 승객 명단
⚓ 화물 수송 절차에서 화물 목록이 선원 및 화물을 나열하는 것으로부터 가져온 용어 - 컴퓨팅적 의미
컴퓨팅에서 집합의 일부 또는 논리 정연한 단위인 파일들의 그룹을 위한 메타데이터를 포함하는 파일 이다. 예를 들어, 컴퓨터 프로그램의 파일들은 이름, 버전 번호, 라이선스, 프로그램의 구성파일들을 가질 수 있다. - 안드로이드적 의미
모든 앱 프로젝트는 프로젝트 소스 세트의 루트에 AndroidManifest.xml 파일이 있다.
매니페스트 파일은 안드로이드 시스템이 앱을 실행하기 위해 필요한 정보를 정의한다.
& Android 빌드 도구, Android 운영체제 및 Google Play 에 앱에 관한 필수 정보 를 설명한다.
Manifest 구성요소
◽ 앱의 패키지 이름
파일의 루트 요소에는 앱의 패키지 이름에 대한 특성을 넣어야 한다.
빌드 도구는 해당 패키지 이름을 사용해 매니페스트 파일에 선언되어 있는 상대 클래스 이름을 확인한다.
(ex) <activty android:name=".MainActivity"> ⇒ com.yunwoon.clientproject.MainActivity
◽ 앱에서 사용되는 컴포넌트
안드로이드에서 4대 컴포넌트라 불리는 요소들을 사용할 시, 매니페스트 파일에 등록해야 한다.
각 컴포넌트는 아래의 태그를 통해 선언한다.
- <activity> : Activity
- <service> : Service
- <receiver> : Broadcast Receiver
- <provider> : Content Provider
◽ 인텐트 필터
4대 컴포넌트 중 Activity, Service, Broadcast Receiver는 인텐트에 의해 활성화된다.
인텐트란 메세지 객체로, 컴포넌트 간 작업 수행을 위한 정보를 전달하는 역할을 한다.
암시적 인텐트를 통해 사용자로 하여금 어느 앱을 사용할지 선택하도록 할 때 Intentfilter가 필요하다.
- 앱이 인텐트를 시스템에 발행하면 시스템은 매니페스트 파일에 선언된 인텐트 필터에 기초해 인텐트를 처리할 수 있는 앱 구성 요소를 찾습니다.
- 시스템은 일치하는 구성 요소의 인스턴스를 시작하고 해당 구성 요소에 Intent 객체를 전달합니다.
- 두 개 이상의 앱이 인텐트를 처리할 경우 사용자는 어느 앱을 사용할지 선택할 수 있습니다.
- 앱 구성요소는 여러 개의 인텐트 필터를 가질 수 있으며, 각 필터는 기능을 설명한다.
◽ 권한
안드로이드 앱은 민감한 유저 정보나 카메라나 인터넷 등 특정 시스템 기능을 사용할 때 반드시 권한을 요청해야 한다.
앱에서 필요로 하는 모든 권한에는 매니페스트 파일에 <uses-permission> 요소를 설정해줘야 한다.
<uses-permission android:name="android.permission.SEND_SMS"/>
◽ 기기 호환성
앱이 필요로 하는 하드웨어나 소프트웨어 특징을 명시할 수 있다.
예를 들어, 카메라 앱을 만들 경우에 카메라가 필수로 있어야 하기에 카메라가 있는 기기에서만
스토어에서 해당 앱이 다운로드될 수 있도록 아래와 같이 <uses-feature> 태그를 통해 명시하는 것이다.
<uses-feature android:name="android.hardware.camera" />
Manifest 파일규칙
*Android Developers 홈페이지에서 일부 발췌해왔습니다.
- <manifest> 및 <application> 요소만 필수이며, 두 요소는 각각 한 번만 실행되어야 한다
- <application> 요소는 <manifest> 요소 내부에 있는 마지막 요소여야 한다
- <activity-alias> 요소는 이 요소를 별칭으로 사용하는 <activity> 다음에 와야 한다
- 둘 이상의 값을 지정할 수 있는 경우, 한 요소 안에 여러 값이 나열되지 않고 해당 요소가 반복 작성된다
- 리소스는 "@[package:]type(리소스의 유형)/name(특정 리소스를 식별하는 이름)" 과 같은 형식의 값으로 표현된다
Manifest 태그 항목들
태그 | 설명 |
<action> | 인텐트 필터에 작업을 추가한다 |
<activity> | 액티비티 구성 요소를 선언한다 |
<activity-alias> | 액티비티의 별명을 선언한다 |
<application> | 애플리케이션을 선언한다 |
<category> | 인텐트 필터에 카테고리 이름을 추가한다 |
<data> | 인텐트 필터에 데이터 사양을 추가한다 |
<intent-filter> | 액티비티, 서비스 또는 Broadcast Receiver가 응답할 수 있는 인텐트 유형을 지정한다 |
<manifest> | AndroidManifest.xml 파일의 루트 요소 |
<permission> | 각 구성 요소나 기능에 대한 액세스를 제한하는데 사용하는 보안 권한을 선언한다 |
<provider> | 콘텐츠 제공자 구성 요소를 선언한다 |
<receiver> | Broadcast Receiver 구성 요소를 선언한다 |
<service> | 서비스 구성 요소를 선언한다 |
<uses-permission> | 앱이 올바르게 작동하기 위해 사용자가 반드시 부여해야 하는 시스템 권한 |
© 참고
https://developer.android.com/guide/topics/manifest/manifest-intro?hl=ko
'Android > study' 카테고리의 다른 글
[Android] 안드로이드 이벤트 (0) | 2021.09.07 |
---|---|
[Android] 인텐트의 정의와 종류 (+ 플래그) (0) | 2021.09.02 |
[Android] 안드로이드 레이아웃과 속성 (0) | 2021.08.08 |
[Android] 안드로이드 액티비티 생명주기와 상태 (+ 호출 예제) (0) | 2021.08.08 |
[Android] 안드로이드의 특징과 4대 컴포넌트 (2) | 2021.08.05 |