본문 바로가기
안드로이드/Android

[Android] App Manifest

by jinwo_o 2024. 8. 8.

AndroidManifest.xml

  • 모든 앱 프로젝트는 프로젝트 소스 세트의 루트에 AndroidManifest.xml 파일(정확히 이 이름이어야 함)이 있어야 한다.
  • Android 빌드 도구, Android 운영체제 및 Google Play 에 앱에 관한 필수 정보를 설명한다.
  • 매니페스트 파일은 다른 여러 가지도 설명하지만 특히 다음과 같은 내용을 선언해야 한다.
    • 각 구성 요소는 Kotlin 또는 Java 클래스의 이름과 같은 기본 속성을 정의해야 한다. 또한, 각 구성 요소가 처리할 수 있는 기기 구성의 종류를 명시하고, 구성 요소가 어떻게 시작되는지를 설명하는 인텐트 필터와 같은 기능을 선언할 수도 있다.
    • 앱이 시스템이나 다른 앱의 보호된 부분에 접근하기 위해 필요한 권한을 명시해야 한다. 또한, 다른 앱이 이 앱의 콘텐츠에 접근하려는 경우에도 필요한 모든 권한을 선언해야 한다.
    • 앱에 필요한 하드웨어 및 소프트웨어 기능을 명시해야 한다. 이러한 기능에 따라 앱을 Google Play 에서 설치할 수 있는 기기의 종류가 달라진다.

Package name and Application ID

  • 매니페스트 파일의 Root element(<manifest></manifest>) 에는 해당 앱의 패키지 네임이 반드시 기재되어야 한다.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.ready.example"
    android:versionCode="1"
    android:versionName="1.0" >
    ...
</manifest>
  • manifest 의 패키지 네임은 앱을 빌드하여 APK 를 추출하는 과정에서 Android Build Tool 에 의해 다음 2가지 목적으로 사용된다.
    • App Resource에 접근하기 위해 R 클래스의 네임스페이스를 사용한다.
      • 위 예에서는 com.ready.example.R 클래스가 생성된다.
    • 매니페스트 파일 내에서 선언된 상대경로에 적용된다.
      • 예를 들어 <activity android:name=".MainActivity> 라고 선언했다면 이는 "com.ready.example.MainActivity" 를 가리키게 된다.
  • 매니페스트의 package 속성으로 선언된 패키지 경로는 프로젝트의 base package name 과 매칭 되어야 한다.
    • 만약 프로젝트 내 sub-package 를 갖고 있더라도 R 클래스는 sub-package 의 경로가 아닌 매니페스트 내 package 속성에 따라 생성된다.
  • BUT) package 속성이 불변인 것은 아니다.
    • 안드로이드 빌드 툴은 APK 를 추출할 때 위와 같은 작업을 처리한 후에 package 속성의 값을 build.gradle 에 선언된 applicationId 로 교체해버린다.
      • WHY) 구글 플레이스토어에 등록된 각 앱들을 구분하기 위해 package 값을 유니크하게 해야할 필요가 있기 때문이다.
        • 만약 Manifest 파일에 선언된 package 이름과 build.gradle 에 선언된 applicationId 값이 다르면 충돌이 발생할 수 있다.

App Components

  • 4대 컴포넌트(Activity, Service, Broadcast Receiver, Content Provider)들을 앱에서 사용한다면 매니페스트 파일에 등록해줘야 한다.
  • 4대 컴포넌트들은 각각 인텐트에 의해 활성화된다.
    • 여기서 인텐트란 메세지 객체로, 어떤 행동을 수행할지에 대한 명령이나 작업에 필요한 데이터를 포함한다.
    • 앱이 인텐트를 시스템에 발행하면 시스템은 각 앱의 매니페스트에 선언된 intent-filter 에 기초하여 처리할 수 있는 인텐트를 컴포넌트를 찾게 된다.
      • 만약 여러 개의 앱이 인텐트를 다룰 수 있다면, 사용자가 해당 인텐트를 어떤 앱에게 넘길지 선택할 수 있다.

Permissions

  • 안드로이드 앱은 민감한 유저 정보나 카메라나 인터넷 등 특정 시스템 기능을 사용할 때 반드시 권한을 요청해야 한다.
<manifest ... >
    <uses-permission android:name="android.permission.SEND_SMS"/>
    ...
</manifest>

Device Compatibility

  • Manifest 파일에는 앱이 필요로 하는 하드웨어나 소프트웨어 특징을 명시할 수 있다.
  • 예를 들어, 카메라 앱을 만들 경우에 카메라가 필수로 있어야 하니 카메라가 있는 기기에서만 Play Store 에서 해당 앱이 다운로드 될 수 있도록 명시하는 것이다.
<manifest ... >
    <uses-feature android:name="android.hardware.sensor.compass"
          android:required="true" />
    ...
</manifest>

application

  • 앱의 구성요소를 등록하기 위한 태그
<application
    android:name=".App"
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/Theme.AndroidCompose">
    <activity
        android:name="com.example.shoppingmall.ui.MainActivity"
        android:exported="true"
        android:theme="@style/Theme.AndroidCompose">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>
  • android:allowBackup=“true”
    • 애플리케이션이 백업 및 복원 인프라에 참여하도록 허용할지 여부를 설정한다.
    • false 로 설정하면, 모든 애플리케이션 데이터가 adb 를 통해 저장되는 전체 시스템 백업에서도 애플리케이션의 백업이나 복원이 이루어지지 않는다.
  • android:icon="@mipmap/ic_launcher" : 전체 애플리케이션의 아이콘 및 애플리케이션의 각 구성요소의 기본 아이콘
  • android:label="@string/app_name" : 전체 애플리케이션을 나타내는, 사용자가 읽을 수 있는 라벨 및 애플리케이션의 각 구성요소의 기본 라벨
  • android:roundIcon="@mipmap/ic_launcher_round" : 둥근 형태의 아이콘을 설정하는 속성
  • android:supportsRtl="true" : 애플리케이션이 오른쪽에서 왼쪽(RTL) 레이아웃을 지원하는지 여부를 설정
  • android:theme="@style/Theme.Rp3congbaemin" : 애플리케이션의 모든 활동의 기본 테마를 정의하는 스타일 리소스의 참조

 

앱 매니페스트 개요  |  Android Developers

이 페이지는 Cloud Translation API를 통해 번역되었습니다. 앱 매니페스트 개요 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 모든 앱 프로젝트는 프로젝트 소

developer.android.com

 

[Android] Manifest 개념 잡기

안드로이드 프로젝트에는 반드시 포함되어야 하는 파일이 있습니다. 그건 바로 AndroidManifest.xml 파일입니다. Manifest 파일은 프로젝트의 Source Set의 루트(별도의 설정을 하지 않았다면 src/main)에 위

readystory.tistory.com

 

AndroidManifest.xml이란?

AndroidManifest.xml의 정의"안드로이드 시스템이 앱의 코드를 실행하기 전에 확보해야 하는 앱에 대한 필수 정보를 시스템에 제공하는 목록"정의로만은 이해하기 어려워 실제 코드를 보면서 이해해

velog.io

'안드로이드 > Android' 카테고리의 다른 글

[Android] Activity  (0) 2024.08.09
[Android] Gradle  (0) 2024.08.06
[Android] Package  (0) 2024.08.01