๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Android

Android::Manifest

by ๋„์บ๋ฆฌ๐Ÿฑ 2020. 7. 1.
๋ฐ˜์‘ํ˜•

1. Manifest๋ž€?

  ๋ชจ๋“  ์•ฑ ํ”„๋กœ์ ํŠธ๋Š” ํ”„๋กœ์ ํŠธ ์†Œ์Šค ์„ธํŠธ์˜ ๋ฃจํŠธ์— AndroidManifest.xml ํŒŒ์ผ์ด ์žˆ์–ด์•ผ ํ•œ๋‹ค.

๋ฉ”๋‹ˆํŒจ์ŠคํŠธ ํŒŒ์ผ์€ Android ๋นŒ๋“œ ๋„๊ตฌ, Android ์šด์˜์ฒด์ œ ๋ฐ  Google play์— ์•ฑ์— ๊ด€ํ•œ ํ•„์ˆ˜ ์ •๋ณด๋ฅผ ์„ค๋ช…ํ•œ๋‹ค.

  ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ฐ๊ฐ์˜ ์ปดํฌ๋„ŒํŠธ(์•กํ‹ฐ๋น„ํ‹ฐ, ์„œ๋น„์Šค, ์ฝ˜์ฒธ์ธ  ๊ณต๊ธ‰์ž, ๋ธŒ๋กœ๊ทธ์บ์ŠคํŠธ ์ˆ˜์‹ ์ž) ์— ๋Œ€ํ•œ ๋…ธ๋“œ๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์ธํ…ํŠธ ํ•„ํ„ฐ(Intent Filter)์™€ ๊ถŒํ•œ(Permission) ์„ ์‚ฌ์šฉํ•ด ์ด๋“ค์ด ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ ๋ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ์–ด๋–ป๊ฒŒ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š”์ง€๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค.

 

  ๋˜ํ•œ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ(์•„์ด์ฝ˜์ด๋‚˜ ํ…Œ๋งˆ๋“ฑ์˜)๋ฅผ ์ง€์ •ํ•˜๊ธฐ ์œ„ํ•œ ์†์„ฑ์„ ๋น„๋กฏํ•ด, ๋ณด์•ˆ ์„ค์ •๊ณผ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์— ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋Š” ์ถ”๊ฐ€์ ์ธ ์ตœ์ƒ์˜ ๋…ธ๋“œ ์—ญ์‹œ ์ œ๊ณตํ•œ๋‹ค.


2. ๊ฐ๊ฐ์˜ Tag๋“ค์„ ์•Œ๊ธฐ์ „ ์•Œ์•„์•ผํ•  ๊ฒƒ!

  2-1. xml์—์„œ Node๋ผ๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ๊ฐœ๋…!

    : XSLT processor๋Š” xml ๋ฌธ์„œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ ์›๋ณธ ๋ฌธ์„œ๋ฅผ tree model์˜ instance๋กœ ์žฌ๊ตฌ์„ฑํ•œ๋‹ค. ์ด ๋•Œ ์ƒ๊ธฐ๋Š” ๋ฟŒ     ๋ฆฌ, ๊ฐ€์ง€, ์žŽ์œผ๋กœ ๋น„์œ ๋˜์–ด์„œ tree๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” element, attribute, text, comment ๊ฐ™์€ ๊ฐ๊ฐ์˜ component๋ฅผ node     ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

 

tree model

 

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapplication">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".Main2Activity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".MainActivity">

        </activity>
    </application>

