프로젝트의 루트 디렉토리에 위치한 파일.
<manifest>
태그를 시작하는 앱이 어떻게 구성되는지를 정의하는 xml 파일.
안드로이드 4대 컴포넌트라 불리는것들이 여기에서 정의된다.
Activity
의 각 서브클래스의 <activity>
Service
의 각 서브클래스의 <service>
BroadcastReceiver
의 각 서브클래스의 <receiver>
ContentProvider
의 각 서브클래스의 <provider>
name
속성으로 서브클래스의 이름을 지정<manifest ... >
<application ... >
// name을 이렇게 선언하면 빌드 후에 네임스페이스 뒤에 이 요소가 붙음
// namespace가 com.test.myapp이면 아래요소의 위치는 com.test.myapp.MainActivity
<activity android:name=".MainActivity" ... >
// ...
</activity>
<service>
</service>
// ...
</application>
</manifest>
앱의 모든 권한에 접근 할 수 없으므로
일반적인 권한(ex. 카메라, 파일, 알림 등등)을 앱에서 필요로 할 때 사용자의 허용이 필요하면 <uses-permission>
태그로 필요한 권한을 명시해줘야함.
<manifest ... >
<uses-permission android:name="android.permission.SEND_SMS"/>
...
</manifest>
앱의 특정 구성요소 혹은 기능을 우리 앱이 아닌 다른 앱에서 접근 하려고 하는것을 막기 위해 <permission>
을 사용함. protectionLevel 이라는 요소로 컨트롤 해주면 되고 기본값이 normal
인데 사용자의 명시적은 승인을 요구하지 않고 설치 시 권한을 요청하는 유형.
dangerous
: 위험한 권한이라고 표기하는 방법이고 요청한 권한을 주지 않거나, 사용자한테 알리거나 사용자가 넘겨주지 못하게 설정하게 해줌 => 이걸 어떻게 하는걸까,.,signature
: 권한을 선언한 애플리케이션과 동일한 인증서로 서명한 경우에만 시스템에서 부여하는 권한. 일치하면 명시적 승인 요청하지 않고 권한 부여해버림.기기 하드웨어에서 제공하는 기능을 사용할 때 명시해줘야함.
<manifest ... >
<uses-feature android:name="android.hardware.sensor.compass"
android:required="true" />
...
</manifest>
앱이 호환되는 최소 버전을 명시해주기 위해 <use-sdk>
를 사용하면 됨.
이 태그를 사용할 때 minSdkVersion
속성을 꼭 포함해야함.
<manifest>, <application>
만 필수. 두 요소는 각각 한번만 실행되어야 함.
<activity>
, <provider>
, <service>
는 순서 상관 없이 배치 가능함.
요소의 용도를 명확히 하기위해서 속성을 지정해줘야함.
android:
로 시작함
요소가 아주 많으므로 이 링크 참조.
둘 이상의 값을 지정할 수 있는 경우, 한 요소 안에 여러 값이 나열되지않고 해당 요소가 반복됨.
// intent filter
<intent-filter ... >
<action android:name="android.intent.action.EDIT" />
<action android:name="android.intent.action.INSERT" />
<action android:name="android.intent.action.DELETE" />
...
</intent-filter>
app/src/main/res의 리소스 값을 참조할 때 다음 형식으로 값을 참조할 수 있음.
일반 리소스는@[package:]type/name
테마는 ?[package:]type/name
package
: 앱에서 제공하는 리소스일 경우 생략 가능type
: string
혹은 drawable
name
: 리소스를 식별하는 이름.<activity android:icon="@drawable/smallPic" ... >
리소스 유형 참고 링크
속성 값이 문자열인 경우, 문자를 이스케이프 처리하려면 이중 백슬래시(\)를 사용함.
줄바꿈 -> \n, 유니코드 -> \uxxxx
https://developer.android.com/guide/topics/manifest/manifest-intro?hl=ko#reference
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
android:versionCode="1"
android:versionName="1.0">
<!-- Beware that these values are overridden by the build.gradle file -->
<uses-sdk android:minSdkVersion="15" android:targetSdkVersion="26" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:roundIcon="@mipmap/ic_launcher_round"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<!-- This name is resolved to com.example.myapp.MainActivity
based on the namespace property in the build.gradle file -->
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".DisplayMessageActivity"
android:parentActivityName=".MainActivity" />
</application>
</manifest>