관리 메뉴

나만을 위한 블로그

[Android] 안드로이드 OS 변천사 정리(롤리팝~안드로이드 13) - 1 - 본문

Android

[Android] 안드로이드 OS 변천사 정리(롤리팝~안드로이드 13) - 1 -

참깨빵위에참깨빵 2023. 8. 7. 20:52
728x90
반응형

안드로이드 초기 버전부터 정리하는 건 사실상 의미가 없기 때문에, 롤리팝부터 곧 출시를 앞둔 안드로이드 14까지의 변천사를 간략하게 정리해 보고자 한다.

왜 롤리팝이냐고 생각할 수 있는데, 현재 안드로이드 스튜디오 플라밍고 기준으로 보여지는 OS 점유율이 아래와 같기 때문이다.

 

 

올해 5월 30일에 마지막으로 업데이트됐다고 하니 어느 정도 참고할 만한 정보는 되는 것 같아서 이걸 기준으로 롤리팝부터 알아보자고 정했다.

 

롤리팝 (Lollipop) - 2014년 공개, API 21(5.0)

 

이 버전부터의 특이점은 아래와 같다.

 

  • 머티리얼 디자인 지원
  • 리사이클러뷰 추가
  • Chromium M37 버전의 웹뷰 업데이트로 안정성 강화, 버그 수정
  • 화면 캡쳐, 공유 기능 추가
  • 알림 세부정보 수준 제어 추가 및 우선순위 등 메타데이터 추가
  • Camera2 API 추가
  • PDF 파일을 비트맵 이미지로 렌더링할 수 있는 PdfRenderer 클래스 추가
  • android.app.usage API를 통한 앱 사용량 기록 접근 가능
  • 달빅 완전 폐지 및 ART를 새로운 런타임으로 대체

 

가장 큰 변화로는 머티리얼 디자인과 리사이클러뷰 추가를 볼 수 있다. 머티리얼 디자인은 안드로이드에서 시각적 요소와 상호작용 디자인에 대한 포괄적인 가이드이자 모범사례들의 집합이다. 이 때는 카드 기반의 UI가 도입되었는데 지금 보면 구리지만 당시에는 꽤 괜찮아 보이는 UI였다.

 

https://www.youtube.com/watch?v=Q8TXgCzxEnw 

 

그리고 기존에 사용되던 리스트뷰를 대체할 리사이클러뷰가 추가됐다. 리스트뷰는 스크롤할 때 화면 밖에 있어서 표시되지 않는 뷰를 다시 만드는 현상 때문에 스크롤 성능이 좋지 않았는데, 뷰홀더 패턴을 써서 화면 밖으로 사라진 뷰를 재활용함으로써 뷰 생성, 제거에 동반되는 오버헤드를 줄인 리사이클러뷰를 사용하게 되니 스크롤 성능이 월등히 더 좋아졌다.

 

그러나 단점도 없진 않았다. 와이파이가 꺼진 상태에서 배터리 소모량이 급증하는 경우가 있었고, 메모리 누수가 발생하는 현상도 있었다.

 

마시멜로 (Marshmallow) - 2015년 공개, API 23(6.0)

 

이 버전부터의 특이점은 아래와 같다.

 

  • 안드로이드 페이(=구글 페이) 지원
  • 런타임 권한 요청
  • 앱 별 권한 관리 추가
  • C타입 USB 지원 및 USB 포트 연결 시 기본적으로 충전 전용 모드로 설정
  • 지문 인증 API 지원 시작
  • 딥링크에서 확장된 앱 링크 등장
  • 연락처, SNS 앱을 통한 직접 공유 대상 정의 가능
  • 블루투스 성능 개선
  • 4K 디스플레이 모드 추가
  • 앱 별 메모리 차지량 시각화
  • 좀 더 엄격해진 APK 유효성 검사

 

구글 페이는 한국에선 구글 서비스 결제, 인앱 결제 시에만 사용할 수 있기 때문에 사실상 한국에선 거의 쓰이지 않는다고 보면 된다.

