본문 바로가기
Android

[Android] Manifest

by Ejay 2021. 1. 25.

안드로이드 프로젝트를 처음 만들게 되면 반드시 포함돼있고 포함되어야 하는 파일이 존재합니다.

그건 바로 AndroidManifests.xml 입니다. AndroidManifests.xml은 따로 지정하지 않은 이상

프로젝트의 소스 루트(프로젝트명\src\main)에 존재합니다.

먼저 manifest가 무슨 뜻인가 보면 (명백한, 나타나타, 명확하게 하다) 이러한 뜻을 가지고 있습니다.

그러면 andoid manifest는 android를 명확하게 하고, 나타내주는 역할을 할 수 있다고 생각할 수 있습니다.

쉽게 말해서 매니페스트는 애플리케이션의 각종 정보를 저장하고 있는 명세서라고 생각하시면 됩니다.

 

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

매니페스트 파일은 이외에 여러 가지도 설명 하지만 특히 아래 4개의 내용을 선언해야 합니다.

 

  • 앱의 패키지 이름
  • 앱의 구성 요소(모든 액티비티, 서비스, 방송수신자, 콘텐츠 제공자)
  • 앱의 권한 선언
  • 앱에서 요구하는 하드웨어 및 소프트웨어 기능

지금부터 하나하나 자세히 살펴보도록 하겠습니다.


패키지 이름과 애플리케이션 ID

매니페스트 파일에는 반드시 해당 앱의 패키지 이름이 반드시 기재되어야 합니다.

예를 들어 "com.example.testcase"라는 패키지 이름의 프로젝트를 생성한 뒤 매니페스트 파일을 확인해 보면

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

package 부분에 앱의 패키지 이름을 확인할 수 있습니다.

앱을 최종 애플리케이션 패키지(APK)로 빌드하는 동안 안드로이드 빌드 도구가 package 특성을 사용하는 목적은

두 가지가 있습니다.

  • 빌드 도구는 앱에서 생성된 R.java 클래스의 네임 스페이스로 이 이름을 적용합니다.
    R.java란 개발을 하다 보면 여러 개의 리소스가 만들어지는데 코드 영역에서 이를 식별하기 위한 파일이며
    자동으로 만들어지고 파일을 열어보면 단순히 int형 변수만 선언되어 있습니다.
    R클래스는 com.example.testcase.R에 생성됩니다.

  • 빌드 도구는 이 이름을 사용하여 매니페스트 파일에 선언되어 있는 상대 클래스 이름을 확인합니다.
    매니페스트로 선언된 액티비티가
    com.example.testcase.MainActivity인 것으로 확인 가능합니다.

이와 같이 매니페스트의 package특성에 있는 이름은 액티비티와 기타 앱 코드가 들어있는 프로젝트의
기본 패키지 이름과 항상 일치해야 합니다.

앱 구성 요소

앱에서 생성하는 각각의 앱 구성 요소에 대해 매니페스트 파일에서 해당하는 XML요소를 선언해야 합니다.

  • <activity> : Activity의 각 하위 클래스
  • <service> : Service의 각 하위 클래스
  • <receiver> : BroadcastReceiver의 각 하위 클래스
  • <provider> : ContentProvider의 각 하위 클래스

매니페스트 파일에서 하위 클래스를 구현하고 XML요소를 선언하지 않은 상태로

이 구성 요소를 하위 클래스로 지정하면 시스템에서 시작할 수 없습니다.

하위 클래스의 이름은 완전한 패키지 이름을 사용하여 name특성으로 지정해야 합니다.

위의 4개의 컴포넌트는 각각 인텐트에 의해서 활성화됩니다.

4대 컴포넌트

 

[Android] 4대 컴포넌트

안드로이드의 4대 컴포넌트는 액티비티, 서비스, 방송수신자, 콘텐트 제공자 이렇게 4가지를 말합니다. 애플리케이션을 만들 때 주요 구성요소이며 각각의 구성 요소는 인텐트를 통해서 상호 통

ejay.tistory.com

권한

Android 앱은 민감한 사용자 데이터(ex 연락처, 문자) 또는 특정 시스템 기능(ex 카메라)에 액세스 하기 위한 권한을

요청해야 합니다. 각 권한은 고유한 레이블로 식별됩니다.

예를 들어 문자 메시지를 보내야 하는 앱은 매니페스트에 다음과 같이 선언되어야 합니다.

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

Android 6.0(API lv23)부터 사용자는 런타임에서 일부 앱 권한을 승인하거나 거절할 수 있게 됩니다.

그러나 애플리케이션이 어떤 버전을 지원해도 매니페스트에서 권한 요청은 필수입니다.

권한이 부여되면 앱이 보호된 기능을 사용할 수 있습니다. 권한이 부여되지 않으면 그러한

기능에 액세스 하지 못합니다.

기기 호환성

매니페스트 파일에서는 애플리케이션에 필요한 하드웨어 또는 소프트웨어 기능을 선언할 수 있고

따라서 애플리케이션과 호환되는 기기 유형도 선언할 수 있습니다. Google Play Store에서는

앱에 필요한 기능이나 시스템 버전을 제공하지 않는 기기에 앱 설치를 허용하지 않습니다.

어떤 기기가 앱과 호환되는지 정의하는 매니페스트 태그 중 몇 가지 예를 들면

 

위 요소를 사용하여 앱에 필요한 하드웨어 및 소프트웨어 기능을 선언할 수 있습니다.

예를 들어 나침반 센서가 없는 기기에서 앱이 기본적인 기능을 실행할 수 없다면

필요에 따라 태그를 사용하여 나침반 센서를 선언할 수 있습니다.

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

 

또한, 각 플랫폼 버전에 이전 버전에서 사용할 수 없는 새 API가 추가되는 경우가 있습니다.
앱이 호환되는 최소 버전을 나타내려면 매니페스트에 위의 태그와 해당 태그의 minSdkVersion 특성을
포함해야 합니다.

  android {
  defaultConfig {
    applicationId 'com.example.myapp'

    // Defines the minimum API level required to run the app.
    minSdkVersion 15

    // Specifies the API level used to test the app.
    targetSdkVersion 28

    ...
  }
}
반응형

'Android' 카테고리의 다른 글

[Android] Palette (Widgets)  (0) 2021.01.26
[Android] Palette (Button)  (0) 2021.01.26
[Android] Palette (Text)  (0) 2021.01.25
[Android] 4대 컴포넌트  (0) 2021.01.25