an XML file which contains important metadata about the Android app.
안드로이드 앱이라면 이 파일이 필수적으로 필요하다. manifest 파일은 Android 빌드 도구, Android 운영체제 및 Google Play에 앱에 관한 필수 정보를 설명하기 때문이다.
특히 중요한 점
앱 패키지 이름 : google play에서 고유한 앱 식별자로 사용
앱 구성 요소 (모든 액티비티, 서비스, 브로드캐스트 리시버, 컨텐츠 프로바이더) : 인텐트 필터와 같은 태그로 구성 요소가 어떻게 시작되는지 설명할 수 있다.
앱이 시스템 또는 다른 앱의 보호된 부분에 액세스하기 위해 필요한 권한 : 다른 앱이 이 앱의 콘텐츠에 접근하고자 한다면 필요한 권한을 선언해야 한다.
앱에 필요한 하드웨어 및 소프트웨어 기능으로, 이에 따라 앱을 Google Play에서 설치할 수 있는 기기의 종류가 달라진다.
매니페스트 파일의 루트 요소는 앱 패키지 이름에 대한 특성이 필요하다. 앱을 최종 애플리케이션 패키지 (APK) 로 빌드하는 동안 Android 빌드 도구가 package
특성을 사용하는 목적은 2가지다.
1) 안드로이드 build tool은 앱에서 생성된 클래스의 네임스페이스로 이름을 적용한다.
com.example.myapp.R
2) build tool은 이 이름을 사용해서 매니페스트 파일에 선언되어 있는 클래스 이름을 파악한다.
<activity android:name=".MainActivity">
로 선언된 액티비티가 com.example.myapp.MainAcivity
로 확인그래서 매니페스트의 package
특성에 있는 이름은 액티비티와 기타 앱 코드가 들어 있는 프로젝트의 기본 패키지 이름과 항상 일치해야 한다.
제일 중요한 점은, APK가 컴파일되고
package
가 앱의 ID를 나타낸다.
build tool이 package
값을 베이스로 작업하고 나면, 프로젝트의 build.gradle
파일에 있는 applicationId
속성에 지정된 값으로 package
값을 대체한다.
그래서 package
특성의 최종값을 전체적으로 고유해야 한다. 이것이 앱을 시스템과 Google Play에서 식별할 수 있는 유일하게 보증된 방법이기 때문이다.
물론! 이 applicationId를 다르게 지정할 수 있지만 이 ID 설정을 다르게 하면 side effect이 일어날 수 있다. 이 점을 명시해서 신중하게 변경해서 빌드해야 할것이다.
앱의 액티비티, 서비스, 브로드캐스트 리시버는 인텐트로 활성화된다. 그래서 앱 구성 요소
(<activity>
Activity의 각 하위 클래스.
<service>
Service의 각 하위 클래스.
<receiver>
BroadcastReceiver의 각 하위 클래스.
<provider>
ContentProvider의 각 하위 클래스.) 는 인텐트 필터를 몇 개든 가질 수 있으며, 각 인텐트 필터는 해당 구성 요소의 각 기능을 설명한다.
인텐트 필터에 작업을 추가한다.
상위 구성 요소에 제공할 수 있는 추가적인 임의의 데이터 항목에 대한 이름-값 쌍이다.
이 속성을 사용하면 앱 코드를 수정하지 않아도 앱이 이 파일에서 네트워크 보안 설정을 맞춤설정 할 수 있다. 이러한 설정은 특정 도메인 및 특정 앱용으로 구성할 수 있다.
Rign to left 줄임말로 오른쪽에서 왼쪽으로 읽는 나라일 경우 지원되는 속성이다.
우리나라에서는 true로 설정해도 결과는 같다
(기본값은 false)
애플리케이션 이름
android 10(api 29)을 타겟팅하는 앱은 이 속성을 요청할 수 있다. 이 속성을 사용하면 앱은 다양한 디렉토리 및 다양한 미디어 파일 유형에 관한 액세스 권한을 부여하는 등 범위 지정 저장소와 관련된 변경사항을 일시적으로 선택 해제 할 수 있다.
백업 및 복구 기능을 사용 여부를 표시한다.
애플리케이션이 게임인지에 대한 여부이다. 시스템에서 애플리케이션을 게임으로 분류해 그룹화하거나 다른 애플리케이션과 별도로 표시할 수 있다.
(기본값은 false)
대규모 Dalvik 힙으로 애플리케이션의 프로세스를 생성해야 하는지에 대한 여부이다.
애플리케이션에 관해 만드는 모든 프로세스에 적용된다.
한 프로세스에 첫 번째로 로드되는 애플리케이션에만 적용되는데, 공유 사용자 ID를 사용하여 여러 애플리케이션이 프로세스를 사용할 수 있는 경우, 애플리케이션이 이 옵션을 일관성 있게 사용해야 한다. 그러지 않으면 예측할 수 없는 예외 사항이 생길 수 있다.
대부분의 앱에서는 이 속성이 필요하지 않고, 대신 성능 개선을 위해 전체 메모리 사용량을 줄이는 데 초점을 맞춰야 한다. 또한 이 속성을 사용 설정하는 경우 가용 메모리가 고정적으로 증가될 것이 보장되지 않는다. 왜냐하면 일부 기기는 총 가용 메모리의 제약을 받기 때문이다.
앱이 멀티 윈도우 화면을 지원하는지에 대한 여부. 이 속성은 <activity>
, <application>
에서 설정할 수 있다.
이 속성을 true로 설정하면 사용자가 분할 화면 모드와 자유 형식 모드로 활동을 시작할 수 있고, 속성을 false로 설정하면 활동이 멀티 윈도우 모드를 지원하지 않는다.
이 값이 false일 때 사용자가 멀티 윈도우 모드로 활동을 시작하려고 하면 활동은 전체 화면으로 열린다.
(기본값은 true, api 레벨 24 이상 타겟팅하는 앱)