[Android] Manifest

코랑·2023년 5월 2일
0

android

목록 보기
11/16

정의

프로젝트의 루트 디렉토리에 위치한 파일.
<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 속성을 꼭 포함해야함.

파일 규칙

Argumaents

<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>

0개의 댓글