Android/study

[Android] 매니페스트 파일 (AndroidManifest.xml) 분석

written by yunwon 2021. 9. 2. 00:18

 

모든 안드로이드 앱 프로젝트는 프로젝트 소스 세트의 루트에 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 개발자  |  Android Developers

앱 매니페스트 개요 모든 앱 프로젝트는 프로젝트 소스 세트의 루트에 AndroidManifest.xml 파일(정확히 이 이름)이 있어야 합니다. 매니페스트 파일은 Android 빌드 도구, Android 운영체제 및 Google Play에

developer.android.com