2021년09월14일_안드로이드1
본문 바로가기
안드로이드(Android)

2021년09월14일_안드로이드1

by KyeongMin 2021. 9. 16.
728x90
반응형

1. 안드로이드 실행 환경

  • 안드로이드 4가지 환경 - 하단 부터
    • 리눅스 커널
    • 라이브러리
    • 어플리케이션 프레임워크
    • 어플리케이션
  • 리눅스 커널
    • os로 안드로이드 스마트폰의 다양한 하드웨어
      • 화면, 카메라, 블루투스, GPS, 메모리 등을 관리 함
  • 라이브러리
    • 안드로이드에 있는 다양한 환경 뿐 만 아니라 안드로이드 앱을 구동해주는 dalvik가상머신과 코어 라이브러리까지 포함하는 영역
  • 어플리케이션 프레임워크
    • 사용자의 입력 (액티비티, 윈도우, 컨텐츠, 뷰, 노티피케이션 등) 또는 특별한 이벤트에 따라 출력을 담당하는 환경
  • 어플리케이션
    • 실제로 동작하는 앱이 설치되는 환경

2. 다른 플랫폼과 비교한 안드로이드 장점

첫 번째 장점

  • 안드로이드 구성하는 모든 소스 오픈소스로 무료
    • 비용적인 부담이 없음
  • 전세계 수많은 개발자로 부터 피드백을 받아 수정되기 때문에 안정성과 버그 수정이 빠름
  • 소스를 다운 받아 수정해서 쓰기 편리

두 번째 장점

  • 자바를 주 언어로 사용하고 있기 때문에 세계적으로 점유율이 높음
    • 자바 개발자들이 쉽게 개발 가능
  • 요새는 코트린으로 개발하기도함 - mvvm 패턴 사용할 수 있음

세 번째 장점

  • 리눅스 커널을 OS로 채택했기 때문에 다양한 하드웨어에 대한 드라이버 소스가 풍부

네 번째 장점

  • 구글의 다양한 앱과 연동이 매우 편리
  • 다른 플랫폼에 비해 앱간 연동이 너그러운 편

3. 안드로이드 프로젝트 구성 요소

  • libs
    • 프로젝트에서 사용하는 다양한 라이브러리 소스가 저장되는 공간
  • androidTest
    • 앱의 일부 코드를 테스트하기 위한 소스를 저장하는 공간
  • java
    • 자바 코드를 저장하는 공간
    • 표준 자바와 동일하게 패키지를 이용한 하위 디렉토리 생성 방식을 사용
  • res
    • 리소스를 저장하는 공간
      • 이미지
      • xml 레이아웃
      • 메뉴
  • AndroidManifest.xml
    • 앱에 대한 전체적인 정보를 담고 있는 파일
      • 앱의 구성요소와 실행 권한 정보가 정의되어 있음
  • project -> build.gradle
    • 프로그래머가 직접 작성한 그래들 빌드 스크립트 파일
  • gradle -> build.gradle
    • 앱에 대한 컴파일 버전정보, 의존성 프로젝트에 대한 정의가 되어있는 파일

4. 안드로이드에서의 다국어 지원

  • 다국어 지원을 위해서는 value resource file을 따로 생성해주는 방식으로 사용
  • values -> 마우스 오른쪽 버튼 클릭 -> value resource file -> 리소스 파일 이름을 strings로 입력 -> available qualifiers 탭에서 local 선택 -> language 탭에서 언어선택 -> specific region only 에서 세부 국가 선택
  • 파일을 생성하면 디렉토리의 이름은 values -> 국가 코드 (한국이라면 values-kr) 형식으로 생성
  • 내부에 strings.xml파일 이 생성
  • 해당 파일에 string의 name 값은 동일하게 유지한 후 해당 국가의 언어로 번역하여 추가하면 됨

5. 안드로이드 매니페스트 (android manifest) 파일

  • 안드로이드 매니페스트
    • 앱의 이름, 버전, 구성요소, 권한 등 앱의 실행에 있어서 필요한 각종 정보가 저장되어 있는 파일
    • 반드시 존재해야하는 xml형식의 파일로 안드로이드 프로젝트의 최상위에 위치
  • 가장 최상위는 manifest태그가 위치
    • manifest 태그에는 패키지명, 앱 버전 코드, 앱 버전 이름을 정의함
  • application 태그에는 앱 아이콘, 앱 이름을 정의
  • activity 태그에는 액티비티의 클래스명과 액티비티 이름을 정의
    • 하위에는 intent-filter 태그를 이용하여 액티비티에 대한 인텐트 작업시 필요한 action, category를 정의
  • service, receiver, provider 태그
    • 각 각 서비스, 리시버, 프로바이더에 대한 내용을 정의
  • premission 태그
    • 앱에 필요한 권한에 내용을 정의
  • uses-sdk
    • 최소 안드로이드 SDK버전을 지정
  • uses-library
    • 다른 패키지 등록할 수 있음

