'2010/06'에 해당되는 글 2건

  1. 2010.06.27 안드로이드 개발환경 by 응큼미소
  2. 2010.06.26 안드로이드 개요 by 응큼미소
 이제 실제로 이클립스를 이용해서 안드로이드를 개발해 볼까해요.
 먼저 자사 JDK를 설치해야 해요. 그 다음에 이클립스를 설치해야 하죠. 이클립스를 설치한 후가 중요해요. 바로 안드로이드 개발도구인 ADT를 설치해야 하죠.
 작업공간은 c:\android\workspace폴더에 할꺼에요. Help > Install New Software를 선택합니다. 



 Add 버튼을 클릭하면 Add Site 화면이 나타나요. 이름은 ADT로 하고 위치는 
 https://dl-ssl.google.com/android/eclipse/로 하죠 (안될땐 https에서 s를 빼 보세요)


그럼 Developer Tools항목 나타난거 확인하고 Next해요. 계속 next하다가 하단에 I accpet를 체크하고 [Finish]버튼을 누르죠. 그럼 이클립스가 다시 시작되고 설치 과정이 끝나게 되요. 
 
 이제 안드로이드 SDK를 다운로드 받아 압축을 해제해요. d.android.com 사이트에 들어가면 있어요. 아까 만든 c:\android\ 여기에서 압축풀기를 하면 android-sdk-windows폴더가 생기죠. 이제 이클립스에서 안드로이드 SDK위치를 지정하면 되죠. 
 

 그다음에 SDK플랫폼 패키지를 다운로드 하면 되요.




이제 에뮬레이터 디바이스를 만들어야 되요. 


환경변수에 SDK패스도 넣어줘야 하죠. 


이제 sample소스만 들어있는 프로젝트를 만들어서 각각의 API를 실제로 어떻게 사용하는지 볼꺼에요.


 안드로이드 프로젝트를 선택하고요


existing sample에서 ApiDemos를 선택하죠 

여기서 문제가 생겨버렸네요 -_-;; 윈도우의 사용자 이름이 한글로 되어있어서 에뮬레이터가 가동이 안되어 버렸어요. 이건 중요한 사항인데 제가 깜박해 버렸네요. 이것때문에 ApiDemos도 지워버렸고요. 처음부터 다시 한 다음에 진행하도록 할께요 ;;;

 AVD 라는 에뮬레이터로 어플리케이션을 테스트 해 볼수 있는데요, 
에뮬레이터의 파일 시스템등을 확인해 보기 위해서 >> db shell 을 입력한후 기본적인 리눅스 명령어를 이용해
데이터가 언제 저장이 되는지 등을 확인할 수 있어요.

 어플리케이션을 개발할 때 참고할 수 있는 프로젝트가 있는데요 그게 바로 ApiDemo에요. 여기에는 sample소스만 들어가 있죠.
 각각의 API들을 어떻게 사용하는지 예제가 들어있어요.

 패키지라는게 있는데요 이건 App들을 유일하게 구분할수 있게 해 줘요.
 모든 App는 유일한 패키지 name을 가져야 하죠.

 그리고 App에서 UI를 사용한다면 기본 Activity를 설정해야 하죠. 이건 Run의 Run Configuration에서 설정할 수 있어요.
 
 UI부분을 왜 xml파일로 설정하냐면요 App가 다국어를 지원해야 할 때 유용하게 활용할 수가 있어요.
 String.xml에 문자에 대한 정보가 들어가는데 이 파일을 여러개로 해서 각 언어마다 설정이 달라지게 할 수 있죠.
 그리고 UI를 담당하는 designer는 소스코드를 건드리지 않고 xml만 바꿔줘서 개발자와의 영역을 나누는 데도 유용해요.

 Manifest파일이 있는데요 여기에는 시스템이 이 App에 대해서 알아야 되는 모든 정보가 포함이 되어 있어요. 
 App version도 써줄수 있고요 아이콘, 기본라벨등도 설정해 줄 수 있죠. 
그리고 소스에 있다고 패키지가 구분되는게 아니고 여기에 Pakage가 설정이 되어 있어야지 정말 패키지가 설정이 되는거죠.

 외부에서 다운받은 App들을 에뮬레이터에서 돌려보려면요 콘솔에서 간단한 명령어가 필요해요.
