안드로이드 프로그램에 대한 전반적은 세팅 파일
- xml 형색(yml 과 비슷)
- 역할
- 사용자 권한 식별(인터넷 엑세스, 사용자 연락처 읽기 액세스.. etc)
- 앱이 요구하는 최소 api
cf) 최소 api - 안드로이드 플렛폼 버전에서 제공하는 프레임워크 api 수정 버전 - 앱에서 요구하는 hw, sw기능(카메라, 음성인식 ... etc)
- 앱에 링크되어야 하는 api라이브러리 선언
기본 프로젝트 세팅
<manifest xmlns:android="<http://schemas.android.com/apk/res/android>"
package="com.example.manifastproject">
<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=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
항목 설명
application
- 애플리케이션 모든 요소에 영향을 주는 것 선언
intent-filter
- 활동, 서비스, receiver가 응답할 수 있는 intent유형 지정
- 전달되는 유형의 수신 intent를 필요 유무에 따라 사용
- 대부분 action, catagory, data 아래 포함
- 요소
- 포함 요소 - activity, activity-alias, service, recevier
- 필수 포함 요소 - action
- 포함 가능 요소 - catagory, data
- 속성
- android:icon - 따로 지정하지 않으면 에 정의된 아이콘 들어감 (사용자가 보이는 아이콘)
- android:label - 사용자에게 보이는 글자
- android:priority - 필터에 설정된 intent처리와 관련해 상위 구성요소에 부여하는 우선수위 cf) setPriorty, getPriorty
- android:order - 필터가 일치할 때 필터 처리되는 순서
cf ) priority= 앱전체, order=단일앱에서 일치하는 filter의 순서
action
안에 있어야함
intent-filter에 작업을 추가시킴 (특정 액션)
intent-filter 에 action이 있어야지 intent객체 허용
속성
android:name - 작업이름(변수명), Intent 클래스의 상수로 정의
activity
애플리케이션에서 사용자에게 시각적으로 느끼게 하는 것
요소
포함가능 항목 - intent-filter, meta-data, layout
특성
android:allowEmbedded - 액티비티가 다른 액티비티의 포함된 하위항목으로 시작할수 있음
android:alwaysRetainTaskState - 시간이 지난후 시스템이 했던 작업 초기화
android:exported - 다른 애플리케이션의 구성요소로 액티비티 실행 가능 여부
<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"] 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>
(https://developer.android.com/guide/topics/manifest/activity-element)
activity-alias
targetActivity 속성에 이름이 지정되어 있어야함
타켓은 별칭과 동일한 application이 있어야하며 menifest보다 먼저 선언됨
타켓 활동에 독립적 항목 (고유 인텐트 필터 소유 가능)
하위집합에 있는 속성인 경우 타켓에 설정된 어떤 값도 적용 X
But, 하위집합이 없다면 타켓 활동에 별칭이 적용
와 의 enabled속성이 둘다 true여야지 사용 가능
요소
포함된 요소 : application
포함 가능 요소 : intent-filter, meta-data
<activity-alias android:enabled=["true" | "false"] android:exported=["true" | "false"] android:icon="drawable resource" android:label="string resource" android:name="string" android:permission="string" android:targetActivity="string"> . . . </activity-alias>
(https://developer.android.com/guide/topics/manifest/activity-alias-element)
category
- 인텐트를 처리해야하는 구성요소의 종류 및 추가 정보를 담은 문자열
- intent안에 있어도되지만 없어도됨
- ex) CATEGORY_BROWSABLE (대상 액티비티가 웹브라우저를 통해 시작하도록 허용, 미디어 링크 참조된 데이터 허용)
- ex) CATEGORY_LAUNCHER (작업 최조 액티비티, 시스템 애플리케이션 시작 관리자에 목록)
- 요소
- 포함된 요소- intent-filter
data
- intent 에 포함할 데이터 사양
- 요소
- 포함된 요소 - intent-filter
- scheme://host:port[path |pathPrefix|pathPattern]
provider
- 콘텐츠 제공자 구성요소 선언
- 애플리케이션에서 관리되는 데이터에 관해 정해진 엑세스 제공
- 애플리케이션에서 사용되는 provider는 다른 애플리케이션에서 선언하면 안됨
- 요소
- 포함된 요소 - application
- 포함 가능한 요소 - meta-data, grant-uri-permission, path-permission
reseiver
- 애플리케이션의 구성요소중 하나
- 애플리케이션의 다른 구성요소가 실행되고 있지 않아도 시스템이나 다른 애플리케이션에서 브로드캐스팅하는 인스턴트를 애플리케이션에서 수행가능
service
- 애플리케이션의 구성요소중 하나
- activity와 달리 사용자에게 시각적으로 영향을 주는게 없음
- 백그라운드 작업, api작업 구현시 사용
- 모든 서비스는 manifest에 service 등록해야 실행 가능
uses-configuration
- application에 필요한 sw, hw 기능
- 대부분의 앱에서는 사용 안함
- 언제 사용? 시각장애인 지원 터치패드 ...etc
uses-feature
- 외부 에플리케이션이 의존하는 hw, sw기능 집합
uses-permission
- 예를 들어 '카메라'기능이 필요한경우 google play는 애플리케이션 실행시 카메라 기능이 필요하다고 생각하고 이를 제공하지 않는 기기에서 애플리케이션을 필터링 해야함
- 이때 필터링을 하기위해 uses-permission 요소에 카메라 기능을 검색하는데 googleplay에 의존하지 않고 uses-feature요소에 하드웨어 기능을 명시적으로 선언한후, 특정 기능을 비활성화 하고 싶은 경우 android:required="false" 특성을 에 추가
권한
- 안드로이드는 권한이 필요함
- 여기에서 말하는 권한은 연락처, sns에 접근 권한
- 권한 관련 : https://developer.android.com/guide/topics/permissions/overview?hl=ko
// 설정 방법
<manifest>
<users-permission android:name="android.permission.SEND_SMS"/>
</manifest>
앱 구성 요소
- activity
- 사용자가 보는 하나의 화면
- ex) mail app -> 메일 작성, 메일 리스트, 새메일알림...
- service
- activity 에서 동작 하는 함수
- broadcast reviewer
- 정기적인 이벤트 밖에서 구성되는 이벤트들
- ex) 알림기능
- content provider
안드로이드는 activity, service, broadcast reviewer는 " 비동기 메세지(인텐트)" 로 활성화
cf ) intent 란?
- 구성 요소가 어느 앱에 속하든 관계없이 다른 구성 요소로부터 작업을 요청하는 역할
- 특정 구성요소를 활성화 할지 아니면 구성요소의 암시적 특정 유형을 활성화할지 나타내는 메시지를 정의
- activity끼리 통신하기 위한 통신 장치
주의 사항
- android: ~로 시작
- , 는 필수 요소
- 같은 라인에 있는 것들은 순서가 중요하지 않다
- 예외 : 는 다음에 와야함
- 예외 : 은 의 마지막에 와야함
매니페스트란 ?
- xml 형색(yml 과 비슷)
- 안드로이드 프로그램에 대한 전반적인 세팅 파일
- 역할
- 사용자 권한 식별(인터넷 엑세스, 사용자 연락처 읽기 액세스.. etc)
- 앱이 요구하는 최소 api
cf) 최소 api - 안드로이드 플렛폼 버전에서 제공하는 프레임워크 api 수정 버전 - 앱에서 요구하는 hw, sw기능(카메라, 음성인식 ... etc)
- 앱에 링크되어야 하는 api라이브러리 선언
기본 프로젝트 세팅
<manifest xmlns:android="<http://schemas.android.com/apk/res/android>"
package="com.example.manifastproject">
<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=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
항목 설명
- application
- 애플리케이션 모든 요소에 영향을 주는 것 선언
- intent-filter
- 활동, 서비스, receiver가 응답할 수 있는 intent유형 지정
- 전달되는 유형의 수신 intent를 필요 유무에 따라 사용
- 대부분 action, catagory, data 아래 포함
- 요소
- 포함 요소 - activity, activity-alias, service, recevier
- 필수 포함 요소 - action
- 포함 가능 요소 - catagory, data
- 속성
- android:icon - 따로 지정하지 않으면 에 정의된 아이콘 들어감 (사용자가 보이는 아이콘)
- android:label - 사용자에게 보이는 글자
- android:priority - 필터에 설정된 intent처리와 관련해 상위 구성요소에 부여하는 우선수위 cf) setPriorty, getPriorty
- android:order - 필터가 일치할 때 필터 처리되는 순서
cf ) priority= 앱전체, order=단일앱에서 일치하는 filter의 순서
- action
- 안에 있어야함
- intent-filter에 작업을 추가시킴 (특정 액션)
- intent-filter 에 action이 있어야지 intent객체 허용
- 속성
- android:name - 작업이름(변수명), Intent 클래스의 상수로 정의
- activity
- 애플리케이션에서 사용자에게 시각적으로 느끼게 하는 것
- 요소
- 포함가능 항목 - intent-filter, meta-data, layout
- 특성
- android:allowEmbedded - 액티비티가 다른 액티비티의 포함된 하위항목으로 시작할수 있음
- android:alwaysRetainTaskState - 시간이 지난후 시스템이 했던 작업 초기화
- android:exported - 다른 애플리케이션의 구성요소로 액티비티 실행 가능 여부
<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"]
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>
https://developer.android.com/guide/topics/manifest/activity-element
- activity-alias
- targetActivity 속성에 이름이 지정되어 있어야함
- 타켓은 별칭과 동일한 application이 있어야하며 menifest보다 먼저 선언됨
- 타켓 활동에 독립적 항목 (고유 인텐트 필터 소유 가능)
- 하위집합에 있는 속성인 경우 타켓에 설정된 어떤 값도 적용 X
- But, 하위집합이 없다면 타켓 활동에 별칭이 적용
- 와 의 enabled속성이 둘다 true여야지 사용 가능
- 요소
- 포함된 요소 : application
- 포함 가능 요소 : intent-filter, meta-data
<activity-alias android:enabled=["true" | "false"]
android:exported=["true" | "false"]
android:icon="drawable resource"
android:label="string resource"
android:name="string"
android:permission="string"
android:targetActivity="string" >
. . .
</activity-alias>
(https://developer.android.com/guide/topics/manifest/activity-alias-element)
- category
- 인텐트를 처리해야하는 구성요소의 종류 및 추가 정보를 담은 문자열
- intent안에 있어도되지만 없어도됨
- ex) CATEGORY_BROWSABLE (대상 액티비티가 웹브라우저를 통해 시작하도록 허용, 미디어 링크 참조된 데이터 허용)
- ex) CATEGORY_LAUNCHER (작업 최조 액티비티, 시스템 애플리케이션 시작 관리자에 목록)
- 요소
- 포함된 요소- intent-filter
- data
- intent 에 포함할 데이터 사양
- 요소
- 포함된 요소 - intent-filter
- scheme://host:port[path |pathPrefix|pathPattern]
- provider
- 콘텐츠 제공자 구성요소 선언
- 애플리케이션에서 관리되는 데이터에 관해 정해진 엑세스 제공
- 애플리케이션에서 사용되는 provider는 다른 애플리케이션에서 선언하면 안됨
- 요소
- 포함된 요소 - application
- 포함 가능한 요소 - meta-data, grant-uri-permission, path-permission
- reseiver
- 애플리케이션의 구성요소중 하나
- 애플리케이션의 다른 구성요소가 실행되고 있지 않아도 시스템이나 다른 애플리케이션에서 브로드캐스팅하는 인스턴트를 애플리케이션에서 수행가능
- service
- 애플리케이션의 구성요소중 하나
- activity와 달리 사용자에게 시각적으로 영향을 주는게 없음
- 백그라운드 작업, api작업 구현시 사용
- 모든 서비스는 manifest에 service 등록해야 실행 가능
- uses-configuration
- application에 필요한 sw, hw 기능
- 대부분의 앱에서는 사용 안함
- 언제 사용? 시각장애인 지원 터치패드 ...etc
- uses-feature
- 외부 에플리케이션이 의존하는 hw, sw기능 집합
- uses-permission
- 예를 들어 '카메라'기능이 필요한경우 google play는 애플리케이션 실행시 카메라 기능이 필요하다고 생각하고 이를 제공하지 않는 기기에서 애플리케이션을 필터링 해야함
- 이때 필터링을 하기위해 uses-permission 요소에 카메라 기능을 검색하는데 googleplay에 의존하지 않고 uses-feature요소에 하드웨어 기능을 명시적으로 선언한후, 특정 기능을 비활성화 하고 싶은 경우 android:required="false" 특성을 에 추가
권한
- 안드로이드는 권한이 필요함
- 여기에서 말하는 권한은 연락처, sns에 접근 권한
- 권한 관련 : https://developer.android.com/guide/topics/permissions/overview?hl=ko
// 설정 방법
<manifest>
<users-permission android:name="android.permission.SEND_SMS"/>
</manifest>
앱 구성 요소
- activity
- 사용자가 보는 하나의 화면
- ex) mail app -> 메일 작성, 메일 리스트, 새메일알림...
- service
- activity 에서 동작 하는 함수
- broadcast reviewer
- 정기적인 이벤트 밖에서 구성되는 이벤트들
- ex) 알림기능
- content provider
안드로이드는 activity, service, broadcast reviewer는 " 비동기 메세지(인텐트)" 로 활성화
cf ) intent 란?
- 구성 요소가 어느 앱에 속하든 관계없이 다른 구성 요소로부터 작업을 요청하는 역할
- 특정 구성요소를 활성화 할지 아니면 구성요소의 암시적 특정 유형을 활성화할지 나타내는 메시지를 정의
- activity끼리 통신하기 위한 통신 장치
주의 사항
- android: ~로 시작
- , 는 필수 요소
- 같은 라인에 있는 것들은 순서가 중요하지 않다
- 예외 : 는 다음에 와야함
- 예외 : 은 의 마지막에 와야함
'Study(Language) > Android' 카테고리의 다른 글
[안드로이드] titleBar 없애는법 (0) | 2020.06.17 |
---|---|
[안드로이드] 안드로이드 팔렛트 기능 (0) | 2020.06.07 |
[안드로이드] 6대 레이아웃 (0) | 2020.06.05 |
[안드로이드] 4대 컴포넌트 (0) | 2020.06.03 |