안드로이드 이해하기 - 첫 걸음 떼기

2023. 1. 2. 19:57모바일프로그래밍/안드로이드

728x90

https://www.cprogramming.com/android/android_getting_started.html

 

An Introduction to Android Development - Cprogramming.com

Developing for Android - An Introduction Author: Rupali Sharma What is Android? Android is the world's most popular operating system for mobile devices and tablets. It is an open source operating system, created by Google, and available to all kinds of dev

www.cprogramming.com

 

1. 안드로이드란 무엇인가?

안드로이드는 타블렛과 모바일 기기의 운영체제로서는 세계에서 가장 유명하다.

오픈소스 운영체체이며 구글에서 만들었고 다양한 전문분야의 개발자에게 제공된다.

(오픈소스라는 말은 정말 친근하지 않나? 뭐, 오픈소스라는 말은 오픈소스 라이선스 동의하에 소스에 대한 수정이 가능한 소프트웨어를 말한다. 오픈소스라는 말이 무엇인지 자세히 알고싶다면 여기2를 참고하자)

 

개발자 관점에서 보자면, 안드로이드는 스마트폰과 태블릿을 위한 리눅스 기반의 운영체체이다. 터치스크린 유저인터페이스, 위젯들, 카메라 네트워크 데이터 모니터링 그외 스마트폰이라 불리는 핸드폰의 다른 모든 특징들을 가진다.

안드로이드는 안드로이드 플레이 스토어에 있는 여러가지 애플리케이션을 지원하는 플랫폼이다.

 

안드로이드 플랫폼은 또한 안드로이드 프레임워크 위에서 엔드유저가 자신만의 앱을 개발, 설치 사용 할 수 있도록 만들어준다.

 

이 안드로이드 프레임워크라는 것은 안드로이드 개발자들이 자신들 만의 커스텀 라이선스 하에서 자신들의 애플리케이션을 배포할 수 있는 아파치 라이선스를 따르고 있다.

대부분의 소프트웨어가 그렇듯이, 안드로이드도 버전별로 릴리즈 된다. 구글은 2009년 4월 이후로 각 버전에다 이름을 붙혔다. 아래 테이블은 날짜별로 릴리즈된 모든 안드로이드 버전 표이다:

 

 

위의 테이블에서 보듯이, 안드로이드의 여러가지 버전들이 스마트폰들이나 태블릿들을 지원해왔으며, 삼성,모토로라, HTC 등등의 회사에서 나온 무수히 많은 안드로이드 기기들이 시장에 나와있다.

또한, 구글에서도 넥서스 시리즈라는 브랜드명으로 한 OEM 방식의 폰을 만들어고 내고 있다.

 

2. 안드로이드 이해하기

애플리케이션 레벨에서 안드로이드의 개발을 시작하기 위해서는, 무엇보다도 먼저 내부 구조를 이해해야만 한다고 나는 생각한다. 내부가 어떻게 돌아가는 지 아는 것이 애플리케이션 프레임워크를 좀 더 이해하기 쉽게 도와줄것이며, 우리가 좀 더 나은 방식으로 안드로이드 애플리케이션을 디자인 할 수 있게 해 줄것이다.

 

안드로이드는 리눅스 기반의 OS이므로, 내부를 들여다 보면, 안드로이는 정말 리눅스 비슷하다. 안드로이드 내부를 탐험하기 이전에, 우선 아키텍쳐 다이어그램을 살펴보도록 하자.

 

위의 다이어그램은 안드로이드 아키텍쳐를 형상화 한 것인데, 보시는 바와 같이, OEM으로 만들어진 하드웨어 위에 소프트웨어 스택으로 이루어진 것을 볼 수 있다. 그럼 제일 위의 레이버어 부터 시작하자 바로 애플리케이션 레이어가 그것이다.

2.1. Applications

네개의 기본 앱들(App 1, App 2, App 3 and App 4)을 다이어그램에서 표현하고 있는 데, 안드로이드의 최상위에 존재하는 여러가지 앱이 있을 수 있다는 느낌을 준다. 이 앱들은 안드로이드 상에서 사용할 수 있는 어떤 사용자 인터페이스 같다:

예를 들어 뮤직 플레이어를 사용 할 때, 플레이, 중지, 찾기 등의 버튼들이 있는 GUI를 가진 애플리케이션이다.

비슷하게 전화 거는 앱, 카메라 앱 등등이 이런것들에 속한다. 이 모든 앱들을 다 구글이 만들 필요는 없다.

 

구글 플레이스토어에서 누군가 개발해서 올려놓고 이를 사용 할 수 있다는 것이다. 이런 앱들은 자바로 개발되어지고, 안드로이드 OS와 상관없이 바로 설치된다.

 

2.2. 애플리케이션 프레임워크

애플리케이션 레이어 밑으로 좀더 들어가면, 애플리케이션 프레임워크 레이어를 만난다. 이 레이어는 애플리케이션 개발자가 안드로이드 애플리케이션을 개발할 수 해주는 프레임워크이다. 이 프레임워크는 여러가지 표준 목적을 가진 커다란 API의 집합으로서, 기본적으로 개발자가 코딩 할 필요 없도록 만들어주는 기초 태스크들을 담고 있다. 프레임워크는 특별한 엔티티들을 가지고 있는 데: 주요한 엔티티들은 다음과 같다.

 

가. 액티비티 매니저

애플리케이션 생명주기에 관여하고 여러 상태를 가지는 액티비티드들을 관리한다. 애플리케이션은 각각 자신만의 생명주기를 가진 여러가지 액티비티들을 가질 수 있다.

그러나 애플리케이션이 시작될때 오직 하나의 메인 액티비티만 시작할 수 있다, 일반적으로, 애플리케이션 내의 각 액티비티들은 사용자 인터페이스와 자신만의 레이아웃을 가진 윈도우가 주어진다.

 

액티비티는 다른 액티비티가 시작될 때 멈추고(stop), 액티비티 콜백을 통해서 초기화 된 상태로 되돌아 간다.

 

나. Notification Manager

애플리케이션이 사용자 지정 alert을 생성 할 수 있도록 해 주는 매니저이다.

다. Views

View들은 그리드나, 리스트들, 버튼들 등의 컴포넌트를 포함하는 layout 들을 생성하는 데 사용되어 진다.

라. Resource Managers

애플리케이션은 외부 리소스 즉 그래픽들, 외부 문자열등을 필요로 하게 된다. 이런 모든 리소스들은 표준화된 방식으로 접근 가능하도록 해주는 이 리소스 매니저를 통해서 관리되어진다.

 

마. Content Provider

애플리케이션들은 또한 데이터를 공유하여야만 한다. 때때로, 한 애플리케이션이 다른 애플리케이션으로부터 자신이 필요한 데이터를 받아야 할 때도 있다,

 

예를 들어 일반적인 통화 애플리케이션은 사용자 주소록 접근이 필요로 하게 된다. 이렇게 다른 애플리케이션 데이터에 대한 접근이 바로 콘텐츠 프로바이드를 통해서 가능하다.

2.3 Libraries

이 레이어는 안드로이드 네이티브 라이브러리들을 가지고 있는 레이어이다.

이 라이브러리들은 C/C++ 로 작성 되었으며 커널 상위에서 바로 위의 레이어와 비슷한 기능들이 요구된다. Surface Manager를 포함한 소수의 주요 네이티브 라이브러리들이 포함된다.

가. Surface Manager:

디스플레이와 윈도우를 조작을 관할 한다. - Media framework: 플레이백과 레코딩을 포함한 코덱과 여러 오디오 비디오 포맷들을 지원한다 .

나. System C Libraries:

ARM혹은 임베디드 디바이스들을 목표로 한 libc 같은 표준 C 라이브러리이다.

다. OpenGL ES Libraries :

2D나 3D 그래픽스 랜더링을 위한 그래픽 라이브러리를 포함한다.

라.SQLite :

안드로이드 데이터베이스 엔진.

2.4. Android Runtime

안드로이드 런타임은 달빅 가상머신을 포함한다. 이 레이어는 기본적으로 임베디드 디바이스들의 가상머신이며 다른 가상머신들과 마찬가지로 바이트코드 번역기 역할을 한다.

 

