안드로이드 워크북 1주차

Effy_ee·2022년 9월 27일
0

[UMC 3기]

목록 보기
1/1

Manifest란?

매니페스트 파일은 Android 빌드 도구, Android 운영체제 및 Google Play에 앱에 관한 필수 정보를 설명합니다.

매니페스트 주요 속성

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

2. application

<application android:allowTaskReparenting=["true" | "false"]
             android:allowBackup=["true" | "false"]
             android:allowClearUserData=["true" | "false"]
             android:allowNativeHeapPointerTagging=["true" | "false"]
             android:appCategory=["accessibility" | "audio" | "game" |
             "image" | "maps" | "news" | "productivity" | "social" | "video"]
             android:backupAgent="string"
             android:backupInForeground=["true" | "false"]
             android:banner="drawable resource"
             android:dataExtractionRules="string resource"
             android:debuggable=["true" | "false"]
             android:description="string resource"
             android:enabled=["true" | "false"]
             android:extractNativeLibs=["true" | "false"]
             android:fullBackupContent="string"
             android:fullBackupOnly=["true" | "false"]
             android:gwpAsanMode=["always" | "never"]
             android:hasCode=["true" | "false"]
             android:hasFragileUserData=["true" | "false"]
             android:hardwareAccelerated=["true" | "false"]
             android:icon="drawable resource"
             android:isGame=["true" | "false"]
             android:killAfterRestore=["true" | "false"]
             android:largeHeap=["true" | "false"]
             android:label="string resource"
             android:logo="drawable resource"
             android:manageSpaceActivity="string"
             android:name="string"
             android:networkSecurityConfig="xml resource"
             android:permission="string"
             android:persistent=["true" | "false"]
             android:process="string"
             android:restoreAnyVersion=["true" | "false"]
             android:requestLegacyExternalStorage=["true" | "false"]
             android:requiredAccountType="string"
             android:resizeableActivity=["true" | "false"]
             android:restrictedAccountType="string"
             android:supportsRtl=["true" | "false"]
             android:taskAffinity="string"
             android:testOnly=["true" | "false"]
             android:theme="resource or theme"
             android:uiOptions=["none" | "splitActionBarWhenNarrow"]
             android:usesCleartextTraffic=["true" | "false"]
             android:vmSafeMode=["true" | "false"] >
    . . .
</application>

설명: 이 요소는 애플리케이션의 각 구성요소를 선언하는 하위 요소를 포함하며 모든 구성요소에 영향을 줄 수 있는 속성을 가지고 있습니다. 이러한 속성 중 다수(예: icon, label, permission, process, taskAffinity, allowTaskReparenting)는 구성요소의 상응하는 속성에 기본값을 설정합니다. 그 외 속성(예: debuggable, enabled, description, allowClearUserData)은 애플리케이션의 값을 전체적으로 설정하며 구성요소별로 재정의할 수 없습니다.

3. activity

<activity android:allowEmbedded=["true" | "false"]
          android:allowTaskReparenting=["true" | "false"]
          android:alwaysRetainTaskState=["true" | "false"]
          android:autoRemoveFromRecents=["true" | "false"]
          android:banner="drawable resource"
          android:clearTaskOnLaunch=["true" | "false"]
          android:colorMode=[ "hdr" | "wideColorGamut"]
          android:configChanges=["mcc", "mnc", "locale",
                                 "touchscreen", "keyboard", "keyboardHidden",
                                 "navigation", "screenLayout", "fontScale",
                                 "uiMode", "orientation", "density",
                                 "screenSize", "smallestScreenSize"]
          android:directBootAware=["true" | "false"]
          android:documentLaunchMode=["intoExisting" | "always" |
                                  "none" | "never"]
          android:enabled=["true" | "false"]
          android:excludeFromRecents=["true" | "false"]
          android:exported=["true" | "false"]
          android:finishOnTaskLaunch=["true" | "false"]
          android:hardwareAccelerated=["true" | "false"]
          android:icon="drawable resource"
          android:immersive=["true" | "false"]
          android:label="string resource"
          android:launchMode=["standard" | "singleTop" |
                              "singleTask" | "singleInstance" | "singleInstancePerTask"]
          android:lockTaskMode=["normal" | "never" |
                              "if_whitelisted" | "always"]
          android:maxRecents="integer"
          android:maxAspectRatio="float"
          android:multiprocess=["true" | "false"]
          android:name="string"
          android:noHistory=["true" | "false"]  
          android:parentActivityName="string" 
          android:persistableMode=["persistRootOnly" | 
                                   "persistAcrossReboots" | "persistNever"]
          android:permission="string"
          android:process="string"
          android:relinquishTaskIdentity=["true" | "false"]
          android:resizeableActivity=["true" | "false"]
          android:screenOrientation=["unspecified" | "behind" |
                                     "landscape" | "portrait" |
                                     "reverseLandscape" | "reversePortrait" |
                                     "sensorLandscape" | "sensorPortrait" |
                                     "userLandscape" | "userPortrait" |
                                     "sensor" | "fullSensor" | "nosensor" |
                                     "user" | "fullUser" | "locked"]
          android:showForAllUsers=["true" | "false"]
          android:stateNotNeeded=["true" | "false"]
          android:supportsPictureInPicture=["true" | "false"]
          android:taskAffinity="string"
          android:theme="resource or theme"
          android:uiOptions=["none" | "splitActionBarWhenNarrow"]
          android:windowSoftInputMode=["stateUnspecified",
                                       "stateUnchanged", "stateHidden",
                                       "stateAlwaysHidden", "stateVisible",
                                       "stateAlwaysVisible", "adjustUnspecified",
                                       "adjustResize", "adjustPan"] >   
    . . .
