AndroidManifest.xml
은 Android 앱의 메인 환경 파일이다. 여기서 설정되는 대로 앱이 실행된다.
<manifest>
: Manifest 파일의 루트 태그xmlns
: XML의 네임스페이스 선언이며 URL이 http://schemas.android.com/apk/res/android
라면 Android 표준 네임스페이스를 의미package
: 매니페스트 파일에 선언한 컴포넌트 클래스의 기본 패키지명. 이후 선언되는 액티비티, 서비스 클래스 등의 컴포넌트 클래스 경로는 package
이후 부터 작성<application>
: 앱 전체를 대상으로 하는 설정.android:icon
: 앱의 아이콘 설정. 실행 아이콘android:label
: 앱의 이름을 등록android:theme
: 앱 테마 설정.앞서 말했듯 컴포넌트 사용을 위해서는 시스템에 의뢰를 해야 한다. 그리고 시스템은 매니페스트 파일에 있는대로 앱을 실행한다. 그렇기 때문에 액티비티, 서비스 등의 컴포넌트를 매니페스트에 등록해야 한다.
<activity>
: 액티비티android:name
: 필수 속성으로 클래스 이름을 등록. android:name=".MainActivity"
에서 .
은 해당 클래스가 <manifest>
태그에 등록한 package
경로에 있다는 의미<intent-filter
> : 생략 가능. <intent-filter
> 안에 <action
> 태그의 name
값이 android.intent.action.MAIN
문자열로 <category>
태그의 name
값이 android.intent.category.LAUNCHER
로 선언되면 해당 액티비티가 앱 아이콘을 클릭했을 때 실행되는 액티비티가 된다.<service>
: 서비스<receiver>
: 브로드캐스트 리시버<provider>
: 콘텐츠 프로바이더Android 앱은 민감한 사용자 데이터(예: 연락처, SMS) 또는 특정 시스템 기능(예: 카메라, 인터넷 액세스)에 액세스하기 위한 권한을 요청해야 한다. 각 권한은 고유한 레이블로 식별된다.
<manifest ... >
<uses-permission android:name="android.permission.SEND_SMS"/>
...
</manifest>
Android 6.0(API 레벨 23)부터 사용자는 런타임에서 일부 앱 권한을 승인하거나 거절할 수 있게 된다. 그러나 앱이 어떤 Android 버전을 지원하든 매니페스트에서 <uses-permission>
요소로 모든 권한 요청을 선언해야 한다. 권한이 부여되면 앱이 보호된 기능을 사용할 수 있다. 권한이 부여되지 않으면 그러한 기능에 액세스하려는 시도가 실패한다.
앱은 권한을 사용하여 자체적인 구성 요소를 보호할 수도 있다. Android에서 정의된 권한(android.Manifest.permission
에서 설명) 또는 다른 앱에서 선언된 권한을 사용할 수 있다. 또한, 앱에서 권한을 정의할 수도 있다. 새 권한을 선언할 때는 <permission>
요소를 사용한다.
매니페스트 파일에서는 앱에 필요한 하드웨어 또는 소프트웨어 기능을 선언할 수 있고, 따라서 앱과 호환되는 기기 유형도 선언할 수 있다. Google Play Store에서는 앱에 필요한 기능이나 시스템 버전을 제공하지 않는 기기에 앱 설치를 허용하지 않는다.
<uses-feature>
요소를 사용하여 앱에 필요한 하드웨어 및 소프트웨어 기능을 선언할 수 있다. 예를 들어 나침반 센서가 없는 기기에서 앱이 기본적인 기능을 실행할 수 없다면, 필요에 따라 다음과 같이 매니페스트 태그를 사용하여 나침반 센서를 선언할 수 있다.
<manifest ... >
<uses-feature android:name="android.hardware.sensor.compass"
android:required="true" />
...
</manifest>
이전 버전에서 사용할 수 없는 새 API가 추가되는 경우가 있다. 앱이 호환되는 최소 버전을 나타내려면 매니페스트에 <uses-sdk>
태그와 해당 태그의 minSdkVersion
특성을 포함해야 한다.
그러나 <uses-sdk>
요소의 특성은 build.gradle
파일의 해당 속성으로 재정의된다는 것에을 유의해야 한다. Android Studio를 사용하고 있다면 여기에 minSdkVersion
과 targetSdkVersion
값을 대신 사용해야 합니다.
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
...
}
}