</manifest>

 

  2-2. xml Parser๋ž€?

  : ์œ„์˜ ์ฝ”๋“œ๋ธ”๋Ÿญ์„ ๋ณด๋ฉด, ๋“ค์—ฌ์“ฐ๊ธฐ ๋•๋ถ„์— code๋ฅผ ๋ณด๋Š”๋ฐ ๋ฌด๋ฆฌ๊ฐ€ ์—†๋‹ค. ๋งŒ์•ฝ ๊ณต๋ฐฑ์ด๋‚˜ ๋“ค์—ฌ์“ฐ๊ธฐ ๋“ฑ์ด ์—†์ด ์“ฐ์—ฌ์žˆ๋‹ค๋ฉด,   ์•Œ์•„๋ณด๊ธฐ๊ฐ€ ํž˜๋“ค ๊ฒƒ์ด๋‹ค.

  ๋งŒ์•ฝ ์ผ๋ ฌ๋กœ ๋‚˜์—ด๋œ code ์ค‘์—์„œ ํ•„์š”ํ•œ data๋ฅผ ๊ฐ€์ ธ ์˜ค๋ผ๊ณ  ํ•œ๋‹ค๋ฉด ์–ด๋–ค ๋ฐฉ๋ฒ•์œผ๋กœ ์ถ”๋ ค๋‚ผ๊นŒ? ์ด๋ฅผ ์œ„ํ•ด์„œ data๋ฅผ   object๋กœ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฐ”๋กœ ๊ทธ ์—ญํ• ์„ ํ•˜๋Š” ๊ฒƒ์ด XML Parser์ด๋‹ค.

  ๊ทธ๋ฆฌ๊ณ  xml parser๊ฐ€ ๋งŒ๋“  object๋ฅผ xml์—์„œ๋Š” node๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ๊ฒƒ ์ด๋‹ค. 

 

xml Parser๊ฐ€ parsing์„ ํ•˜๊ณ  ๋‚˜๋ฉด tree ํ˜•ํƒœ์˜ ๋…ธ๋“œ๊ฐ€ ์ƒ๊ธฐ๊ฒŒ ๋˜๋ฉด ๊ฑฐ๊ธฐ์—๋Š” XSLT๋ฅผ ๋น„๋กฏํ•œ application์—์„œ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ค‘์š”ํ•œ ์ •๋ณด๋“ค์ด ๋‹ด๊ฒจ ์žˆ๊ฒŒ ๋œ๋‹ค. ๋Œ€ํ‘œ์ ์ธ ์˜ˆ์‹œ๋กœ,

 

  • Node๋ฅผ ์ผ๊ณฑ ๊ฐ€์ง€ type(root, element, attribute, textual, comment, processing-instruction, namespace)์œผ๋กœ ๊ตฌ๋ถ„ํ•ด์„œ ์„ ํƒ(select)ํ•˜์—ฌ match ์‹œํ‚ค๊ฑฐ๋‚˜ processing ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์œ„๊ณ„(hierachy)๊ฐ€ ์ƒ๊ธฐ๋ฏ€๋กœ์„œ (root)๊ฐ€ ์ƒ๊ธธ ๊ฒƒ์ด๊ณ , ๋ถ€๋ชจ(parent)์™€ ์ž์‹(child), ๋” ๋‚˜์•„๊ฐ€์„œ๋Š” ์กฐ์ƒ(ancestor)๊ณผ ์ž์†(descendant)์˜ ๊ด€๊ณ„๊ฐ€ ํ˜•์„ฑ๋˜๋ฏ€๋กœํ•ด์„œ ์ƒ๋Œ€์  ์œ„์น˜๋กœ ํ•„์š”ํ•œ node๋ฅผ ์„ ํƒ(select)ํ•˜์—ฌ match ์‹œํ‚ค๊ฑฐ๋‚˜ processing ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Source document์˜ node๋“ค์„ indexing(๋ฒˆํ˜ธ ๋งค๊ธฐ๊ธฐ)ํ•ด ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— node์˜ ์œ„์น˜(position), ๊ฐœ์ˆ˜(count), ์ด๋ฆ„(name)๋“ฑ์„ ์„ ํƒ(select)ํ•˜์—ฌ match ์‹œํ‚ค๊ฑฐ๋‚˜ processing ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

↓๋…ธ๋“œ๋กœ ๋‚˜๋ˆ„์–ด์„œ ํ‘œ์‹œ๋ฅผ ํ•ด๋ณด๋ฉด,(์ƒ‰์น ํ•œ block ํ•˜๋‚˜ํ•˜๋‚˜๋“ค์ด ๋…ธ๋“œ๋‹ค)

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapplication">

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".Main2Activity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".MainActivity">
</activity>
</application>
</manifest>

 

  - node type์œผ๋กœ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์žˆ๋‹ค.

( Root node / Processing-instruction node / Comment node /

Element node / Attribute node / Textual node )

 

  2-3. Root node?

