본문 바로가기
안드로이드 공부 노트

[Android]안드로이드 매니페스트(Manifest)란? - 개념,역할

by 지게요 2022. 3. 10.
728x90
반응형

오늘은 안드로이드의 앱의 필수 구성요소인 매니페스트에 대해 알아보자.

# 매니페스트(Manifest)란?

 Android 빌드 도구, Android 운영체제 및 Google Play에 앱에 관한 필수 정보를 설명한다.

가장 상위 폴더에 AndroidManifest.xml이 있어야 하며, 이 정보는 앱이 실행되기 전에 시스템이 알아야 할 내용을 정의하고 있다.

 

안드로이드 공식 문서 에서는 다음과 같이 말하고 있다.

 

● 매니페스트 파일은 다른 여러 가지도 설명하지만 특히 다음과 같은 내용을 선언해야 합니다. 

      - 앱의 고유한 식별자인 패키지 이름(일반적으로 코드의 네임스페이스와 일치).
      - 앱의 구성 요소(4대 컴포넌트 포함)

      - 앱이 시스템 또는 다른 앱의 보호된 부분에 액세스 하기 위해 필요한 권한

      - 기기 호환성

 

이제 하나씩 차근차근 알아가보자.

 

# 앱의 패키지 이름

앱의 패키지 이름은 일반적으로 프로젝트 디렉터리 구조와 일치한다.

예를 들어 com.example.testapplocation이라는 패키지를 만들었다면 아래와 같은 Manifest 파일이 생성이 된다.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.testapplication">
    ...
</manifest>

이와 같이 패키지는 APK 빌드시 두 가지에 사용된다.

1. 앱 리소스에 접근하기 위해서 사용되는 R 클래스의 네임스페이스로 적용

     위 예제에서는 com.example.testapplication.R 클래스가 생성된다.

2. 매니페스트 파일 내에서 선언된 상대 경로에 적용

     예를 들어 아래 코드를 보자 

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.testapplication">
     <application ... >
        <activity android:name=".MainActivity" ... >
            ...
        </activity>
    </application>
</manifest>

보면 <activity android:name=". MainActivity">라고 선언을 했으면 ". "com.example.testapplication을 의미하기 때문에 한마디로 com.example.testapplication.MainActivity를 의미한다.

# 앱의 구성 요소

안드로이드에는 4대 컴포넌트가 있다. 혹시 알고 있지 않으면 이곳을 눌러보고 오는 것을 추천한다.이러한 컴포넌트들을 사용하기 위해서는 매니페스트 파일에 해당하는 xml 요소를 선언해줘야 한다.가끔씩 액티비티를 만들어놓고 깜빡하고 매니페스트 파일에 적어주지 않는다면 에러가 나게 된다.

 

■ <activity> : Activity의 각 하위 클래스

■ <service> : Service의 각 하위 클래스

■ <receiver> : Broadcast Receive의 각 하위 클래스

■ <provider> : Content Provider의 각 하위 클래스

 

# 앱의 권한

안드로이드는 사용자의 민감한 데이터(연락처, 위치) , 특정 시스템 기능(카메라, 인터넷 액세스)에 엑세스 하기 위한 권한을 요청해야 한다.

각 권한은 고유한 레이블로 식별된다.

예를 들어 카메라에 접근하는 앱은 매니페스트에 다음과 같이 추가해줘야 한다.

<manifest ... >
   <uses-permission android:name="android.permission.CAMERA" />
    ...
</manifest>

# 기기 호환성

앱에 필요한 하드웨어 또는 소프트웨어 기능을 선언할 수 있고, 따라서 앱과 호환되는 기기 유형도 선언할 수 있다. Google Play Store에서는 앱에 필요한 기능이나 시스템 버전을 제공하지 않는 기기에 앱 설치를 허용하지 않는다.

 

매니페스트 태그가 여러 가지 있는데 가장 일반적으로 사용하는 태그를 예를 들자면

■ <uses-feature>  :  자이로 센서 , 나침반 센서와 같은 기능이 필요함을 나타내는 태그이다.

      필요한 센서나 기능들을 없는 앱에서는 설치되지 않도록 막을 수 있다.

예를 들어 나침반 센서를 사용하고 싶다면 아래와 같이 추가해주면 된다.

<manifest ... >
    <uses-feature android:name="android.hardware.sensor.compass"
                  android:required="true" />
    ...
</manifest>

 

 

참고
https://developer.android.com/guide/topics/manifest/manifest-intro?hl=ko
https://programming-workspace.tistory.com/35

 

반응형