ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • AndroidManifest 란?
    Android 관련 2023. 5. 6. 15:48
    반응형

    AndroidManifest (매니페스트)

    각 구성요소 코틀린이나 자바클랴스의 이름과 같은 기본 속성을 정의해야 함

     

    Android 개발자  |  Android Developers

    콘텐츠 제공자 구성요소를 선언합니다. 콘텐츠 제공자는 애플리케이션에서 관리되는 데이터에 구조적으로 액세스할 수 있게 하는 ContentProvider의 서브클래스입니다. query()에 애플리케이션의 모

    developer.android.com

     

    이러한 구성요소를 매니페스트 파일에서 선언하지 않고 서브클래스로 분류하면 시스템에서 이를 시작할수 없음

     

    전체 페키지 지정을 사용하여 name 속성으로 서브클레스의 이름을 지정

    <manifest ... >
        <application ... >
            <activity android:name="com.example.myapp.MainActivity" ... >
            </activity>
        </application>
    </manifest>

     

    그러나 name 값의 첫번째 문자가 마침표라면 앱의 네임스페이스가 이름앞에 붙음

    ※ build.gradle 파일의 namespace 속성

    ex ) "com.example.myapp" 이라면  com.example.myapp.MainActivity 으로 확인

    <manifest ... >
        <application ... >
            <activity android:name=".MainActivity" ... >
                ...
            </activity>
        </application>
    </manifest>

     

    인텐트 필드 

    앱 활동, 서비스, broadcast receiver는 인텐트로 활성화됩니다. 인텐트는 실행할 작업을 설명하는 Intent 객체로 정의되는 메시지

    여기에는 작업할 데이터, 작업을 실행할 것으로 예상되는 구성요소 카테고리, 기타 명령이 포함 됨

    앱이 인텐트를 시스템에 발행하면 시스템은 각 앱의 매니페스트 파일에 선언된 인텐트 필터에 기초하여 인텐트를 처리할 수 있는 앱 구성요소를 찾음

     

    앱 구성요소는 인텐트 필터(<intent-filter> 요소로 정의)를 몇 개든 가질 수 있으며, 각 인텐트 필터는 구성요소의 각 기능을 설명

     

    아이콘 라벨

    많은 매니페스트 요소에는 해당 앱 구성요소에 대해 작은 아이콘과 텍스트 라벨을 사용자에게 각각 표시하기 위한 icon label 속성이 있음

     

    예를 들어 <application> 요소에 설정된 아이콘과 라벨이 앱의 각 구성요소(예: 모든 활동)의 기본 아이콘과 라벨이 됨

     

    권한

    Android 앱은 민감한 사용자 데이터(예: 연락처, SMS) 또는 특정 시스템 기능(예: 카메라, 인터넷 액세스)에 액세스하기 위한 권한을 요청해야 함. 각 권한은 고유한 라벨로 식별

    예를 들어 SMS 메시지를 보내야 하는 앱은 매니페스트에 다음과 같은 줄이 있어야함

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

    Android 6.0(API 수준 23)부터 사용자는 런타임에서 일부 앱 권한을 승인하거나 거절할 수 있게 됨

    러나 앱이 어떤 Android 버전을 지원하든 매니페스트에서 <uses-permission> 요소로 모든 권한 요청을 선언해야 함

    1. 권한이 부여되면 앱이 보호된 기능을 사용할 수 있음

    2. 권한이 부여되지 않으면 그러한 기능에 액세스하려는 시도가 실패

    3. 새 권한을 선언할 때는 <permission> 요소를 사용함

     

    기기 호환성

    <uses-feature>

    <uses-feature> 요소를 사용하면 앱에 필요한 하드웨어 및 소프트웨어 기능을 선언할 수 있음

    나침반 센서가 없는 기기에서 앱이 기본적인 기능을 실행할 수 없다면, 필요에 따라 다음과 같이 매니페스트 태그를 사용하여 나침반 센서를 선언

    <manifest ... >
        <uses-feature android:name="android.hardware.sensor.compass"
                      android:required="true" />
        ...
    </manifest>

    <uses-sdk>

    연속적인 각 플랫폼 버전에서는 이전 버전에서 사용할 수 없는 새 API를 추가하는 경우 많음

    그로 인해 앱이 호환되는 최소 버전을 나타내려면 매니페스트에 <uses-sdk> 태그와 그 minSdkVersion 속성을 포함

     

    그러나 <uses-sdk> 요소의 속성은 build.gradle 파일의 상응하는 속성으로 재정의 

    따라서 Android 스튜디오를 사용하면 minSdkVersion  targetSdkVersion 값을 대신 지정

    android {
        defaultConfig {
            applicationId 'com.example.myapp'
    
            // Defines the minimum API level required to run the app.
            minSdkVersion 21
    
            // Specifies the API level used to test the app.
            targetSdkVersion 33
            ...
        }
    }

     

     

    파일 규칙

     

    요소

    <manifest>  <application> 요소만 필수 

    두 요소는 각각 한 번만 실행되어야 함

    다른 요소는 대부분 한 번도 실행되지 않거나 한 번 이상 실행되어도 됨

    다만 이들 중 일부가 있어야만 매니페스트 파일에 쓸모가 있음

     

    같은 레벨에 있는 여러 요소는 보통 순서가 지정되지 않음

    <activity>, <provider>  <service> 요소는 어느 순서로든 배치할 수 있음

     

    이 규칙에는 두 가지 중요한 예외 사항이 있음

    • <activity-alias> 요소는 이 요소를 별칭으로 사용하는 <activity> 다음에 와야 합니다.
    • <application> 요소는 <manifest> 요소 내부에 있는 마지막 요소여야 합니다. 

     

    속성

    속성은 선택사항

    그러나 어떤 요소의 용도를 실현하기 위해서는 많은 속성을 지정

     

    여러 개의 값

    둘 이상의 값을 지정할 수 있는 경우, 한 요소 안에 여러 값이 나열되지 않고 해당 요소가 거의 항상 반복

     

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

     

    리소스 값

    일부 속성에는 사용자에게 표시되는 값이 있음

    예: 활동의 제목 또는 앱 아이콘

     

    이런 속성에 대한 값은 사용자 언어나 다른 기기 구성에 따라 달라질 수 있으므로 매니페스트 파일에 하드코딩하지 말고 리소스 또는 테마에서 값을 설정

    (예를 들어 기기 픽셀 밀도에 따라 다른 아이콘 크기 제공)

     

    리소스는 다음과 같은 형식의 값으로 표현

    "@[package:]type/name"

     

    앱에서 리소스를 제공할 경우 package 이름을 생략할 수 있음

     

    type string 또는 drawable 같은 리소스 유형이며 name는 특정 리소스를 식별하는 이름

    예 )

    <activity android:icon="@drawable/smallPic" ... >

    대신 테마에 정의된 값을 적용하려면 첫 문자는 @가 아니라 ?가 되어야

     

    전체 예제

     

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

     

    반응형

    'Android 관련' 카테고리의 다른 글

    Android 난독화 - Flutter  (0) 2024.07.31
    Google Play Console 앱 권한 관리  (0) 2023.09.06
    playStore App 판매 중단하기  (0) 2023.03.20
    PlayStore 검색 노출 시기키  (0) 2023.02.21
    No signature of method  (0) 2023.02.20

    댓글

Designed by Tistory.