목차
1. 안드로이드 컴포넌트들
A. Activity
B. Service
C. Broadcast Receiver
D. Content Provider
2. 안드로이드 앱 빌드 및 실행 과정
A. 리소스 정의
Strings
User Interface Layout
R.java
B. 응용프로그램 구현
C. apk 이미지 만들기
D. 인스톨 및 실행
3. 시리즈 연재
1. 안드로이드 컴포넌트들
안드로이드 앱은 아래와 같은 4가지 기본적인 빌딩블락들로 이뤄진다. 모든 앱들은 한 가지 이상의 컴포넌트의 조합으로 만들어진다.
Activity : GUI를 처리해주는 컴포넌트
Service : 백그라운드 연산을 처리해주는 컴포넌트
Broadcast receiver : 이벤트를 처리해주는 컴포넌트
Content provider : 여러 앱들의 공유할 수 있는 데이터를 생성 관리해주는 컴포넌트
결국 앱을 개발한다는 것은 위의 컴포넌트들을 필요한 형태로 잘 조합하는 행위라고 볼 수 있다.
A. Activity
사용자와의 상호작용을 위한 기본적인 컴포넌트/클래스이다. 보통 하나의 UI를 표현하는 데 하나의 Activity가 사용된다. 하지만 태블릿의 경우처럼 화면이 커지는 경우 여러 activity를 사용하기도 한다.
B. Service
백그라운드 실행되는 컴포넌트/클래스이다.
UI를 방해하지 않고 긴 시간 동안 동작해야 하는 오퍼레이션 처리 (ex : 파일 백업)
다른 프로세스와의 상호동작을 지원하는 기능 처리
뮤직 플레이 앱의 경우를 예로 들자면, 음악을 들으면서 이메일을 확인할 수 있다. 뮤직 플레이 기능 자체는 서비스에 의해서 구현되어 있기 때문에 가능한 시나리오이다.
C. Broadcast Receiver
(특정한) 이벤트를 기다리고 이벤트가 발생하면 정해진 작업을 수행하는 컴포넌트이다. 이벤트는 Intent 클래스에 의해서 표현되며 Intent가 broadcast 되게 되면 해당 Intent를 받은 Broadcast Receiver가 정해진 작업을 수행하는 형태이다.
SMS 메시지를 예로 들어본다. SMS가 오면 알림바에 SMS 수신 정보가 발생한다. 이 상황은 SMS를 기다리는 소프트웨어가 SMS 수신시 시스템 전체에 특정 메시지(Intent)를 전파 (브로드케스트)하고 해당 메시지에 관심이 있는 소프트웨어가 그것을 받아 (Broadcast Receiver) 알림창에 표시했다고 볼 수 있다.
D. Content Provider
여러 응용에서 접근 가능한 정보를 저장하고 공유하는 역할을 수행하는 컴포넌트이다. 데이터베이스 접근과 비슷한 형태의 인터페이스를 제공하고 있다. 여러 앱들이 쉽게 데이터를 얻고 바꿀 수 있도록 도와준다.
2. 안드로이드 앱 빌드 및 실행 과정
apk 파일을 만들어 내는 과정을 의미한다. 아래 이미지는 빌드에 대해서 설명해 놓은 안드로이드 공식문서에서 가져온 이미지다. apk 파일은 아래 그림에서 볼 수 있듯이 안드로이드 앱을 감싸고 있는 컨테이너이다. zip파일 이랑 비슷하다고 생각하면 된다.
A. 리소스 정의
리소스를 사용하는 장점은 컴파일 과정 없이 리소스의 변경만으로 앱을 수정할 수 있다는 것이다. 코드는 동일하게 사용하고 리소스로 다양한 디바이스, 셋팅, 설정을 대응할 수 있다. 리소스에 대해서는 다음 링크에서 조금 더 상세히 살펴볼 수 있다.
Strings
문자열, 문자열 배열, 단수/복수 문자열이 속하는 리소스이다.
리소스 파일 위치
res/values/*.xml 파일에 저장된다.
<string name=”hello”>Hello World!</string> 형태로 저장된다.
접근 방식
다른 리소스 파일: @string/string_name
Java 소스 파일: R.string.string_name
국제화 지원
res/values/strings.xml
res/values-it/strings.xml ⇐ 이탈리아 문자열
디바이스의 설정에 따라서 적절한 문자열이 사용된다.
User Interface Layout
UI 레이아웃을 설명한 XML 파일이다. 하나의 Activity 당 최소 하나의 XML을 가지게 된다.
리소스 파일 위치
res/layout/*.xml 파일에 저장된다.
접근 방식
다른 리소스 파일: @layout/layout_name
Java 소스 파일 : R.layout.layout_name
다중 레이아웃 지원
res/layout/main.xml
res/layout-land/main.xml ⇐ landscape 모드 레이아웃
디바이스의 설정, 스크린 사이즈, 방향에 따라서 다른 레이아웃이 자동으로 설정된다.
R.java
java 소스코드에서 리소스를 참조하기 위해서는 리소스에 해당하는 ID 등을 알아야 한다. 리소스들에 대한 정보는 컴파일 시점에 하나의 파일로 취합 되는데 이것이 R.java 파일이다.
B. 응용프로그램 구현
UI를 가지는 안드로이드 앱의 경우 최소 하나의 Activity는 가지게 된다. Activity는 onCreate 함수에서 자신을 초기화 하게 되는데 초기화 루틴은 아래와 같다.
savedInstanceState로 저장된 상태를 복구
super.onCreate(savedInstanceState)
ContentView 설정
setContentView(R.layout.main)
리소스 컴포넌트 초기화
final Button button = (Button) findViewById(R.id.button)
리소스 컴포넌트에 이벤트들을 연결하는 코드
button.setOnClickListener(new Button.OnClickListener() { …});
C. apk 이미지 만들기
APK 파일을 만드는 작업이다. 개발자는 APK 파일을 만들기 위한 정보를 AndroidManifest.xml 파일에 기술하게 되고 빌드 시스템은 AndroidManifest.xml 파일을 기준으로 APK 파일을 생성하게 된다. 즉, 컴파일을 위해서는 AndroidManifest.xml를 잘 기술해줘야 한다. 상세한 내용은 다음 링크를 확인하자. AndroidManifest.xml 파일에는 다음과 같은 내용들이 정리되어 있다.
안드로이드 앱의 이름
포함하고 있는 컴포넌트들 (빌딩블락)
앱이 필요한 권한 (인스톨 화면에 노출된다)
최소한의 API 버전 (앱스토어에서 노출 유무가 결정된다)
D. 인스톨 및 실행
IDE를 사용하면 (eclipse / 안드로이드 스튜디오) 에뮬레이터나 실제 디바이스 중 선택해서 실행해볼 수 있다.
커맨드 라인으로도 실행을 해볼 수 있는데 명령어는 다음과 같다.
% adb install <path_to_apk>
3. 시리즈 연재
'소프트웨어 > 안드로이드앱' 카테고리의 다른 글
[안드로이드 기초#4] 인텐트 (Intent) (0) | 2015.07.02 |
---|---|
[안드로이드 기초#3] 액티비티 (Activity) (0) | 2015.07.01 |
[안드로이드 기초#1] 플랫폼과 개발환경 (1) | 2015.06.29 |
안드로이드 스튜디오의 유용한 단축키 (3) | 2015.06.28 |
안드로이드 스튜디오 샘플코드 임포트 (0) | 2015.06.27 |