: element๊ฐ€ ์•„๋‹ˆ๋ฉฐ, ๋ฌธ์„œ์ƒ์˜ ์ตœ์ƒ์œ„ element ๋ณด๋‹ค ์ƒ์œ„์— ์žˆ๋Š” document ์ž์ฒด์ด๊ณ , ๋ฌธ์„œ๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด ์ž๋™์œผ๋กœ ์ƒ๊ธฐ๊ฒŒ ๋˜๋Š” ๊ฒƒ.


3. Manifest ๋‚ด์˜ ๊ฐ ํƒœ๊ทธ ์กฐ์‚ฌ 

 

โ—‹ Manifest

ํฌํ•จํ•ด์•ผ ํ•˜๋Š” ํ•ญ๋ชฉ - <applicaton>

ํฌํ•จ ๊ฐ€๋Šฅํ•œ ์š”์†Œ - <compatible-screens>, <instrumentation>, <permission>, <permission-group>, <permission-tree>,<supports-gl-texture>, <supports-screens>, <uses-configuration>,<user-feature>,<user-permission>,<uses-permission-sdk-23>,<uses-sdk>

: manifest ํƒœ๊ทธ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์„ฑํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปดํฌ๋„ŒํŠธ, ๋ณด์•ˆ ์„ค์ •, ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•˜๋Š” ๋…ธ๋“œ๋ฅผ ๊ฐ€์ง„๋‹ค.

 

โ—‹ Application

ํฌํ•จ๋œ ์š”์†Œ - <manifest>

ํฌํ•จ ๊ฐ€๋Šฅํ•œ ์š”์†Œ - <activity>,<activity-alias>,<meta-data>,<service>,<receiver>,<provider>,<uses-library>

: application ์— ๋Œ€ํ•œ ๋ช…์‹œ ๋ถ€๋ถ„์ด๋‹ค. ์ด ์š”์†Œ๋Š” sub์š”์†Œ๋ฅผ ํฌํ•จํ•œ๋‹ค.

Sub ์š”์†Œ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฐ ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ์„ ์–ธํ•˜๊ณ  ๋ชจ๋“  ๊ตฌ์„ฑ์š”์†Œ์— ์˜ํ–ฅ์„ ์ค„์ˆ˜์žˆ๋Š” ์†์„ฑ์„ ๊ฐ€์ง„ ๊ฒƒ์„๋งํ•œ๋‹ค.

์ด ์—ฌ๋Ÿฌ ์†์„ฑ(icon, label, permission, process, taskAffinity,allowTaskReparenting)์ด ๊ตฌ์„ฑ์š”์†Œ์˜ ํ•ด๋‹นํ•˜๋Š” ์†์„ฑ์— ๊ธฐ๋ณธ๊ฐ’์„ ์„ค์ •๊ทธ ์™ธ์— ์†์„ฑ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฐ’์„ ์ „์ฒด์ ์œผ๋กœ ์„ค์ •ํ•˜๋ฉฐ ๊ตฌ์„ฑ์š”์†Œ๋ณ„๋กœ ์žฌ์ •์˜ ํ•  ์ˆ˜ ์—†๋‹ค.

 

โ—‹ Activity

ํฌํ•จ์œ„์น˜ -<application>

ํฌํ•จ๊ฐ€๋Šฅํ•ญ๋ชฉ -<intent-filter>, <meta-data>, <layout>

: activity ํƒœ๊ทธ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์˜ํ•ด ๋ณด์—ฌ์ง€๋Š” ๋ชจ๋“  ์•กํ‹ฐ๋น„ํ‹ฐ์— ํ•„์š”ํ•˜๋ฉฐ, android:name ์†์„ฑ์œผ๋กœ ํด๋ž˜์Šค ์ด๋ฆ„์„ ์ง€์ •ํ•œ๋‹ค. ๋งค๋‹ˆํŽ˜์ŠคํŠธ์— ์ •์˜๋˜์ง€ ์•Š์€ ์•กํ‹ฐ๋น„ํ‹ฐ๋ฅผ ์‹œ์ž‘ํ•˜๋ ค ํ•˜๋ฉด ๋Ÿฐํƒ€์ž„ ์˜ˆ์™ธ๊ฐ€ ๋˜์ ธ์งˆ ๊ฒƒ์ด๋‹ค. ๊ฐ ์•กํ‹ฐ๋น„ํ‹ฐ ๋…ธ๋“œ๋Š” ๊ทธ ์•กํ‹ฐ๋น„ํ‹ฐ๋ฅผ ๋„์šธ ์ธํ…ํŠธ๋ฅผ ์ง€์ •ํ•˜๋Š” intent-filter ์ž์‹ ํƒœ๊ทธ๋ฅผ ์ง€์›ํ•œ๋‹ค.

