관리 메뉴

HAMA 블로그

안드로이드 프로그래밍을 위한 기초 본문

안드로이드

안드로이드 프로그래밍을 위한 기초

[하마] 이승현 (wowlsh93@gmail.com) 2015. 6. 7. 10:38


1. 안드로이드 구조 

                                                     안드로이드 소프트웨어 스택 


리눅스 커널 

   - 안드로이드는 리눅스를 사용하여 보안,메모리관리,프로세스 관리, 네트워크, 장치 드라이버 같은 시스템 서비스를 제공

   - 커널은 하드웨어와 상위 레이어들 사이의 추상화 계층으로 동작한다. 


안드로이드 런타임 

   - 안드로이드 런타임은 애플리케이션을 실행시키기 위한 최소한의 환경을 제공한다. 

   - 자바의 코어 라이브러리와 달빅 가상머신으로 구성된다.

   - 안드로이드 애플리케이션은 리눅스의 하나의 프로세스로 실행되며, 각 프로세스 마다 자신만의 달빅가상머신을 가진다.

   - 여러개의 가상머신이 동시에 실행될수있으므로 달빅가상머신은 효율적으로 실행될수있도록 설계되었다. 

   - 달빅가상머신은 레지스터 기반이며 자바 컴파일러에 의하여 컴파일된 클래스들을 .dex 형식으로 변환후에 실행한다.


라이브러리 

   - 안드로이드는 다양한 C/C++ 라이브러리를 표함한다. 애플리케이션 프레임워크를 통하여 이들 라이브러리를 사용할수있다.

   - 시스템 C 라이브러리 

   - 미디어 라이브러리

   - Surface manager

   - LibWebCore

   - SGL

   - 3D 

   - FreeType

   - SQLIte 


애플리케이션 프레임워크 

  - 개발자들을 위한 API 제공

  - 개발자는 이 프레임워크를 통해서 하드웨어장치, 위치정보접근, 병렬처리, 알람설정, 상태표시줄알림등의 기능을 사용

  - 컴포넌트의 재사용을 쉽게 할수있게 설계됨. 모든 어플리케이션은 자신의 기능을 다른 어플리케이션에 개방할수있다. 

 -  풍부하고 확장가능한 뷰를 제공한다.

 - 컨텐트 제공자

 - 리소스 관리자

 - 통지 관리자

 - 액티비티 관리자 


애플리케이션

  - 안드로이드는 전화,메세지,달력,지도,이메일,브라우저,전화번호부와 같은 핵심 애플리케이션들을 기본으로 탑재하고있다. 

  - 모든 애플리케이션은 자바 프로그래밍언어를 사용하여 개발된다.

 

2. 애플리케이션의 기초개념 


                                                        자바 소스파일이  JVM 과 달빅VM 위에 어떻게 올라가나? 


                                                                    달빅 VM  모식도 

                                              


                                                            .apk 패캐지가 만들어지기까지

        안드로이드 애플리케이션은 자바언어로 작성된다. 안드로이드 SDK 도구를 이용하면 자바코드를 컴파일하고 

            리소스와 결합하 여 안드로이드 패키지(.apk ) 로 만들수있다. 하나의 .apk 파일 안에 있는 모든 코드는 하나의 

            애플리케이션으로 간주된다. apk 파일은 모바일 장치로 다운로드외어서 애플리케이션으로 설치된다. 

     

             일단 장치에 설치되면 자신의 보안 샌드박스안에서만 동작된다.

             - 각 앱은 리눅스 운영 체제 상에서 서로 다른 사용자가 된다.

             - 운영 체제는 각 앱에게 사용자 아이디를 부여하고 앱에 속하는 파일은 다른 앱이 접근할수없다.

             - 각 앱은 자신의 가상 머신 위에서 실행된다. 따라서 다른 앱과는 완벽하게 분리된다.

                                     

  

  3.애플리케이션 컴포넌트 


      액티비티 

            

           - 사용자 인터페이스 화면을 가지고 , 하나의 작업을 담당하는 컴포넌트.

           - 하나의 애플리케이션은 여러개의 액티비티를 가질수있다.

           - 액티비티는 Activity 클래스를 상속받아서 구현된다.


     서비스

               


          - 백그라운드에서 실행되는 컴포넌트이다. (인터페이스화면을 가지지 않는다)

             - 오랫동안 실행되는 작업이나 원격 프로세스를 위한 작업을 할때 사용된다.

             - 예를들어 다른 앱이 실행되는동안 배경음악을 연주하는데 사용된다.

             - 서비스는 다른 컴포넌트에 의해서 실행되며 Service 클래스를 상속받아서 구현된다.


     방송 수신자

           


        - 화면이 꺼졌다, 배터리가 낮은 상태, 사진이 촬영되었다라는것을 알리기위해 방송을 사용한다.

        - 애플리케이션 자신도 방송을 송출할수도있다. (데이터가 다운로드되어 사용 가능하게 되었다를 다른 앱에게 알리려고)


     컨텐트 제공자 

                 



 -  다른 앱에게 데이터를 제공하는 컴포넌트이다. 

 -  컨텐트 제공자를 통하여 다른 애플리케이션은 데이터를 쿼리하거나 변경할수있다.

 - 전화번호부 앱은 많은 사람들의 이름과 전번이 데이터베이스의 형태로 저장되어있고 이 데이터는 컨텐트 제공자를 통하여      다른 앱에 제공될수있다. 즉 데이터를 다른 앱과 공유할수있는것이다. 


다른 애플리케이션의 컴포넌트 실행 


   - 안드로이드앱은 PC에서 실행되는 프로그램과 매우 다르다. 일반적으로 pc 에서 하나의 프로그램은 다른 프로그램안에 들어있는 코드를 사용할수없다. 그러나 안드로이드의 앱은 상당히 다르다.

  - 허가만 얻을수있다면 여러개의 앱들의 특정 컴포너트를 공유하여 사용할수있다.

 - 예를들어서 카메라 어플리케이션 / QR 코드 어플리케이션의 결과물을 우리의 어플리케이션에서 사용할수있다.

  - 안드로이드 시스템에게 우리의 인텐트가 포함된 메세지를 보내서 요청한후 승인되면 실행한다.  



인텐트 

 


    - 비동기적인 메세지이다.

    -  컴포넌트가 필요로하는 요청 내용을 가지고 있다. 

    - 액티비티와 서비스의 경우에는 인텐트 객체 안에 필요한 액션의 이름과 사용할 데이터의 URL 를 가지고있다. 

    - 예를들어 이미지를 화면에 표시하거나 웹 페이지를 오픈하는 요청을 인텐트에 기술할수있다. 

    - 어떤 경우에는 인텐트를 통하여 결과를 반환 받기도 한다.


매니페스트 파일 

   - 앱안의모든 컴포넌트들은 메니페스트 파일안에 선언되어있어야한다.

   - 인터넷 접근과 같이 앱이 요청하는 권한을 나열한다.

   - 앱이 필요한 최소한의 api 레펠을 선언한다.

   - 앱이 필요로하는 하드웨어 사용을 선언한다.

   

   


4.애플리케이션 모습들 

     




레퍼런스:

http://www.kyobobook.co.kr/product/detailViewKor.laf?barcode=9788970507392

Comments