본문 바로가기

Android

[Android] 안드로이드 매니페스트(Manifest)란?

728x90

Manifest란?

Manifest는 앱의 기본 정보와 시스템 권한, 컴포넌트 등을 정의하는 필수적인 설정 파일이다.

앱이 실행될 때 안드로이드 운영체제는 이 파일을 참고하여 앱의 구조와 동작 방식을 이해하고, 필요한 권한과 기능을 적절히 할당한다.

Android Manifest

  • 주요 속성 : <manifest>, <application>, <activity>, <service>, <receiver>, <uses-permission>, <meta-data>
     
    <manifest> package, xmlns:android
    <application> allowBackup, icon, label, theme, usesCleartextTraffic
    <activity> name, exported, launchMode, screenOrientation, theme
    <service> name, exported, foregroundServiceType
    <receiver> name, enabled, exported
    <uses-permission> name (필요한 권한 설정)
    <meta-data> name, value (앱 설정 값)
  1. <manifest> 태그속성
    매니페스트 파일의 최상위 태그 

    package 앱의 고유 패키지명을 정의 (예: com.example.myapp)
    xmlns:android 안드로이드 네임스페이스를 정의 (http://schemas.android.com/apk/res/android)
  2. <application> 태그 속성
    앱의 전체적인 설정을 정의

    android:allowBackup 앱의 데이터 백업을 허용할지 여부 (true/false)
    android:icon 앱 아이콘 지정 (@mipmap/ic_launcher)
    android:label 앱 이름 지정
    android:theme 앱의 기본 테마 설정
    android:networkSecurityConfig 네트워크 보안 설정 파일 지정
    android:supportsRtl 오른쪽에서 왼쪽(RTL) 언어 지원 여부
    android:usesCleartextTraffic HTTP 비암호화 트래픽 허용 여부 (true/false)
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="MyApp"
        android:theme="@style/AppTheme"
        android:usesCleartextTraffic="false">
  3. <activity> 태그 속성
    앱에서 사용되는 액티비티(화면) 를 정의

    android:name 액티비티 클래스명 지정 (예: .MainActivity)
    android:exported 다른 앱에서 이 액티비티를 호출할 수 있는지 여부 (true/false)
    android:launchMode 액티비티 실행 방식 (standard, singleTop, singleTask, singleInstance)
    android:theme 특정 액티비티에 사용할 테마 지정
    android:screenOrientation 화면 방향 지정 (portrait, landscape)
    android:windowSoftInputMode 키보드와 화면 UI의 동작 방식 지정
    <activity android:name=".MainActivity"
        android:exported="true"
        android:launchMode="singleTask"
        android:screenOrientation="portrait">
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
    </activity>
  4. <service> 태그 속성
    백그라운드에서 실행되는 서비스(Service) 를 정의

    android:name 서비스 클래스명 지정
    android:exported 다른 앱에서 이 서비스를 사용할 수 있는지 여부
    android:foregroundServiceType 포그라운드 서비스 유형 (예: mediaPlayback, location)
    <service android:name=".MyService"
        android:exported="false"
        android:foregroundServiceType="location"/>
  5. <receiver> 태그 속성
    브로드캐스트 리시버(Broadcast Receiver) 를 정의

    android:name 리시버 클래스명 지정
    android:enabled 리시버 활성화 여부 (true/false)
    android:exported 다른 앱에서 사용할 수 있는지 여부
    <receiver android:name=".MyReceiver"
        android:enabled="true"
        android:exported="false"/>
  6. <uses-permission> 태그 속성
    앱에서 필요한 권한을 요청할 때 사용

    android:name 요청할 권한의 이름 (예: android.permission.INTERNET)
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
  7. <meta-data> 태그 속성
    추가적인 앱 설정 값을 정의할 때 사용

    android:name 메타데이터 키 이름
    android:value 설정할 값
    <meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="YOUR_API_KEY_HERE"/>

 

Manifest의 4대 컴포넌트에 대해 알아보자.

 

4대 컴포넌트에는 Activity, Service, Broadcast Receiver, Content Provider 가 있다.

 

Activity (액티비티)

  • 화면을 구성하는 요소로 UI를 담당한다.
  • 사용자가 앱과 상호작용할 수 있도록 화면을 제공한다.
  • 주요 속성
    - android:name : 액티비티 클래스명
    - android:exported : 외부 앱에서 접근 가능 여부
    - android:launchMode : 액티비티 실행 양식
    - android:screenOrientation : 화면 방향 설정
<activity android:name=".MainActivity"
    android:exported="true"
    android:launchMode="singleTask"
    android:screenOrientation="portrait">
    <intent-filter>
        <action android:name="android.intent.action.MAIN"/>
        <category android:name="android.intent.category.LAUNCHER"/>
    </intent-filter>
</activity>

 

Service (서비스)

  • UI 없이 백그라운드에서 실행되는 컴포넌트
  • 주요 속성
    - android: name : 서비스 클래스명
    - android:exported : 다른 앱에서 이 서비스를 사용할 수 있는지 여부
    - android:foregroundServiceType : 포그라운드 서비스 유형 지정 (예) mediaPlayback, location
<service android:name=".MyService"
    android:exported="false"
    android:foregroundServiceType="location"/>

 

Broadcast Receiver (브로드캐스트 리시버)

  • 시스템 또는 다른 앱에서 발생하는 이벤트를 감지하고 처리하는 역할
  • 주요 속성
    - android:name : 리시버 클래스명
    - android:enabled : 리시버 활성화 여부 (trud/false)
    - android:exported : 다른 앱에서 사용할 수 있는지 여부
<receiver android:name=".MyReceiver"
    android:enabled="true"
    android:exported="false">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED"/>
    </intent-filter>
</receiver>

 

Content Provider (콘텐츠 프로바이더)

  • 앱 간 데이터 공유를 가능하게 해주는 컴포넌트
  • 주요 속성
    - android:name : 콘텐츠 프로바이더 클래스명
    - android:authorities : 프로바이더의 고유 식별자
    - android:exported : 다른 앱에서 접근 가능 여부
728x90