그리고 이 버전부터 런타임 권한 요청이 추가됐다. 마이크나 카메라, 연락처 등 민감한 정보에 접근하려면 반드시 권한을 요청하도록 변경된 것이다. 자세한 내용은 아래의 디벨로퍼 공식문서 링크를 참고한다.

 

https://developer.android.com/training/permissions/requesting?hl=ko 

 

런타임 권한 요청  |  Android 개발자  |  Android Developers

런타임 권한 요청 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 모든 Android 앱은 액세스가 제한된 샌드박스에서 실행됩니다. 앱이 자체 샌드박스 밖에 있

developer.android.com

 

이 때부터 requestPermissions()나 checkSelfPermission() 같은 함수와 PERMISSION_GRANTED 등의 권한 관련 상수가 사용되기 시작했다. 다만 위험한 권한을 선언하지 않거나 안드로이드 5.1(API 22) 이하의 기기에선 권한이 자동 부여되기 때문에 런타임 권한 요청을 생략해도 됐다.

 

그리고 딥링크에서 확장된 버전인 앱 링크를 사용할 수 있게 됐다. 딥링크라고 하면 보통 앱이 가진 여러 액티비티 중에 특정 액티비티로 이동하는 걸 말한다. 앱 링크는 앱과 웹 사이트를 연결하는 기능을 말하는데, 특정 웹 주소를 클릭하면 그 웹 페이지로 이동하는 대신 해당 앱의 특정 화면이 열리는 것이다. 예를 들어 핸드폰으로 인터넷 좀 하다가 쿠팡 상품 광고를 클릭했을 때, 쿠팡 앱이 깔려 있다면 쿠팡 앱이 실행되며 잠시 후 내가 클릭한 상품의 상세정보 화면으로 이동하는 것이 앱 링크다.

기존에는 이 웹 링크를 처리하기 위해 사용할 앱을 선택하라는 메시지가 표시됐다. 쿠팡 상품 광고를 눌렀을 때 해당 상품의 상세정보 화면을 웹 브라우저를 새로 열어서 띄울 건지, 아니면 쿠팡 앱으로 이동해서 볼 건지 선택하는 것이다. 물론 이 설정은 기기의 시스템 설정에서 선택할 수 있다.

 

그 외에는 지문 인증 기능이 공식 도입된 것과 어떤 컨텐츠를 공유할 때 연락처나 SNS 앱을 통해 누구한테 보낼지 바로 선택할 수 있게 된 것, 4K 디스플레이 모드를 비롯한 소소한 업데이트들이 추가됐다.

 

누가 (Nougat) - 2016년 공개, API24(7.0)

 

이 버전부터의 특이점은 아래와 같다.

 

  • 다중 창 지원 시작
  • 알림 UI 템플릿 업데이트, 묶음 알림 , 직접 회신, 커스텀 알림 뷰 추가
  • 핸드폰 미사용 중일 때 잠자기 모드를 통한 배터리 절약 기능 추가
  • 백그라운드 처리 시 RAM 사용량 최적화
  • Vulkan API 통합
  • 번호 차단 기능의 플랫폼 표준 기능화
  • 이모티콘 추가
  • app gradle의 APK 서명 구성표(signingConfigs) 형태 변경
  • 특정 외부 저장소 디렉터리 접근 요청 가능

 

안드로이드 누가부터 2가지 앱을 상하로 나눠서, 또는 좌우로 나눠서 사용할 수 있게 됐다. 안드로이드 TV 기기에선 이 버전부터 PIP 모드를 사용할 수 있게 됐다. 참고로 모바일에서 PIP 기능은 안드로이드 오레오부터 사용할 수 있게 됐다.

 

그리고 알림 UI 형태가 바뀌었다. 이 UI는 지금까지도 사용되고 있다.

 

 

또한 메시지 앱에서 보낸 알림의 경우 곧바로 답장을 할 수 있도록 업데이트됐다.

 

 

그 외에 OpenGL ES와 같이 3D 그래픽, 렌더링을 위한 공개 표준인 Vulkan API가 안드로이드에 통합됐고, 번호 차단의 표준 기능화, SurfaceView 업데이트, app gradle의 signingConfig 형태 변경 등 여러 업데이트들이 추가로 이뤄졌다.

 