:์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ๊ณ„์ธต. ๋ชจ๋“  ํ™”๋ฉด์€ activityํด๋ž˜์Šค์˜ ํ™•์žฅ์ด ๋œ๋‹ค. activity๋Š” ๋ทฐ๋ฅผ ์‚ฌ์šฉํ•ด ์ •๋ณด๋ฅผ ๋ณด์—ฌ์ฃผ๊ณ  ์‚ฌ์šฉ์ž ์•ก์…˜์— ๋ฐ˜์‘ํ•˜๋Š” ๊ทธ๋ž˜ํ”ฝ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ˜•์„ฑํ•œ๋‹ค. ๋ฐ์Šคํฌํ†ฑ ๊ฐœ๋ฐœ์˜ ์ž…์žฅ์—์„œ ๋ณผ๋•Œ ์•กํ‹ฐ๋น„ํ‹ฐ๋Š” ํผ๊ณผ ๊ฐ™๋‹ค.

     

โ—‹ Intent-filter

ํฌํ•จ๋œ ์š”์†Œ - <activity> <activity-alias> <service> <receiver>

ํฌํ•จํ•ด์•ผ ํ•˜๋Š” ์š”์†Œ - <action>

ํฌํ•จ ๊ฐ€๋Šฅํ•œ ์š”์†Œ - <category> <data>

: activity, service, broadcast receiver๊ฐ€ ์‘๋‹ตํ•  ์ˆ˜ ์žˆ๋Š” ์ธํ…ํŠธ์˜ ์œ ํ˜•์„ ์ง€์ •ํ•œ๋‹ค. ์ธํ…ํŠธ ํ•„ํ„ฐ๋Š” ์ƒ์œ„ ๊ตฌ์„ฑ์š”์†Œ์˜ ๊ธฐ๋Šฅ, ์ฆ‰ activity๋‚˜ service๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์—…๊ณผ reciver๊ฐ€ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” boradcast์˜ ์œ ํ˜•์„ ์„ ์–ธ. ์ „๋‹ฌ๋˜๋Š” ์œ ํ˜•์˜ ์ˆ˜์‹  ์ธํ…ํŠธ๋กœ ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ์—ด๊ณ  ์ด ๊ตฌ์„ฑ์š”์†Œ์— ์œ ์˜๋ฏธํ•˜์ง€ ์•Š์€ ์ธํ…ํŠธ๋ฅผ ํ•„ํ„ฐ๋งํ•œ๋‹ค.

 

โ—‹ Action

ํฌํ•จ์š”์†Œ - <intent-filter>

: ์ธํ…ํŠธ ํ•„ํ„ฐ์— ์ž‘์—…์„ ์ถ”๊ฐ€ํ•œ๋‹ค. <intent-filter> ์š”์†Œ์— <aciton>์š”์†Œ๊ฐ€ ํ•˜๋‚˜ ์ด์ƒ ํฌํ•จ๋˜์–ด์•ผ ํ•œ๋‹ค.๋งŒ์•ฝ ์ธํ…ํŠธ ํ•„ํ„ฐ์— <action>์š”์†Œ๊ฐ€ ์—†์œผ๋ฉด ํ•„ํ„ฐ๊ฐ€ Intent ๊ฐ์ฒด ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

โ—‹ Category

ํฌํ•จ๋œ ์š”์†Œ - <intent-filter>

: ์ธํ…ํŠธ ํ•„ํ„ฐ์— ์นดํ…Œ๊ณ ๋ฆฌ ์ด๋ฆ„์„ ์ถ”๊ฐ€ํ•œ๋‹ค.

 

โ—‹ activity-alias

ํฌํ•จ๋œ ์š”์†Œ - <application>

ํฌํ•จ๊ฐ€๋Šฅํ•œ ํ•ญ๋ชฉ -<intent-filter>,<meta-data>