6. 각 요소

  • Display
    • 안드로이드 단말기가 가지고 있는 HW 화면
  • Window
    • 안드로이드에서 실행되는 앱의 그림을 그릴 수 있는 영역
    • 사용자로부터 입력(터치, 키) 이벤트를 받아 앱에 전달
  • surface
    • 윈도우에서 그림(뷰)을 그릴 때 그림이 저장되는 메모리 버퍼
  • View
    • 사용자 인터페이스를 구성하는 최상위 클래스
    • 윈도위의 서피스를 이용하여 화면에 어떤 모양으로 그림을 그릴지와 이벤트를 어떻게 처리 할것인지 에 대한 구현
    • 위젯
      • 뷰 중에서 일반적인 제어 역할을 하고 있는 것
  • View Group
    • 여러개의 뷰를 포함하고 있는 뷰
  • View Container
    • 다른 뷰를 포함할 수 있는 뷰를 의미
    • 대표적으로 list View, scroll View, grid View등이 있음
  • Layout
    • 뷰 그룹 중에서 내부에 뷰를 포함하고 있으면서 해당 뷰를 어떻게 윈도우에 배치할지 정의하는 관리자 역할을 하는 클래스

7. 인플레이션(inflation)이란 무엇인가?

  • xml 레이아웃 파일로 정의한 정보를 런타임에 setContentView 메소드가 호출됨에 따라 메모리 상에 객체로 만들어 주는 과정
  • 이 과정에서 xml 레이아웃 파일에서 view에 id를 설정하고 해당 id가 R.java 파일에 주소 값으로 환원되며,
    • findViewById메소드와 id를 이용하여 코드 상으로 뷰 객체를 가져와 제어할 수 있음

8. 안드로이드에서 색상 지정

  • #RGB
  • #ARGB
  • #RRGGBB
  • #AARRGGBB
  • 위와 같이 네가지 방식 있음
    • R: 빨강, G: 초록, B: 파란색의 정도를 나타냄
    • A: 알파 값 즉, 투명도를 나타내는 수치
      • 각각의 요소는 16진수(0~F까지)로 표현

9. 안드로이드 크기를 표현하는 방법

  • 픽셀(px): 화면의 픽셀을 의미
  • 밀도 독립적 픽셀(dp, dip): 160dpi(160인치에 들어가 있는 필셀 수)화면을 기준으로 한 픽셀을 의미
  • 축적 독립적 픽셀(sp, sip): 가변 글꼴 기준으로 한 픽셀을 의미
    • 글꼴 설정에 따라 차이가 있음
  • 텍스트 크기(em): 글꼴과 상관없이 동일한 텍스트 크기를 표시하기 위한 단위
  • 이외 인치(in), 밀리미터(mm)가 있음

10. 안드로이드 4대 컴포넌트(component)

  • 액티비티
  • 서비스
  • 브로드캐스트 리시버
  • 콘텐트 프로바이더

액티비티

  • 안드로이드에서 화면을 관리하고 사용자가 발생시키는 다양한 이벤트를 처리하는 컴포넌트

서비스

  • 화면에서 보이지 않지만 특정한 기능을 백그라운드에서 수행하는 컴포넌트

브로드캐스트 리시버

  • 특정 안드로이드에서 발생하는 특정 브로드캐스트 메세지를 처리하기 위한 컴포넌트

콘텐트 프로바이더

  • 앱간 데이터의 공유를 위해 표준화된 인터페이스를 제공하는 컴포넌트

용어

  • Dalvik
    • 32비트만 지원
    • JIT 컴파일러 사용 ( Just In Time )
    • 실행할 때 마다 컴파일.
    • CPU, 메모리 사용 높음.
    • 설치 파일 작음.
    • 배터리 소모 큼 -> 왜냐하면 실행시마다 컴파일 하기 때문에 하드웨어 전체적으로 상당한 부하가 생기므로

추가 용어 정리

  • ART VM
    • 32 , 64 비트 지원
    • AOT 컴파일러 사용 ( Ahead On Time )
    • 안드로이드 킷캣 KitKat 버전부터 생김
    • 안드로이드 롤리팝 Lolipop 버전 이후는 AOT 컴파일러가 기본으로 적용됨
    • 안드로이드 누가 Nougat 버전 부터 JIT와 AOT를 모두 탑재함으로써 최초 설치시에는 무조껀 JIT를 사용하도록하여 설치시간과 용량을 적게 소모한 뒤, 차후 기기를 사용하지 않을 때나 충전 중일 경우 컴파일을 조금씩 하여, 자주 사용되는 앱을 AOT 방식으로 전환하는 것으로 바뀜.
    • 설치시에 컴파일시 코드를 전체적으로 변환하고 저장 -> 실행때 마다 변환된 코드를 읽어들임.
    • CPU, 메모리 사용 낮음.
    • 설치 파일 큼.
    • 배터리 성능 향상.
    • GC 향상.
    JIT 이전, JIT, ART를 쉽게 설명해놓은 비유가 하나 있다.

영어판 비행 매뉴얼을 예로 본다면

JIT 이전 : 비행 중에 필요한 부분을 한글로 번역하면서 읽고 비행하는 것

JIT : 비행 전에 미리 이런 부분을 쓰겠구나하고 일부분 한글로 번역하고 비행하는 것

ART : 비행 매뉴얼을 받아오는 시점에서 완벽히 한글 매뉴얼로 번역하고 비행하는 것

https://github.com/3DPIT/Android/blob/master/03.study/0914/01.%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C1/2021%EB%85%8409%EC%9B%9414%EC%9D%BC_%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C1.md

 

GitHub - 3DPIT/Android

Contribute to 3DPIT/Android development by creating an account on GitHub.

github.com

 

728x90
반응형

'안드로이드(Android)' 카테고리의 다른 글

2021.09.16_안드로이드3  (0) 2021.09.16
2021.09.15_안드로이드2  (0) 2021.09.16
안드로이드 이론 빡공 28  (0) 2020.07.23
안드로이드 이론 빡공 27  (0) 2020.07.22
안드로이드 이론 빡공26  (0) 2020.07.21

댓글