만약 Hangulkeyboard.apk 라는 파일로 된 App를 에뮬레이터에 설치하려면 콘솔에서 
 >> adb install Hangulkeyboard.apk 
라고 명령하면 되죠. 

 이클립스에서 DDMS라는 창이 있는데요 여기서는 App의 쓰레드정보, Heap정보, 실행상태 등을 확인할 수 있죠.
 Logcat이란 것도 있는데요 여기서는 App를 실행하면서 발생하는 모든 Log를 볼 수 있어요.
 Log를 볼때 Log.d(태그, 메세지) 이 함수를 많이 쓰는데요 여기서 태그를 붙이는 이유는 
하나의 App는 하나의 태그를 쓰기 때문이죠.
 DDMS에서 mp3파일같은것도 sdcard에 넣어볼 수가 있어요. File Explorer창에서 복사만 하면 되죠. 근데 저장되는 파일은 꼭 영어로 
되야 하죠.

 디버깅을 위한 도구중에 hierarchyviewer라는게 있는데요 이건 화면구성에 대한걸 계층적으로 표시해 줘요. 이걸 보면 개발하는데 무척 도움이 되죠. 
 Monkey라는 애는 App을 막 사용하는 앤데요 얘가 왜 있냐면
 사용자는 개발자들 생각대로 꼭 사용하는 건 아니에요. 그리고 App는 여러가지 방식으로 사용했을 때 죽지 않아야 하죠. 
 그래서 Monkey라는 놈이 App을 막 눌러보는거에요.
 디버깅할때 step over, step into, step return이 있는데요
 step over는 한칸 넘어가는 거고,
 step into는 메소드 안으로 들어가는 거고,
 step return은 현제 메소드 끝까지 가서 리턴하는 거에요.
 
 하나의 App에는 여러개의 Activity가 존재해요
 근데 안드로이드에는 메인이 없는데요, 안드로이드는 Activity단위로 실행이 되요. 그래서 Activity가 실행이 될때
생명주기에 관한 Callback함수가 호출되기 때문에 메인이 필요없죠.

 UI를 구성해 주는 xml 파일에 대해 알아볼께요. layout이란건 하나의 view가 다른 view를 어떻게 포함할지 설정해주는 거에요.
 LinearLayout은 전체를 다 차지하는 layout이죠. 그리고 xml 파일 안에서 다른 element의 리소스를 사용하려면 @를 붙여주어야 해요.
 그리고 자바코드 안에서 리소스에 접근하려면 R.layout.main 이런식으로 해야하죠. 
 App의 타이틀바는 manifest파일에서 label로 설정해요.
 레이아웃에서 최상위 view는 하나만 들어가요. 원래 xml의 특징중에 root element는 하나이어야 한다는걸 생각하면 쉽게 
이해할 수 있죠. namespace를 지정하는게 최상위 view가 되는 거에요.
 모든 view에 꼭 들어가야 하는 속성으로는 layou_width 와 layout_height가 있죠. veiw의 크기나 넓이를 지정할 수 있는 속성이에요.이거 두개는 꼭 빼먹지 마세요. 여기에 속성값으로 wrap_content를 줄 수가 있는데 이건 필요로 하는 부분만 차지하라는 뜻이죠. 그리고 크기나 넓이를 직접 지정할 때 Pixel은 쓰지 않아요. 안드로이드 App을 개발할 땐 pixel을 쓰면 안되는 데요 다양한 스크린 장치를 표시하기 위해선 사용하지 말아아 해요. 
 res 폴더의 drawable은 왜 hdpi, ldpi, mdpi 이렇게 3개로 나누어져 있을까요?이건 장치의 호환성 문제를 맞추기 위한거에요. 
 장치의 환경마다 다른 이미지 파일을 적용하기 위한 것이죠.
 
 R.java는 소스코드랑 xml파일을 연결시켜주는 애에요. 예를 들어 main.xml 이라는 UI를 나타내는 xml파일이 있다면 R.java에서는 
이 파일이 정수값으로 정의가 되어있죠. 그래서 시스템상에서 이 정수값을 main.xml로 자동으로 연결해 줘요. 그리고 개발자는 
Activity에서 setContentView 함수를 이용해서 화면이 어떻게 구성될 건지를 결정하죠. 
 여기서 잠깐 콜백메소드들의 파라미터로 많이 등장하는 context에 대해서 이야기 하고 지나갈께요. context는 Activity에 대한 인스턴스