: activity์˜ ๋ณ„์นญ์œผ๋กœ, targetActivity ์†์„ฑ์—์„œ ์ด๋ฆ„์ด ์ง€์ •๋œ๋‹ค. ํƒ€๊ฒŸ์€ ๋ณ„์นญ๊ณผ ๋™์ผํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์žˆ์–ด์•ผ ํ•˜๋ฉฐ manifest์—์„œ ๋ณ„์นญ๋ณด๋‹ค ๋จผ์ € ์„ ์–ธ๋˜์–ด์•ผ ํ•œ๋‹ค.

 

โ—‹ Service

ํฌํ•จ๋œ ์œ„์น˜ - <application>

ํฌํ•จ๊ฐ€๋Šฅํ•œ ํ•ญ๋ชฉ -<intent-filter>,<meta-data>

:์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ณด์ด์ง€ ์•Š๋Š” ์ผ๊พผ. ์„œ๋น„์Šค ์ปดํฌ๋„ŒํŠธ๋Š” ํ™”๋ฉด์— ๋ณด์ด์ง€ ์•Š์€ ์ฑ„ ์‹คํ–‰๋˜์–ด, ์—ฌ๋Ÿฌ๋ถ„์˜ ๋ฐ์ดํ„ฐ ์†Œ์Šค์™€ ํ™”๋ฉด์— ๋ณด์ด๋Š” ์•กํ‹ฐ๋น„ํ‹ฐ๋“ค์„ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ์•Œ๋ฆผ์„ ์ƒ์„ฑํ•œ๋‹ค. ์„œ๋น„์Šค๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๊ฐ€์ง„ ์•กํ‹ฐ๋น„ํ‹ฐ๊ฐ€ ํ™œ์„ฑ์ƒํƒœ๊ฐ€ ์•„๋‹ˆ๊ฑฐ๋‚˜ ํ™”๋ฉด์— ๋ณด์ด์ง€ ์•Š์„ ๊ฒฝ์šฐ์—๋„ ๊ณ„์† ๋ผ์•ผ ํ•  ํ•„์š”๊ฐ€ ์žˆ๋Š” ์ •๊ทœ์ ์ธ ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

: Activity์™€ ๋‹ฌ๋ฆฌ ์„œ๋น„์Šค๋Š” ์‹œ๊ฐ์  ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์—†๋‹ค. ์„œ๋น„์Šค๋Š” ์˜ค๋ž˜ ์‹คํ–‰๋˜๋Š” ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—…์ด๋‚˜ ๋‹ค๋ฅธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ๋ฆฌ์น˜ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ API๋ฅผ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•œ๋‹ค.

๋ชจ๋“  ์„œ๋น„์Šค๋Š” manifestํŒŒ์ผ์˜ <service>์š”์†Œ๋กœ ๋‚˜ํƒ€๋‚ด์•ผํ•œ๋‹ค. ์—ฌ๊ธฐ์— ์„ ์–ธ๋˜์ง€ ์•Š์€ ์„œ๋น„์Šค๋Š” ์‹œ์Šคํ…œ์— ํ‘œ์‹œ๋˜์ง€ ์•Š์œผ๋ฉฐ ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค.

 

โ—‹ Provider

ํฌํ•จ๋œ ์š”์†Œ <application>

ํฌํ•จ ๊ฐ€๋Šฅํ•œ ์š”์†Œ <meta-data>,<grant-uri-permission>,<path-permission>

: ์ฝ˜ํ…์ธ  ์ œ๊ณต์ž ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ์„ ์–ธํ•œ๋‹ค. ์ฝ˜ํ…ํŠธ ์ œ๊ณต์ž๋Š” contentProvider์˜ ์„œ๋ธŒ ํด๋ž˜์Šค์ธ๋ฐ, ContentProvider์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๊ด€๋ฆฌ๋˜๋Š” ๋ฐ์ดํ„ฐ์— ๊ด€ํ•ด ๊ตฌ์กฐํ™”๋œ ์—‘์„ธ์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ชจ๋“  ์ฝ˜ํ…์ธ  ์ œ๊ณต์ž๋Š” manifestํŒŒ์ผ์˜ <provider> ์š”์†Œ์—์„œ ์ •์˜ํ•ด์•ผ ํ•œ๋‹ค. ๊ทธ๋Ÿฌ์ง€ ์•Š์œผ๋ฉด ์‹œ์Šคํ…œ์—์„œ ์ธ์‹๋˜์ง€ ์•Š๊ณ  ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค.

 

