[Android Studio] AndroidManifest.xml 정리

ddwwon·2022년 11월 3일
0

Android

목록 보기
1/8
post-thumbnail

Android Studio의 Manifest 파일의 항목을 정리해봤다.

Manifest 파일 사용 이유

  • Android 빌드 도구, Android 운영 체제 및 Google Play에 앱에 관한 필수 정보를 설명한다.
  • Android Studio를 사용해 앱을 빌드하면 Manifest 파일이 생성되고, 앱을 빌드하는 동안 기본적인 Manifest 요소가 추가된다.

<action>

  • 문법
<action android:name="string" />
  • 관련된 요소: <intent-filter>
  • 설명
    • <intent-filter>에 작업 추가
    • <intent-filter>에 꼭 <action> 이 하나 이상 포함되어야 함
      • <action> 이 없으면 filter가 Intent 객체 허용X
  • 속성
    • android:name
      • 해당 작업의 이름

<activity>

  • 문법
<action android:permission = "string"></activity>
  • 포함된 위치: <application>
  • 포함 가능한 요소: <intent-filter>, <meta-data>, <layout>
  • 설명
    • Application의 시각적 사용자 인터페이스 요소를 구현하는 활동(= Activity 서브 클래스)을 선언
    • 모든 활동은 manifest 파일의 <activity> 요소로 나타내야 함
    • 선언되지 않은 활동 → 시스템에 표시되지 않음 + 실행X
  • 속성
    • 多多多多

<application>

  • 문법
<application android:enabled=["true"|"false"]></application>
  • 포함된 위치: <manifest>
  • 포함 가능한 요소: <activity>, <activity-alias>, <meta-data>, <service>, <receiver>, <profileable>, <provider>, <uses-library>, <uses-native-library>
  • 설명
    • application 의 각 구성 요소를 선언하는 하위 요소 포함
    • 모든 구성 요소에 영향을 줄 수 있는 속성
  • 속성
    • 多多多多

<intent-filter>

  • 문법
<intent-filter android:icon="drawable resource"
               android:label="string resource"
               android:priority="integer" >
    . . .
</intent-filter>
  • 포함된 위치: <activity>, <activity-alias>, <service>, <receiver>, <provider>
  • 포함해야 하는 요소: <actioin>
  • 포함 가능한 요소: <category>, <data>
  • 설명
    • activity, service, broadcast receiver가 응답할 수 있는 intent 유형 지정
    • 상위 구성 요소의 기능(= 활동 or 서비스가 할 수 있는 작업) + receiver가 처리할 수 있는 broadcast 유형 선언
    • 전달된 유형의 수신 intetnt로 구성 요소에 의미가 없는 intent 필터링
  • 속성
    • 多多多多

<manifest>

  • 문법
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="string"
          android:sharedUserId="string"
          android:sharedUserLabel="string resource" 
          android:versionCode="integer"
          android:versionName="string"
          android:installLocation=["auto" | "internalOnly" | "preferExternal"] >
    . . .
</manifest>
  • 포함해야 하는 요소: <application>
  • 포함 가능한 요소: <compatible-screens>, <instrumentation>, <permission>, <permission-group>, <permission-tree>, <queries>, <supports-gl-texture>, <suuports-screens>, <users-configuration>, <uses-feature>, <uses-permission>, <uses-permission-sdk-23>, <uses-sdk>
  • 설명
    • AndroidManifest.xml 의 루트 요소
    • <applicaion> 요소를 포함해야 함
    • xmlns:androidpackage 속성 지정
  • 속성
    • xmlns:android
      • Android 네임스페이스 지정
    • package
      • 자바 패키지 이름

<permission>

  • 문법
<permission android:description="string resource"
            android:icon="drawable resource"
            android:label="string resource"
            android:name="string"
            android:permissionGroup="string"
            android:protectionLevel=["normal" | "dangerous" |
                                     "signature" | ...] />
  • 포함된 요소: <manifest>
  • 설명
    • 해당 application or 다른 application의 특정 구성요소 or 기능에 대한 접근을 제한할 때 사용하는 보안 권한 선언
  • 속성
    • android:description
      • 권한에 관한 사용자가 읽을 수 있는 설명
      • 사용자에게 권한을 설명하기 위해 표시가능
    • android:icon
      • 권한을 나타내는 아이콘 드로어블 리소스 참조
    • android:label
      • 권한 이름
      • 사용자에게 표시
    • android:name
      • 권한 이름
      • 코드에서 권한을 참조하는 데 사용될 이름
    • android:permissionGroup
      • 그룹에 권한 할당
      • 해당 application or 다른 application에 <permission-group> 요소로 선언
      • 이 속성을 설정 X → 그룹에 권한이 속하지 않음
    • android:protectionLevel
      • 권한에 내포된 잠재적 위험 특성화
      • 권한을 요청하는 application에 권한을 부여할지 결정
      • 권한 유형 多 ex) normal, dangerous, signature