에요. 그리고 콜백메소드 중에 onCreate가 있는데요 예는 Activity에서 제일 빨리 실행되는 메소드에요. 
 manifest파일에서 Activity를 설정해 줄때 intent-filter라는 엘리먼트가 있는데요 여기서 action.MAIN라는게 있어요. 예를 이용해서
단독으로 실행될 수 있는 Activity라는걸 표시해 주죠.

 수업이 끝날때 쯤 박성석 대표님께 안타까운 소리를 들었어요. 제가 하고 싶은 프로젝트는 증강현실에 관한건데 증강현실을 하려면 이미지 프로세싱 같은 기술이 필요한데 그런건 전문기업만이 할 수 있는 기술이래요. 그래도 위치기반, 방향센서를 이용해서 따라할 
수는 있다니깐 포기하지 않을 꺼에요.
 
 

 


































 
신고

'T아카데미' 카테고리의 다른 글

사용자인터페이스_02  (0) 2010.07.02
사용자인터페이스_02  (0) 2010.07.01
어플리케이션 구조  (0) 2010.07.01
사용자인터페이스_01  (0) 2010.07.01
안드로이드 개발환경  (0) 2010.06.27
안드로이드 개요  (0) 2010.06.26
Posted by 응큼미소

 이제부터 저의 2010년 여름방학의 소중한 시간들을 적어볼까 해요.
 여름방학때 T아카데미의 안드로이드 전문가과정 2기에 참여하는 기회를 얻게 되어서 
 저의 여름방학은 안드로이드로 채워질것 같은데요
 그럼 바로 T아카데미에서 갖게될 안드로이드 이야기를 시작하도록 할께요

 임베디드 장치에는 리눅스 OS를 많이 써왔는데요 리눅스라는 OS를 쓰긴했지만 장치마다 틀렸어요.
 그런데 안드로이드라는 녀석은 JAVA라는 언어로 하나로 통합해서 임베디드 어플리케이션을 만들수
있도록 하죠. 

 그리고 리눅스는 내가 오픈소스를 가져와서 고치고, 고친부분을 다시 공개해야 했어요. 이렇게 되는 경우
상업적으로 이용하는데에 제약이 있었죠. 하지만 안드로이드는 다시 공개를 안해도 되요. 이건 안드로이드
구조를 만드는데 많은 영향을 끼쳤죠.

 구글이 기존에 리눅스 커널위에 올릴때는 힘들었던 기본 기능과 서비스들을 골라서 넣어놨어요. 또 JAVA언어 개발
툴인 이클립스가 있기 때문에 PC만 있으면 개발을 바로 시작할 수 있죠. 이건 iPhone APP을 만들기 위해 MAC북 같은
게 있어야 되는 아이폰이랑 비교가 되는 부분이죠.

 안드로이드는 하드웨어 플렛폼은 아니에요. 리눅스 커널기반 OS이죠. 그런데 리눅스도 커널까지만 쓰고 리눅스의
유틸리티 같은건 포함 안했어요. 그 안에 라이브러리는 C나 C++로 되어있죠. 그리고 가장 위에 사용자 APP는 자바 언어를
이용하죠. 리눅스는 디바이스에 탑재될때 어떤 유틸리티 등이 꼭 들어가야되고 등등 제약이 없어요. 그래서 하나로 통합된 OS라고는 보기 힘들었죠. 하지만 안드로이드는 그런점에서 교집합이 많아요. 그 위에서 대부분의 App을 개발할 수 있죠. 새로운 부가장치가 단말에 장착되면 드라이버를 리눅스레벨에서 작성하면 되고요, 사용자 App은 안드로이드 SDK에 맞게 개발해서 올리면 되요.

 안드로이드의 전략은 모바일 시장의 주요 참여자인 이동통신사, 단말제조사, 소프트웨어 개발회사들을 동시에 만족시키