임베디드 디바이스들이라고 소위 얘기하는 것들은 비교적 더 느린 저메모리와 배터리 전력으로 구동되는 기기들을 일컫는 다고 보면 되는 데, 달빅가상머신 위에서 구동되는 자바 코어라이브러리를 포함하고 있으며 모든 디바이스에서 사용가능한 라이브러리이다.

2.5. Kernel

안드로이드 OS는 리눅스 커널 2.6에서 부터 왔고 정확히 말해서 모바일 기기를 위해서 컴파일 된 리눅스 소스에서 생성되었다. 메모리 관리, 프로세스 관리등 이 모든 것들이 거의 비슷하다.

 

커널은 하드웨어와 안드로이드 소프트웨어 스택 사이에 하드웨어 추상 레이어 레이어 이다 (HAL)

3. Android SDK

이미 언급했듯이, 안드로이드는 오픈소스이고 따라서 소스코드는 모든 개발자에게 열려져 있다. 통합적으로 이를 안드로이드 SDK라고 부른다. 다운로드하고 빌드하고 몇몇 다른 방식으로 안드로드에서 작업할 수 있다.

이는 당신이 원하는 것이 무엇이냐에 따라 틀릴 것이다.

만약 안드로이드 애플리케이션을 개발할 목적이라면 모든 소스코드를 다운로드 받을 필요는 없다. 구글은 이클립스 통합 개발환경을 권고하는 데 이 환경은 안드로이드 개발자 툴(ADT)를 플러그인으로 사용할 있으며,

이를 통해서 특정 SDK를 설치하고, 프로젝트를 생성하고, 에뮬레이터를 구동하고, 디버깅 하는 등의 일련의 작업들을 할 수 있다.

 

이클립스와 ADT 관련된 사항은 안드로이드 정식 사이트3 에서 개발자를 위한 자세한 설명 들이 들어 있다.

3.1. 윈도우 사용자를 위한 안드로이드 개발

안드로이드는 윈도우에서 빌드 하는 환경을 공식적으로 제공하지 않기때문에, 안드로이드 OS 자체를 수정하고 싶다면 리눅스를 사용해야만 할 것이다( 안드로이드 OS 빌드하기 4참조). 하지만 윈도우에서 네이티브 안드로이드 개발과 애플리케이션 플러그인들과 툴은 제공 받을 수 있다. 여기 기본적인 안드로이드 개발 툴을 윈도우에서 세팅하는 것을 다루어 보기로 한다.

3.2. 안드로이드 SDK와 개발자 툴 다운로드 하기

구글은 윈도우 안드로이드 개발자를 위한 세팅을 위한 윈도우용 ADT 번들이란 이름으로 된 편리한 번들을 여기서 다운로드 5 받을 수 있도록 했다 . 운영체제 아키텍쳐(32,64 비트) 맞추어서 다운로드를 받는다. 나의 경우에는 (64 Bit Win 7), adt-bundle-windows-x86_64.zip 파일을 다운로드 받아야만 한다. 압축파일을 풀고나서, 다음 스냅샷 내용 들을 보게 될 것이다.

무엇보다 먼저, 소스를 관리 개발하기 위한 통합개발환경인 이클립스를 다운받는다.

이클립스는 안드로이드 애플리케이션을 개발하기 위한 환경을 제공한다.

안드로이드 애플리케이션은 자바로 개발되어지는 데, 다음 단계가 소스가 포함되어 있지 않은 'SDK'를 다운받는 일이다. 그러나 이미 platform tools, tools, images 그리고 다른 플랫폼을 위한 특정 라이브러리가 이미 빌트인으로 제공된다. 우리가 윈도우 환경에서 안드로이드 빌드가 안된다라고 했던 것은 시스템 이미지와 툴들이 컴파일 되지 않는 다는 의미이므로, SDK Manager를 통해서 애플리케이션 개발에 필요한 소스는 다운로드 받을 수 있다. 이 파일은 압축푼 파일에서 제공되며 세번째로 말할 내용이기도 하다.

그럼 소스를 받아보자 SDKManager.exe를 실행하면 다음과 비슷한 화면이 실행 될 것이다.

우리가 원하는 버전의 SDK를 설치하거나 제거 할 수 있도록 해주는 SDK Manager 이다. 여기서 보듯이, 이제 우리는 SDK Tools과 SDK Platform Tools이 설치 되었다.