<provider>

  • 문법
<provider android:authorities="list"
          android:directBootAware=["true" | "false"]
          android:enabled=["true" | "false"]
          android:exported=["true" | "false"]
          android:grantUriPermissions=["true" | "false"]
          android:icon="drawable resource"
          android:initOrder="integer"
          android:label="string resource"
          android:multiprocess=["true" | "false"]
          android:name="string"
          android:permission="string"
          android:process="string"
          android:readPermission="string"
          android:syncable=["true" | "false"]
          android:writePermission="string" >
    . . .
</provider>
  • 포함된 위치: <application>
  • 포함 가능한 요소: <meta-data>, <grant-uri-permission>, <intent-filter>, <path-permission>
  • 설명
    • contents provider 구성요소 선언
    • contents provier: application에서 관리되는 데이터에 관해 구조화된 액세스를 제공하는 ContentProvider의 서브 클래스
    • application의 모든 contents provider는 manifest 파일의 <provider> 요소에서 정의
      • 정의하지 않으면 시스템에서 인식X
    • contents provider만 선언!
      • application에서 사용하는 다른 application의 contents provider 선언X
    • Android 시스템은 provider의 content URI의 일부인 권한 문자열에 따라 contents provider 참조 저장

<receiver>

  • 문법
<receiver android:directBootAware=["true" | "false"]
          android:enabled=["true" | "false"]
          android:exported=["true" | "false"]
          android:icon="drawable resource"
          android:label="string resource"
          android:name="string"
          android:permission="string"
          android:process="string" >
    . . .
</receiver>
  • 포함된 위치: <application>
  • 포함 가능한 요소: <intent-filter>, <meta-data>
  • 설명
    • broadcast receiver(BroadcastReceiver 서브클래스)를 application의 구성요소 중 하나로 선언
    • application의 다른 구성요소가 실행되고 있지 않을 때도
      • 시스템 or 다른 application에서 broadcast 하는 intent를 application에서 수신 가능
    • broadcast receiver를 시스템에 알리는 방법
      1. <receiver>를 사용해 manifest 파일에 broadcast receiver 선언
      2. 코드에서 동적으로 broadcast receiver를 만든 다음 Context.registerReceiver() 메소드를 사용해 등록하는 것

<service>

  • 문법
<service android:description="string resource"
         android:directBootAware=["true" | "false"]
         android:enabled=["true" | "false"]
         android:exported=["true" | "false"]
         android:foregroundServiceType=["camera" | "connectedDevice" |
                                        "dataSync" | "location" | "mediaPlayback" |
                                        "mediaProjection" | "microphone" | "phoneCall"]
         android:icon="drawable resource"
         android:isolatedProcess=["true" | "false"]
         android:label="string resource"
         android:name="string"
         android:permission="string"
         android:process="string" >
    . . .
</service>
  • 포함된 위치: <applicatoin>
  • 포함 가능한 요소: <intent-filter>, <meta-data>
  • 설명
    • Service(Service 서브클래스)를 application의 구성요소 중 하나로 선언
    • activity와 달리 시각적 사용자 인터페이스 X
    • 백그라운드 작업 or 다른 application에서 호출할 수 있는 rich communication API를 구현하는 데 사용
    • 모든 service는 <service> 요소로 나타내야 함
      • 여기에 선언X → 시스템에 표시X + 실행X

<uses-permission>

  • 문법
<uses-permission android:name="string"
        android:maxSdkVersion="integer" />
  • 포함된 요소:
  • 설명
    • 앱이 올바르게 작동하기 위해 사용자가 반드시 부여해야 하는 시스템 권한
    • application이 설치될 때 or 앱이 실행 중일 때 ⇒ 사용자에게 권한 부여
  • 속성
    • android:name
      • 권한 이름
      • 요소가 있는 애플리케이션에서 정의한 권한 or 다른 application에서 정의한 권한 or 표준 시스템 권한 중 하나 ex) “android.permission.CAMERA”, “android.permission.READ_CONTACTS”
    • android:maxSdkVersion
      • 앱에 이 권한을 부여해야 하는 최상위 API 수준
      • 앱에 필요한 권한이 특정 API 수준부터 더 이상 필요하지 않은 경우 사용

참고 사이트

https://developer.android.com/guide/topics/manifest/manifest-intro?hl=ko

0개의 댓글