는 거에요. 그래서 구글은 자신의 역할은 크지만 커널, API등을 오픈으로 하고 있어서 다른 업체들의 우려를 덜어냈죠. 구글은 그동안 기술, 표준안 등을 만들고 다른 업체를 참여시킨 경험이 많기 때문인거 같아요. 이미 많은 제조사들이 안드로이드 기반의 단말을 만들고 배포하고 있어요. 

 안드로이드에서는 웹 브라우저를 기본적으로 제공하는데요 오픈소스 기반의 웹킷엔진이 장착되어 있기 때문에 가능하죠. 웹킷은 이미 스마트폰 쪽에서 표준이 되어가고 있어요.구글맵도 있는데요 이건 오픈소스는 아니에요. 

 안드로이드 역시 모바일 쪽에서 많이 채택해서 사용하는 3D그래픽 지원인 OpenGL ES를 사용하고요, 구글이 아이폰의 아이튠을 대적해서 WEBM이라는 표준 코덱을 공개한후 안드로이드 폰에 탑재 시키려는 노력을 하고있죠.

 안드로이드는 거의 모든 시스템 기능을 제한없이 접근할 수 있어요. 이러한 특징때문에 모바일 프로그래머의 천국으로 보이기도 하는데요, 그만큼 보안이 취약하다는 걱정이 있죠. 
 
 안드로이드 아키텍쳐에서 웹킷, 그래픽 라이브러리, 임베디드 드라이브를 위한것 이런것들은 많은 시간이 요구되는 것들이기 때문에 C나 C++로 작성이 되서 들어가요. 그리고 리눅스 제공 드라이버들을 그대로 사용할 수 있어서 제조사들이 빠르게 넘어올 수 있는 발판이 되죠. 그리고 리눅스 커널에서는 프로세스관리, 메모리관리, 전원관리, 보안모델등 까지만 채택해서 쓰고 있어요.
 안드로이드 런타임은 달빅VM과 Core라이브러리로 구성되어 있는데요 달빅VM은 각각의 프로세스마다 구동되기 때문에 프로세스 하나가 죽는다고 전체가 죽는 등의 사태를 막을 수 있죠.
 
 안드로이드 애플리케이션 프레임워크를 볼께요. 이 부분은 안드로이드를 이해하는데 있어서 매우 중요한 부분이죠.
 액티비티 관리자란 놈이 있어요. Activity Manager인데요 얘는 애플리케이션의 라이프사이클을 제어하는애로 UI에서 가장 중요하죠.
 Content Provider라는 애도 있는데요, 얘는 데이터를 관리해요.
 Resource Manager는 말 그대로 리소스를 관리하는 애로, 오디오 파일 등등의 리소스를 관리해요.
 Location Manager는 자신의 위치파악에 필요한 기능을 제공하죠.
 Notification Manager는 사용자에게 새로운 소식을 알려야 할때 방해가 되지 않도록 제공해요.
 
 안드로이드 개발의 과정은 2가지로 나눠볼 수 있는데요
 첫번째로 기존의 디바이스 만드는 업체들이 하드웨어 연관된 곳을 개발하죠. 여기서는 안정성, 최적화를 위해 C를 주로 사용해요.
 두번째로 App관련된 부분을 안드로이드 SDK로 개발해요. 여기서는 최적화 등등을 일일이 신경 쓸 필요 없지만 전체적인 Software구성을 위한 소프트웨어 엔지니어링 기술이 많이 필요해요. 
 
 안드로이드는 컴포넌트 기반으로 동작하는데요 각각의 컴포넌트는 독립적으로 구성되어 있어요. 여기에는 Activity, Service, Broadcast Receiver, Content Provider가 있죠. 여기서 Broadcast Receiver는 폰 내부에서 발생하는 다양한 이벤트를 처리해 주는 애에요. Content Provider는 App간에 데이터를 공유하고 교환해 주는 애죠. Activity는 애플리케이션에서 보이는 부분으로 한 화면을 나타내요. Service는 백그라운드에서 실행되며 UI가 없는 작업을 하죠. 얘는 이벤트를 발생시켜요. 

 안드로이드는 자바 SDK의 많은 부분이 그대로 지원되는데요, AWT, SWING등은 안드로이드에서 활용할 수 없어요. 이런거 대신 안드로이드 패키지(android.*)에서 지원해 주죠.
 
 
신고

'T아카데미' 카테고리의 다른 글

사용자인터페이스_02  (0) 2010.07.02
사용자인터페이스_02  (0) 2010.07.01
어플리케이션 구조  (0) 2010.07.01
사용자인터페이스_01  (0) 2010.07.01
안드로이드 개발환경  (0) 2010.06.27
안드로이드 개요  (0) 2010.06.26
Posted by 응큼미소


티스토리 툴바