본문

170328(화) - App 기본 항목

App 기본 항목


앱 기본 항목

- Android SDK Tool

ㆍ모든 데이터 및 리소스 파일과 함께 코드를 컴파일 -> 하나의 APK 생성


- APK

ㆍ아카이브 파일

ㆍAndroid 앱은 일단 기기에 설치되면 자체적인 보안 샌드박스에 존재

ㆍAndroid OS == Linux 멀티유저 시스템 : 각 앱은 각기 다른 user와 같다.

ㆍSystem이 각 앱에 고유한 Linux ID를 할당

ㆍ각 프로세스에는 자체 VM이 있어서 앱은 각기 분리된 상태로 실행

ㆍ모든 앱은 Linux 프로세스에서 실행


- principle of least privilege

ㆍ각 앱은 기본적으로 작업 수행을 위해 필요한 구성요소에만 접근 가능


- 여러 앱과의 데이터 공유

ㆍ같은 Linux ID를 공유

ㆍpermission 명시로 권한 획득


Application 구성 요소

- Activity

ㆍ사용자 인터페이스가 있는 단일화면


- Service

ㆍBackground에서 실행되는 구성요소

ㆍ오랫동안 실행되는 작업 수행 or 원격 프로세스를 위한 작업 수행

ㆍ사용자 인터페이스가 없음


- CP (Content Provider)

ㆍ공유된 App data set을 관리

ㆍFile system, SQLite DB, 웹, 영구 저장소 등 액세스 가능한 곳이면 어디든 저장 가능

ㆍ데이터 쿼리, 수정도 가능


- BR (Broadcast Receiver)

ㆍSystem range의 BR 알림이 응답하는 구성요소



ㆍ어떤 App이든 다른 App의 구성요소를 시작 가능

ㆍIntent 받는쪽의 프로세스로 실행된다.


Intent

- 비동기식 메시지

- 각각의 구성요소를 런타임에 서로 바인드

- explicit or implicit

- CP는 Intent가 활성화 되지 않음

ㆍContentResolver로부터 요청되면 활성화


ㆍActivity : startActivity(), startActivityForResult()

ㆍService : startService()

ㆍBR : sendBroadcast(), sendOrderedBroadcast(), sendStickyBroadcast()

ㆍCP : ContentResolver에서 query() 호출


Manifest file

- 앱 구성요소 시작을 위해서 존재하는지 확인작업 필요

- AndroidManifest.xml 파일을 리딩

- 모든 구성요소 선언

- 디렉토리의 루트에 존재해야 한다.


ㆍ모든 사용자 권한 식별

ㆍAPI Level 선언

ㆍ필요로 하는 HW, SW 기능 선언

ㆍ링크 되어야 하는 API 라이브러리 선언


<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
   
<application android:icon="@drawable/app_icon.png" ... >
       
<activity android:name="com.example.project.ExampleActivity"
                 
android:label="@string/example_label" ... >
       
</activity>
        ...
   
</application>
</manifest>

ㆍActivity : <activity>

ㆍService : <service>

ㆍBR : <receiver>

ㆍCP : <provider>


- BR은 코드상에서 선언 가능하다.

ㆍBroadcastReceiver의 registerReceiver() 호출


구성요소 기능 선언

- implicit 응답 및 식별 방법

ㆍintent-filter


<manifest ... >
    ...
   
<application ... >
       
<activity android:name="com.example.project.ComposeEmailActivity">
           
<intent-filter>
               
<action android:name="android.intent.action.SEND" />
               
<data android:type="*/*" />
               
<category android:name="android.intent.category.DEFAULT" />
           
</intent-filter>
       
</activity>
   
</application>
</manifest>


지원하는 기기 프로필 정의


<manifest ... >
   
<uses-feature android:name="android.hardware.camera.any"
                 
android:required="true" />
   
<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="19" />
    ...
</manifest>


App resource

- 소스코드와 별개로 이미지, 오디오, 시각적 표현 등 리소스를 XML로 관리

- 다양한 특성을 쉽게 업데이트 가능

- 코드 수정 최소화

- 다양한 기기에 최적화 가능



'Mobile > Android API' 카테고리의 다른 글

170411(화) - System permission  (0) 2017.04.11
170411(화) - Device Compatibility  (0) 2017.04.11
170328(화) - ART & Dalvik  (0) 2017.03.28
170328(화) - DEX (Dalvik Executable format)  (0) 2017.03.28
170321(화) - Android 구조  (0) 2017.03.21

공유

댓글