이글을 쓸때, 최신버전의 안드로이드 버전은 4.2 이지만, 어떤 버전의 SDK라도 다운로드 받을 수 있을 것이다. 그러면 안드로이드 4.2 젤리빈을 가지고 좀 놀아보도록 한다.

Android 4.2에서 필요한 모든 것이 들어 있는 "Android 4.2(API 17)"를 체크박스에서 선택하도록 하자.

SDK Manager 설치에 필요한 6개의 패키지들을 찾는 것을 보게 된다. "Install 6 packages" 버튼을 클릭하면, 패키지 설명과 라이센스관련한 다이얼로그 박스를 보게 된다.

"Accept All"을 선택하고 Install을 클릭하면 다운로드를 초기화 하고 설치를 시작할 것이다. 끝나고 나면 선택된 모든 패키지 앞에 "Installed" 라는 글자가 붙은 것을 확인 할 수 있다.

 

그럼 이클립스를 실행해보자, 그전에 먼저 자바 개발 킷 즉, JDK가 설치되어 있는 지 확인부터 하자. 만약 설치되어 있지 않으면, 여기 오라클 사이트로 6부터 다운로드 받을 수 있다. 내 경우에는 JDK 7이 설치되어 있다.

다음은 이클립스 폴더의 보기와 같이 실행파일을 클릭하여 이클립스를 실행하자. 이 문서를 따라 했다면 ADT 플러그인이 이미 설치되어 있을 것이다.( 아니면 여기 설치방법에 7따라서 ADT를 설치하도록 하자)

새로이 실행되는 이클립스의 모습은 다음과 같을 것이다:

 

이클립스는 SDK 패키지들을 관리 할 수 있도록 SDK Manager 를 포함한다.

윈도우 메뉴에서 "Android SDK Manager" 를 선택한다.

에뮬레이터가 어떤 모습인지 볼려면 윈도우 메뉴에서 "Android Virtual Device Manager"를 선택하면 된다. 여기서 부터 우리는 선택가능한 표준 디바이스를 사용하거나 가상 디바이스를 생성할 수 있다.

새로운 가상 디바이스를 생성하려면 다음 스냅샷에서 보듯이 'New'를 클릭한다.

가상 머신을 위한 device type, target processor, memory, 등을 입력할 수 있는 다른 팝업 창이 뜬것을 볼 수 있을 것이다. 가상머신에 대한 디바이스 특정값들을 세탕할 수 있다. 'OK'를 클릭하여 디바이스를 생성하고 나면, "Android Virtual Device Manager" 윈도우에 가능하는 디바이스 리스트에서 볼 수 있을 것이다. 자신이 정의한 가상 머신에 대한 에뮬레이터를 실행하기 위해서는 해당 디바이스를 리스트에서 선택하고 "Start"를 누르면 된다.

 

기존에 존재하는 안드로이드 디바이스들의 스팩을 보기위한 pre-loaded options을 선택 할 수 있는 데, Android Virtual Device Manager 내에서 볼려면 Device Definitions 탭으로 간다.

리스트에서 첫번째 인 "Nexus S by Google"를 선택하고 "Create AVD" 클릭해서 가상머신을 추가한다. 따라오는 다이얼로그 박스에 "Target"과 "CPU"와 SD Card의 특정 크기를 입력해야 한다.

Target 은 "Android 4.2 - API level 17" CPU 는 "ARM" SD Card의 특정 크기는 "1024 MiB"를 선택했고 "OK"를 누른다. 그리고 나면, AVD 리스트내에 새로이 정의된 가상머신을 보게 될 것이다.

에뮬레이터를 실행하기 위해서 "Start" 버튼을 선택하면. 여기 에뮬레이터가 어떻게 생겼는 지 보게 될 것이다. 우리는 윈도우에서 구동하는 안드로이드 앱들을 위한 새로이 생성된 에뮬레이터를 이용 할 수 있을 것이다. 이제 할 일은 코드를 컴파일하고 에뮬레이터로 이 앱을 옮기는 일이다.

 

이 뒤에 얘기는 안드로이드 소스 빌드에 대한 얘기인데 약간 오래되기도 했고, 다른 포스팅들을 참고 하면 될 듯하다

 

이상.


 

728x90