</activity>

설명: 애플리케이션의 시각적 사용자 인터페이스 요소를 구현하는 활동(Activity 서브클래스)을 선언합니다. 모든 활동은 매니페스트 파일의 activity 요소로 나타내야 합니다. 여기에 선언되지 않은 활동은 시스템에 표시되지 않으며 실행되지 않습니다.

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

설명: 서비스(Service 서브클래스)를 애플리케이션의 구성요소 중 하나로 선언합니다. 활동과 달리 서비스는 시각적 사용자 인터페이스가 없습니다. 서비스는 오래 실행되는 백그라운드 작업이나 다른 애플리케이션에서 호출할 수 있는 리치 커뮤니케이션 API를 구현하는 데 사용합니다.
모든 서비스는 매니페스트 파일의 service 요소로 나타내야 합니다. 여기에 선언되지 않은 서비스는 시스템에 표시되지 않으며 실행되지 않습니다.

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

설명: broadcast receiver(BroadcastReceiver 서브클래스)를 애플리케이션의 구성요소 중 하나로 선언합니다. broadcast receiver를 사용하면 애플리케이션의 다른 구성요소가 실행되고 있지 않을 때도 시스템이나 다른 애플리케이션에서 브로드캐스트하는 인텐트를 애플리케이션에서 수신할 수 있습니다.
broadcast receiver를 시스템에 알리는 방법에는 두 가지가 있습니다. 한 가지 방법은 이 요소를 사용해 매니페스트 파일에 broadcast receiver를 선언하는 것입니다. 또 다른 방법은 코드에서 동적으로 broadcast receiver를 만든 다음 Context.registerReceiver() 메서드를 사용해 등록하는 것입니다.

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

콘텐츠 제공자 구성요소를 선언합니다. 콘텐츠 제공자는 애플리케이션에서 관리되는 데이터에 관해 구조화된 액세스를 제공하는 ContentProvider 서브클래스입니다. 애플리케이션의 모든 콘텐츠 제공자는 매니페스트 파일의 텍스트 provider 요소에서 정의해야 합니다. 그러지 않으면 시스템에서 인식하지 못해 이 구성요소를 실행하지 않습니다.
애플리케이션의 일부인 콘텐츠 제공자만 선언하세요. 애플리케이션에서 사용하는 다른 애플리케이션의 콘텐츠 제공자를 선언하면 안 됩니다.
Android 시스템은 제공자의 콘텐츠 URI의 일부인 권한 문자열에 따라 콘텐츠 제공자 참조를 저장합니다. 예를 들어 의료 전문가에 관한 정보를 저장하는 콘텐츠 제공자에 액세스하려는 경우 제공자를 식별하는 URI를 다른 인수에서 가져오는 ContentResolver.query() 메서드를 호출합니다.

7. intent-filter

<intent-filter android:icon="drawable resource"
               android:label="string resource"
               android:priority="integer" >
    . . .
</intent-filter>

활동, 서비스, broadcast receiver가 응답할 수 있는 인텐트의 유형을 지정합니다. 인텐트 필터는 상위 구성요소의 기능, 즉 활동이나 서비스가 할 수 있는 작업과 수신기가 처리할 수 있는 브로드캐스트의 유형을 선언합니다. 전달된 유형의 수신 인텐트로 구성요소를 열고 이 구성요소에 의미가 없는 인텐트를 필터링합니다.
필터 내용의 대부분은 action, category, data 하위 요소에서 설명됩니다.

8. action

<action android:name="string" />

설명: Activity, Service, Broadcast Receiver가 응답할 수 있는 인텐트의 유형을 지정합니다. 인텐트 필터는 상위 구성요소의 기능, 즉 활동이나 서비스가 할 수 있는 작업과 수신기가 처리할 수 있는 브로드캐스트의 유형을 선언합니다. 전달되는 유형의 수신 인텐트로 구성요소를 열고 이 구성요소에 유의미하지 않은 인텐트를 필터링합니다.

9. category

<category android:name="string" />

설명: intent filter 밑에 category 요소를 정의하여 component의 유형이 무엇인지 정의할 수 있습니다.

10. uses-permission

<uses-permission android:name="string"
        android:maxSdkVersion="integer" />

설명: 앱이 올바르게 작동하기 위해 사용자가 반드시 부여해야 하는 시스템 권한입니다.

여기에 정의된 권한은 애플리케이션 설치시 해당 어플리케이션이 어떤 권한을 요구하는지를 사용자에게 보여줍니다.

Intent

인텐트란 애플리케이션 컴포넌트(구성요소) 간에 작업 수행을 위한 정보를 전달하는 역할을 하며 통신수단이라고 보시면 됩니다. 인텐트를 가장 많이 사용하는 예로는 액티비티 간의 화면 전환(이동)이 있습니다.

  • 서로 독립적으로 동작하는 4가지 컴포넌트들 간의 상호 통신을 위한 장치입니다.
  • 컴포넌트에 액션(Action), 데이터(Data) 등을 전달합니다.
  • 인텐트를 통하여 다른 애플리케이션의 컴포넌트를 활성화시킬 수 있습니다.

0개의 댓글