오레오 (Oreo) - 2017년 공개, API 26(8.0)

 

이 버전부터의 특이점은 아래와 같다.

 

  • PIP 모드 추가
  • 권한을 허용한 경우 작동 방식 변경
  • 새 위험한 권한 추가
  • 알림 채널 도입
  • Fonts in XML 기능 추가로 XML을 통한 폰트 지정 가능
  • TextView의 글자 크기 자동 조절 기능 추가
  • 앱 위젯 생성 가능
  • XML의 레이아웃 마진, 패딩 설정값 통합
  • findViewById() 반환값 <T extends View> T로 변경
  • 클릭 가능한 뷰에 기본 포커스 기능 지원
  • 자동 완성 프레임워크 추가

 

안드로이드 오레오부터 모든 알림을 채널에 할당하도록 변경되었다. 채널에 할당하지 않으면 알림이 표시되지 않기 때문에 알림 구현 로직의 변화가 생기게 되었다.

안드로이드 7.1(API 25)까지는 앱별로만 알림을 관리할 수 있었는데 오레오부터는 유저가 앱마다 좀 더 세부적으로 알림을 제어할 수 있게 됐다고 생각하면 된다.

 

https://developer.android.com/guide/topics/ui/notifiers/notifications?hl=ko#ManageChannels 

 

알림 개요  |  Android 개발자  |  Android Developers

알림 개요 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 알림은 사용자에게 미리 알림을 주고 다른 사람과의 소통을 가능하게 하며 앱에서 보내는 기타 정

developer.android.com

 

https://developer.android.com/training/notify-user/channels?hl=ko 

 

알림 채널 만들기 및 관리  |  Android 개발자  |  Android Developers

알림 채널 만들기 및 관리 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. Android 8.0(API 수준 26)부터는 모든 알림을 채널에 할당해야 합니다. 채널마다 채널의

developer.android.com

 

그리고 위의 안드로이드 누가 부분에서 말했듯, 안드로이드 오레오부터 PIP 모드가 추가됐다. PIP 모드는 유튜브 앱으로 영상을 실행한 다음 하단 네비게이션 바의 홈 버튼을 누르면 유튜브 화면이 빠르게 작아지면서 우측 하단에 위치하게 된다. 이렇게 화면을 표시하는 걸 PIP 모드라고 한다. 안드로이드 TV에서 사용 가능했던 기능이 모바일에서도 사용할 수 있게 된 것이다.

 

그리고 권한과 관련한 변경사항이 몇 가지 있다. 먼저 새로운 위험한 권한이 2개 추가됐다.

 

1. ANSWER_PHONE_CALLS : 앱이 프로그래밍 방식으로 걸려오는 통화에 응답하게 할 수 있는 권한

2. READ_PHONE_NUMBERS : 기기에 저장된 전화번호를 읽을 수 있는 권한

 

두 권한 모드 PHONE 권한 그룹에 속하며 모두 위험한 권한으로 분류됐다.

또한 안드로이드 오레오를 대상으로 하는 앱의 권한 동작이 변경되어, 앱에는 개발자가 매니페스트에 명시한 뒤 요청한 권한만 허용될 수 있다. 하지만 유저가 앱에 권한을 허용하고 나면, 그 권한 그룹에서 해당 권한에 대한 이후의 모든 요청이 자동으로 허용된다.

 

예를 들어 개발자가 매니페스트에 READ_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGE를 모두 적었다고 가정한다. 앱이 READ_EXTERNAL_STORAGE 권한을 유저에게 요청하고 이를 허용할 경우, 앱이 API 24 이하를 대상으로 하는 경우엔 안드로이드 시스템이 WRITE_EXTERNAL_STORAGE 권한까지 동시에 허용한다. 같은 STORAGE 권한 그룹에 속하고 매니페스트에도 등록되기 때문이다.

 

