[Android] - manifests 분석하기

명준쓰·2023년 8월 8일
0

안녕하세요 이번 포스팅 주제는 Android 프로젝트를 만들면 기본적으로 생성되는 manifests에 대해 포스팅 해보려고 합니다.
저도 프로젝트를 하며 manifests에 권한 추가, 진입점 수정 등 여러가지 작업을 했지만 하나하나 살펴 본 적은 없어서 포스팅 하며 공부해보겠습니다.

<?xml version="1.0" encoding="utf-8"?>
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:versionCode="1"
    android:versionName="1.0"
    package="com.example.myapp">

    <uses-permission android:name="android.permission.CAMERA" />

    <uses-feature
        android:name="android.hardware.camera"
        android:required="true" />

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />


    <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"
        tools:targetApi="31">

        <!-- This name is resolved to com.example.myapp.MainActivity
             based upon the package attribute -->
        <activity android:name=".MainActivity"
                    android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity
            android:name=".DisplayMessageActivity"
            android:exported="false" />
    </application>
</manifest>

1. Manifests 란?

Manifests란 Android 애플리케이션의 중심적인 메타데이터 파일입니다. 이 파일은 애플리케이션에 대한 필수 정보를 포함하며, Android 시스템이 앱을 설치하고 실행할 때 이 정보를 사용합니다.

2. manifest 태그

Android 애플리케이션을 위한 메타데이터를 포함하는 manifest 파일의 시작입니다.

<manifest
	<!-- Android XML 네임스페이스 정의, Android 리소스  속성을 정의하는 표준 URI -->
   xmlns:android="http://schemas.android.com/apk/res/android"
   <!-- 앱의 버전 코드. 각 버전마다 고유해야 함. 주로 APK 업데이트 시 이 번호를 증가시켜서 구분 -->
   android:versionCode="1"
   <!-- 앱의 버전 이름. 사용자에게 보여지는 버전 정보입니다. 예: "1.0", "1.0.1", "2.0" 등 -->
   android:versionName="1.0"
   <!-- 앱의 고유한 패키지 이름. 이 이름은 Play Store와 같은 마켓에서 앱을 고유하게 식별하는 데 사용됩니다. -->
   package="com.example.myapp">

3. Permission, feature

Permission 태그는 말 그대로 권한, 허용을 위해 사용하는 태그 입니다.
feature 태그는 Android 앱이 특정 하드웨어나 소프트웨어 기능을 필요로 할 대 사용하는 태그입니다.

    <!-- 애플리케이션이 카메라에 접근하는 데 필요한 권한을 요청합니다. -->
    <uses-permission android:name="android.permission.CAMERA" />

<!-- 애플리케이션이 카메라 하드웨어 기능을 사용하고, 해당 기능이 반드시 필요하다는 것을 나타냅니다. 
     이를 통해 카메라 기능이 없는 기기에서는 이 앱을 설치할 수 없게 됩니다. -->
    <uses-feature
        android:name="android.hardware.camera"
        android:required="true" />
        
<!-- 애플리케이션이 외부 저장소에 쓰기 권한을 요청합니다. 
     예를 들면, 사진이나 다른 파일을 저장할 때 필요합니다. -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <!-- 애플리케이션이 인터넷에 연결하는 데 필요한 권한을 요청합니다. -->
    <uses-permission android:name="android.permission.INTERNET" />
    <!-- 애플리케이션이 네트워크 상태 (예: Wi-Fi, 4G)를 조회하는 데 필요한 권한을 요청합니다. -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <!-- 애플리케이션이 네트워크 상태를 변경하는 데 필요한 권한을 요청합니다. -->
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />

여기서 앱의 권한을 허용해 줌으로써 어플리케이션에서 인터넷을 접속한다던가 카메라에 접근하는 등의 작업이 가능해집니다.

4. application

어플리케이션 선언부입니다. 어플리케이션의 각 구성요소를 선언하는 하위 요소를 포함하며 모든 구성요소에 영향을 줄 수 있는 속성을 가지고 있습니다.

 <application
        android:allowBackup="true" <!--  데이터 백업 허용, true이면 사용자 데이터를 Google Drive에 백업 가능 -->
        android:icon="@mipmap/ic_launcher"<!--앱 아이콘으로 사용할 리소스 지정-->
        android:roundIcon="@mipmap/ic_launcher_round"<!--둥근 형태의 앱 아이콘 리소스 지정-->
        android:label="@string/app_name"<!--앱의 이름 지정-->
        android:supportsRtl="true"<!--앱이 오른쪽에서 왼쪽(Right-To-Left)레이아웃 지원 여부-->
        android:theme="@style/AppTheme" <!--앱의 기본 테마-->
        tools:targetApi="31"><!--앱이 타게팅하는 API레벨-->

5. activity

이 태그는 앱의 activity에 대한 선언을 포함하는 태그 이며 액티비티 생성 시 자동으로 생성 됩니다.

<activity android:name=".MainActivity"> <!--액티비티 이름-->
            <intent-filter><!--이 태그는 해당 액티비티에 대한 특정 인텐트 필터 정의-->
                <action android:name="android.intent.action.MAIN" <!--해당 액티비티가  진입점임--> 
                        android:exported="true"/> <!--다른 애플리케이션의 구성요소에서 실행할 수 있는 구성 요소인지 체크-->
                <category android:name="android.intent.category.LAUNCHER" /><!--해당 액티비티가 기기의 앱 런처에 표시되어야 함.-->
            </intent-filter>
        </activity>

        <activity
            android:name=".DisplayMessageActivity"
            android:exported="false" />
    </application>

간단하게 기본적으로 제공되는 manifests 파일을 분석해보았습니다.

기본적으로 제공이 되는 코드이다 보니 자세히 보지 않앗엇는대 한번씩 보면 좋을 것 같습니다.


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

profile
개린이

0개의 댓글