โ—‹ Receiver

ํฌํ•จ๋œ ์š”์†Œ <application>

ํฌํ•จ ๊ฐ€๋Šฅํ•œ ์š”์†Œ <intent-filter>, <meta-data>

:broadcast receiver(BroadcastReceiver ์„œ๋ธŒํด๋ž˜์Šค)๋ฅผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ตฌ์„ฑ์š”์†Œ ์ค‘ํ•˜๋‚˜๋กœ ์„ ์–ธํ•œ๋‹ค.

Broadcast receiver๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋‹ค๋ฅธ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์‹คํ–‰๋˜๊ณ  ์žˆ์ง€ ์•Š์„ ๋•Œ๋„ ์‹œ์Šคํ…œ์ด๋‚˜ ๋‹ค๋ฅธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธํŒ…ํ•˜๋Š” ์ธํ…ํŠธ๋ฅผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ๋‹ค.

broadcast receiver๋ฅผ ์‹œ์Šคํ…œ์— ์•Œ๋ฆฌ๋Š” ๋ฐฉ๋ฒ•์—๋Š” ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์€ ์ด ์š”์†Œ๋ฅผ ์‚ฌ์šฉํ•ด manifest ํŒŒ์ผ์— broadcast receiver๋ฅผ ์„ ์–ธํ•˜๋Š” ๊ฒƒ. ๋˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์€ ์ฝ”๋“œ์—์„œ ๋™์ ์œผ๋กœ broadcast receiver๋ฅผ ๋งŒ๋“  ๋‹ค์Œ Context.registerReceiver()๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ๋“ฑ๋กํ•˜๋Š” ๊ฒƒ. 

 

โ—‹permission

ํฌํ•จ๋œ์š”์†Œ - <manifest>

: ์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋‚˜ ๋‹ค๋ฅธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํŠน์ • ๊ตฌ์„ฑ์š”์†Œ ๋˜๋Š” ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ์ œํ•œํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋Š” ๋ณด์•ˆ ๊ถŒํ•œ์„ ์„ ์–ธ.

 

โ—‹uses-permission

: ์•ฑ์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘๋™ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐ˜๋“œ์‹œ ๋ถ€์—ฌํ•ด์•ผ ํ•˜๋Š” ์‹œ์Šคํ…œ ๊ถŒํ•œ. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์„ค์น˜๋ ๋•Œ ๋˜๋Š” ์•ฑ์ด ์‹คํ–‰์ค‘์ผ๋•Œ ์‚ฌ์šฉ์ž์—๊ฒŒ ์›ํ•œ์ด ๋ถ€์—ฌ๋œ๋‹ค.

 

โ—‹ Instrumentation

ํฌํ•จ๋œ์š”์†Œ- <manifest>

:์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ์‹œ์Šคํ…œ์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•  ์ˆ˜ ์žˆ๋Š” Instrumentation ํด๋ž˜์Šค๋ฅผ ์„ ์–ธํ•œ๋‹ค. ๊ณ„์ธก ๊ฐ์ฒด๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ตฌ์„ฑ์š”์†Œ ์ด์ „์— ์ธ์Šคํ„ด์Šคํ™” ๋œ๋‹ค.

 

 

 

4. Manifest ๋‚ด์˜ ๊ฐ ํƒœ๊ทธ ์š”์•ฝ

<?xml> ํ•ด๋‹น ํŒŒ์ผ์ด xml์ด๋ฉฐ ๋ฒ„์ „, ์ธ์ฝ”๋”ฉ ๋ฐฉ์‹

<manifest> ํ•ด๋‹น ํŒŒ์ผ์ด ๋งค๋‹ˆํŽ˜์ŠคํŠธ ๋ฐ์ดํ„ฐ์ด๋ฉฐ ํŒจํ‚ค์ง€ ์œ„์น˜ ๋“ฑ

<user-permission> ์•ฑ ๊ถŒํ•œ ์„ค์ •

<user-library> ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ง€์ •

