프로그래밍(programming)/안드로이드(android)

[210521] 안드로이드 매니페스트(Manifest)

하빌리즘 2021. 5. 21. 14:20
반응형

(210522 수정)

 

 우리가 안드로이드 앱을 개발하다보면 반드시 포함되어있는 파일이 있는데,

그것은 '매니페스트 파일(Manifest File)' 이다. 

 매니페스트 파일은 모든 앱의 루트(가장 상위 폴더)에 위치해있어야 하며, 어떠한 컴포넌트(앱의 구성요소)가 있는지, 

어떠한 권한이 부여가 되어있는지, 앱의 패키지 이름은 무엇인지 등등 다양한 정보를 담고 있다. 

 

 다양한 정보를 담고 있는 매니페스트 파일에서 여러가지가 있지만 특히나 중요한 정보는 다음과 같다. 

 

1. 앱의 패키지 이름 지정 : 

매니페스트 파일의 '루트(Root)' 에는 다음과 같이 앱의 패키지 이름이 있어야한다.

1
2
3
<?xml version="1.0" encoding="utf-8"?>
    package="com.example.mvptest">
cs

그리고 최종적으로 APK로 추출하려고 빌드하는동안 '안드로이드 빌드 도구(Android Build Tool)' 의 패키지 이름

사용 목적은 두 가지가 있는데,

 

1. 첫 번째는 앱에서 만들어진 R.java 클래스의 NameSpace로 이 패키지 이름이 사용된다. 위 코드로 예를 들어,

"com.example.mvptest.R"가 생성된다.

2. 두 번째로 패키지 이름을 사용하여 매니페스트 파일에 등록되어있는 상대 경로의 클래스 이름에 사용된다.

예를 들어, 다음과 같이 매니페스트 파일에 등록된 액티비티가

1
 <activity android:name=".MainActivity">
cs

"com.example.mvptest.MainActivity" 이렇게 말이다.

이 처럼 매니페스트 파일의 패키지 이름은 액티비티와 앱의 코드가 있는 프로젝트의 기본 패키지 이름과 반드시

일치해야한다. 만약에 프로젝트 내에 다른 서브 패키지가 있더라도 매니페스트 내에 있는 패키지 속성에 따라 R.java

클래스가 생성된다.

 

 

2. 컴포넌트(앱의 구성 요소)에 대한 정보 등록 : 

앱의 4대 컴포넌트(앱의 구성 요소)에는 '액티비티(Activity)', '서비스(Service)', '방송 수신자(Brodcase Receiver)', '내용 제공자(Content Provider)' 가 있는데 이것들을 사용하기 위해서는 매니페스트 파일에 태그로 선언을 해서 앱에 등록해주어야한다. 

 

4대 컴포넌트에 대한 XML 태그는 다음과 같다.

<activity> : 액티비티(Activity)

<service> : 서비스(Service)

<receiver> : 방송 수신자(Brodcast Receiver)

<provider> : 내용 제공자(Cotent Provider)

 

만약에 등록을 하지 않고 앱을 실행시키게 되면 시스템에서 이를 시작시키지 못하여 앱을 죽고 만다. 

 

 

3. 앱이 가져야 하는 권한 정보 등록 : 

앱을 사용하는데에 있어서 연락처나 문자같은 보안에 민감한 사용자 데이터 또는 카메라나 인터넷 등과 같은 특정한

시스템 기능들에 액세스하기 위해서는 사용자 권한을 등록해줘야 하는데,

1
<uses-permission android:name="android.permission.INTERNET" />
cs

위와 같이  <uses-permission> 태그로 각각의 권한들을 고유한 레이블로 구성되어 식별된다.

이렇게 권한을 등록하게되면 앱이 보호된 기능을 사용할 수 있게 된다.

 

 

4. 앱에 필요한 하드웨어 및 소프트웨어 기능 / 호환성 : 

앱에 필요한 하드웨어나 소프트웨어의 기능. 즉, 앱과 호환될 수 있도록 유형을 등록할 수 있다. 구글 플레이 스토어에서는 앱에 반드시 필요한 기능이나 시스템 버전을 제공하지 않는 단말에게 앱의 설치를 허용하지 않기 때문에 이 점에

유의하면서 매니페스트 파일에 필요한 것들을 등록해줘야한다. 

1
2
 <uses-feature android:name="android.hardware.Camera"
        android:required="true" />
cs

위와 같이 <uses-feature> 태그를 사용하여 등록할 수 있다.

 

피드백은 언제나 환영입니다. 

 

반응형