Android (안드로이드)

[Android] 매니페스트 Manifest / 매니페스트 파일

Oscar:) 2022. 7. 29. 18:41

 

안드로이드 스튜디오로 안드로이드 공부를 시작한다.

 

안드로이드 공부에 앞서,

모든 앱의 필수 요소인 매니페스트를 짚고 넘어가려 한다.

 

이번 포스팅에서는 매니페스트가 무엇인지 알아보자.

 

 


 

Manifest

사전적 의미로는 '명백한', '나타내다',

'선박, 항공기에 적재된 화물의 총괄 목록' 등 과 같다.

 

 

 

안드로이드에서 매니페스트란 ?

공식 문서에서는 다음과 같이 설명한다.

 

매니페스트 파일은 Android 빌드 도구, Android 운영체제 및 Google Play에
앱에 관한 필수 정보를 설명합니다.

 

공식 문서에서는 '매니페스트 파일' 이라 표현하였다.

 

 

안드로이드에서 매니페스트란,

모든 앱에 반드시 존재하는 앱의 각종 정보를 담고 있는 파일이다.

 

그리고 그 파일은,

앱의 신분증과 같은 역할을 한다고 생각하면 쉽다.

 

우리가 어딘가에 가서 신분증을 내미는 것과 비슷하게,

앱의 입장에서는 매니페스트 파일을 안드로이드 플랫폼에 전달해야 한다.

 


 

그렇다면, 파일이 존재한다는 매니페스트를 한 번 찾아보자.

 

 

새로운 프로젝트를 생성하고, Project 탭을 확인해보면

manifests 디렉토리의 AndroidManifest.xml 형태의 파일로 존재한다.

 

 

파일의 내용은 다음과 같다.

 

 

새로운 프로젝트를 생성하고, 아무것도 건드리지 않은 상태이다.

 

지금은 딱히 별 내용이 없다. 하지만 앱을 만들다 보면,

자연스레 매니페스트 파일의 내용이 조금씩 추가될 것이다.

 


 

앱의 각종 정보를 담고 있다는 매니페스트 파일에는,

어떤 정보가 담기는 것일까?

 

다음과 같이 크게 4가지로 분류하곤 한다.

 

· 패키지 (Package)

· 구성요소 (Components)

· 권한 (Permissions)

· 기기 호환성 (Device Compatibility)

 

 

 

패키지 (Package)

 

앱의 식별자인 패키지 정보를 등록한다.

 

곧, 패키지 정보가 식별자가 된다는 뜻이다.

 

*식별자 = 데이터를 구분하기 위해 일시적으로 표시하는 기호 또는 그 집합

군대에 있었을 때, 피아식별(=적군과 아군을 구분한다) 이라는 용어를 접했던 기억이 난다.

 

 

처음에는 당장 패키지 정보를 사용할 일이 없다.

하지만 나중에 외부에서 가져오는 기능을 사용할 때,

내 앱의 패키지 정보를 기입하는 과정을 겪게 될 것이다.

 

 

패키지의 위치는 다음과 같다.

 

<manifest> 태그의 package 속성에 작성한다.

 

프로젝트를 처음 생성하면 패키지 이름은 비슷할 것이다.

(앱 이름이 myapplication 이다)

 

 

 

앱의 구성요소 (=컴포넌트 Components)

 

앱을 구성하는 요소인

액티비티, 서비스, 컨텐트 프로바이더, 브로드캐스트 리시버를 등록한다.

 

위와 같은 앱의 4대 구성요소는 다음 포스팅에서 자세히 알아보겠다.

 

 

컴포넌트의 위치는 다음과 같다.

 

<application> 태그 안에 작성한다.

 

<application> 태그는 매니페스트 파일 내에 하나만 존재해야 한다.

해당 태그 안에 4대 구성요소를 포함한 다양한 내용들이 작성될 것이다.

 

 

위 사진과 같이, package 속성과 <application> 태그는

기본적으로 (=필수적으로) 생성된다.

 

이외에 권한 & 기기 호환성 요소는 기본적인 요소는 아니지만,

필요에 따라 추가로 작성해주는 요소이다.

 

 

 

권한 (Permissions)

 

앱에서 사용해야 하는 권한 정보를 등록한다.

 

기기에 담긴 사용자의 정보는 민감하기 때문에,

그 민감한 정보를 사용해야 할 때는 권한을 필수적으로 설정해주어야 한다.

 

 

이해를 돕기 위해 예를 들어보자면,

앱에서 사진을 찍어야 한다면 카메라 권한이 필요할 것이고

서버와의 통신이 필요하다면 인터넷 권한이 필요할 것이다.

 


사용자의 입장에서는 보통,

새로운 앱을 설치하고 해당 권한을 필요로 하는 동작을 실행할 때

 

'이 앱에서 다음과 같은 작업을 허용하시겠습니까?'

와 같은 문구가 적힌 창에서 권한 설정을 하게된다.

 

하지만, 위와 같은 선택창은 매니페스트에 작성하는 권한 내용 이외에 

추가적으로 해당 동작 코드 내에 작성해주어야 한다.

 

이에 대한 자세한 내용은 다른 포스팅에서 다루도록 하겠다.


 

 

 

권한의 종류와 내용의 양은 상당하다.

자세한 내용을 원한다면, 공식 문서에서 확인하기 바란다.

 

Manifest.permission  |  Android Developers

android.net.wifi.hotspot2.omadm

developer.android.com

 

 

 

 

기기 호환성 (Device Compatibility)

 

앱에서 요구하는 하드웨어/소프트웨어 기능 및

호환되는 기기 유형을 등록한다.

 


조금 쉽게 풀어서 이야기 하자면,

안드로이드는 다양한 종류의 디바이스에서 사용되고 있다.

 

대부분의 사람들이 알고 있는 휴대폰을 제외하고도,

태블릿, 스마트 시계, 자동차 기능 등

매우 다양한 디바이스에서 안드로이드가 적용되고 있다.

 

즉, 내 앱이 어떤 기기에 호환되는지 정해줄 필요가 있는 것이다.

 

 

휴대폰에서 사용하는 카메라 기능을

안드로이드 스마트 시계에서는 사용할 수 없다거나,

 

휴대폰과 태블릿의 해상도가 다르기 때문에,

각 환경에 맞는 레이아웃 파일을 제공할 준비가 되었는지 등

 

 

프로젝트를 다양한 디바이스에서 제공하기 위해서는,

그만큼 고려해야할 부분이 많아질 것이다.


 

우리가 만든 프로젝트(=앱) 가,

어떤 기기에 호환될 수 있는지 정의해 준다고 할 수 있다.

 

즉, 앱이 필요로 하는 기능을 명시하여,

구글 플레이에서 설치할 수 있는 디바이스를 제한할 수 있게 된다.

 

 


 

 

이번 포스팅에서는 안드로이드 매니페스트에 대해 알아보았다.

 

매니페스트 파일에 담을 수 있는 정보와 역할은 위보다 훨씬 더 많지만,

아는 만큼 보이는 것처럼.

사용하는 것만 작성하기 때문에 아직은 내용이 별게 없다.

 

앞으로 우리가 안드로이드 공부를 하면서 점차 다양한 기능을 사용해 볼 것이고,

그에 맞게끔 매니페스트의 내용을 늘려간다면

매니페스트가 담는 정보의 범위 또한, 자연스레 공부가 될 것이라고 생각한다.

 

 

다음 포스팅에서는 앱의 구성요소 (Components) 에 대해 알아보자.