<user-sdk> ์•ฑ ํ”Œ๋žซํผ ๋ฒ„์ „, API ๋ ˆ๋ฒจ, ์ง€์ • API ๋ณด๋‹ค ๋‚ฎ์€ ๊ฒฝ์šฐ ์•ฑ ๋™์ž‘ ์ •์ง€

<user-feature> ํ•˜๋“œ์›จ์–ด, ์†Œํ”„ํŠธ์›จ์–ด ๊ธฐ๋Šฅ ์„ ์–ธ

<user-permission> ํ‘œ์ค€ ์‹œ์Šคํ…œ ๊ถŒํ•œ ์„ค์ •

<permission> ๋ณด์•ˆ ๊ถŒํ•œ ์„ค์ •

<permission-group> ๋ณด์•ˆ ์‚ฌ์šฉ ๊ถŒํ•œ ๊ทธ๋ฃน ์ œ๊ณต

<permission-tree> ๋ณด์•ˆ ๊ถŒํ•œ์„ ์ด๋ฆ„ ํŠธ๋ฆฌ๋กœ ์„ค์ •ํ•˜์—ฌ ํ•ด๋‹น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ํŠธ๋ฆฌ ๋‚ด์˜ ๋ชจ๋“  ์ด๋ฆ„ ํŠธ๋ฆฌ์˜ ๊ถŒํ•œ์„ ๊ฐ€์ง

<permission> ๋ณด์•ˆ ๊ถŒํ•œ ์„ค์ •

<application> ์•ฑ์˜ ์‹ค์งˆ์ ์ธ ๊ตฌ์„ฑ, ๋‚ด์šฉ

<activity> ํŽ˜์ด์ง€ ๋‹จ์œ„(java, xml)

<intent-filter> ์•ฑ ํŽ˜์ด์ง€์˜ ํ™œ๋™, ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋Šฅ ์„ ์–ธ

<action>์ธํ…๋“œ ํ•„ํ„ฐ์˜ ์š”์†Œ

<category> ์ธํ…๋” ํ•„ํ„ฐ์˜ ์ด๋ฆ„

<data> ์ธํ…๋” ํ•„ํ„ฐ์˜ ๋ฐ์ดํ„ฐ ์‚ฌ์–‘, ๋ฐ์ดํ„ฐ ์œ ํ˜•

<grant-uri-permission> ๋ถ€๋ชจ ์ฝ˜ํ…์ธ  ๊ณต๊ธ‰์ž์˜ ๋ฐ์ดํ„ฐ ํ•˜์œ„ ์ง‘ํ•ฉ์— ๋Œ€ํ•ด ๋ถ€์—ฌ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ

<instrumentation> ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ๊ณผ ์‹œ์Šคํ…œ์˜ ์ƒํ˜ธ์ž‘์šฉ ๋ชจ๋‹ˆํ„ฐ๋ง

<meta-data> ์ž„์˜ ๋ฐ์ดํ„ฐ ํ•ญ๋ชฉ ์ด๋ฆ„๊ณผ ๊ฐ’์˜ ๋ฌถ์Œ

<provider> ์ฝ˜ํ…์ธ  ๊ณต๊ธ‰์ž ๊ตฌ์„ฑ์š”์†Œ ์„ ์–ธ, ์‹œ์Šคํ…œ์—์„œ ์ธ์‹

<receiver> ๋‹ค๋ฅธ ์‘์šฉํ”„๋กœ๊ทธ๋žจ์—์„œ ๋ธŒ๋กœ๋“œ ์บ์ŠคํŠธ๋˜๋Š” ์ธํ…ํŠธ๋ฅผ ์ˆ˜์‹ ํ•จ

<service> activity์™€ ๋‹ฌ๋ฆฌ ์‹œ๊ฐ์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์•„๋‹Œ ํด๋ž˜์Šค(๋ฐฑ ๊ทธ๋ผ์šด๋“œ์šฉ)

<supprots-screens> ๋‹ค์–‘ํ•œ ํฌ๊ธฐ์˜ ํ™”๋ฉด์— ๋Œ€ํ•œ UI ์ตœ์ ํ™” ์„ค์ •


์ฐธ๊ณ ํ•œ ๋งํฌ

https://developer.android.com/studio/intro?hl=ko

https://surai.tistory.com/category/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C

https://java.ihoney.pe.kr/94?category=398184

https://followers.tistory.com/9

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€