그러나 앱이 API 26 이상을 대상으로 하게 되면 READ_EXTERNAL_STORAGE 권한만 허용하며, 나중에 WRITE_EXTERNAL_STORAGE 권한을 요청하면 안드로이드 시스템이 유저에게 허용 여부를 묻지 않고 즉시 해당 권한을 허용한다. 허용 이후 프로세스가 약간 변경됐다고 보면 될 것 같다.

 

그리고 앱에 저장해 둔 폰트들을 XML에서 불러와 선언해 두고 뷰 XML에서 사용할 수 있게 됐다. 이 방식은 현재도 존재하는 방식으로 res 패키지에 font 패키지를 만들고, 이 안에 폰트들을 집어넣고서 font.xml 같은 XML 파일을 만든 뒤 이 XML에 폰트들을 선언하고 뷰 XML에서 사용하는 방식이다.

 

또한 앱의 특정 작업을 실행할 수 있는 바로가기를 정의할 수 있게 됐다.

 

 

자세한 내용은 아래 디벨로퍼 공식문서 링크를 참고한다.

 

https://developer.android.com/guide/topics/ui/shortcuts?hl=ko 

 

앱 바로가기 개요  |  Android 개발자  |  Android Developers

앱 내 특정 작업에 바로가기를 추가하는 방법을 알아보세요.

developer.android.com

 

이외에 layout_marginVertical / layout_marginHorizontal 등의 마진 / 패딩 설정값 통합, 클릭 가능한 뷰에 기본 포커스 지원, 양식 자동 완성 프레임워크 도입 등의 업데이트가 이뤄졌다.

 

파이 (Pie) - 2018년 출시, API 28(9.0)

 

이 버전부터의 특이점은 아래와 같다.

 

  • HTTPS 기본값 지정
  • 실내 위치 추적 가능
  • 드로어블, 비트맵 전용 ImageDecoder 클래스 도입
  • GIF, webp 애니메이션 이미지 렌더링을 위한 AnimatedImageDrawable 클래스 도입
  • heic 이미지 확장자 인코딩 지원 추가
  • HDR(High Dynamic Range) 가능 기기에서 HDR 영상 제공 가능
  • 온디바이스 머신러닝 가속화를 위한 Neural Networks API 도입
  • 와이파이 편의성 업데이트(이동통신사 와이파이 네트워크 자동 연결, 자동으로 와이파이 사용 설정 등)
  • 배터리를 많이 소모하는 앱을 모니터링 및 제한 or 사용 중지하도록 제안하는 기능 추가

 

안드로이드 파이부터는 모든 네트워크 트래픽을 HTTP가 아닌 TLS로 보호된 HTTPS를 사용하도록 기본값이 변경됐다. 이와 관련해선 예전에 포스팅을 쓴 적이 있으니 참고한다.

 

https://onlyfor-me-blog.tistory.com/118

 

[Android] Volley 사용 시 com.android.volley.noconnectionerror java.io.ioexception cleartext http traffic to 'ip 주소' not p

참고한 사이트 : https://developside.tistory.com/85 안드로이드 http 프로토콜 접속 시 예외발생 조치 (ERR CLEARTEXT NOT PERMITTED) 어제 앱을 개발 중 glide v4를 사용하여 웹에 있는 그림을 load 하였는데, 아래와

onlyfor-me-blog.tistory.com

 

그리고 Wi-Fi RTT(Round Trip Time)이라는 프로토콜을 지원함에 따라 앱에서 실내 위치 추적을 활용할 수 있게 됐다. 자세한 내용은 아래 디벨로퍼 공식문서를 참고한다.

 

https://developer.android.com/about/versions/pie/android-9.0?hl=ko 

 

Android 9 기능 및 API  |  Android 개발자  |  Android Developers

Android 9 기능 및 API 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. Android 9(API 레벨 28)에서는 사용자와 개발자를 위한 멋진 새로운 기능과 성능을 제공합니다

developer.android.com

 

그리고 GIF와 webp 애니메이션 이미지를 렌더링하고 표시하기 위한 AnimatedImageDrawable 클래스가 도입되고 안드로이드에서 머신러닝 처리를 가속화하기 위한 Neural Networks API 도입 등의 업데이트가 이뤄졌다.

반응형
Comments