일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- rxjava cold observable
- 안드로이드 유닛테스트란
- 안드로이드 os 구조
- ar vr 차이
- 안드로이드 라이선스
- 플러터 설치 2022
- jvm 작동 원리
- 2022 플러터 설치
- 2022 플러터 안드로이드 스튜디오
- 안드로이드 유닛 테스트
- rxjava hot observable
- 안드로이드 레트로핏 crud
- 멤버변수
- Rxjava Observable
- 객체
- rxjava disposable
- 안드로이드 라이선스 종류
- 서비스 vs 쓰레드
- android ar 개발
- android retrofit login
- 안드로이드 유닛 테스트 예시
- 자바 다형성
- ANR이란
- 큐 자바 코드
- jvm이란
- 클래스
- 스택 큐 차이
- 서비스 쓰레드 차이
- 스택 자바 코드
- 안드로이드 레트로핏 사용법
- Today
- Total
나만을 위한 블로그
[Android] 안드로이드 OS 변천사 정리(롤리팝~안드로이드 13) - 1 - 본문
안드로이드 초기 버전부터 정리하는 건 사실상 의미가 없기 때문에, 롤리팝부터 곧 출시를 앞둔 안드로이드 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
이 때부터 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
https://developer.android.com/training/notify-user/channels?hl=ko
그리고 위의 안드로이드 누가 부분에서 말했듯, 안드로이드 오레오부터 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
이외에 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
그리고 Wi-Fi RTT(Round Trip Time)이라는 프로토콜을 지원함에 따라 앱에서 실내 위치 추적을 활용할 수 있게 됐다. 자세한 내용은 아래 디벨로퍼 공식문서를 참고한다.
https://developer.android.com/about/versions/pie/android-9.0?hl=ko
그리고 GIF와 webp 애니메이션 이미지를 렌더링하고 표시하기 위한 AnimatedImageDrawable 클래스가 도입되고 안드로이드에서 머신러닝 처리를 가속화하기 위한 Neural Networks API 도입 등의 업데이트가 이뤄졌다.
'Android' 카테고리의 다른 글
[Android] 안드로이드 13 이상에서 미디어 권한 런타임 요청 변경사항 대응하는 법 (0) | 2023.08.12 |
---|---|
[Android] 안드로이드 OS 변천사 정리(롤리팝~안드로이드 13) - 2 - (0) | 2023.08.10 |
[Android] 단위 테스트 작성 시 Method d in android.util.Log not mocked 에러 해결 (0) | 2023.08.07 |
[Android] 웹뷰 브릿지 통신 시 Java exception was raised during method invocation 에러 해결법 (0) | 2023.08.02 |
[Android] 버전 코드는 이미 사용되었습니다. 다른 버전 코드를 사용해 보세요 경고 대응 (0) | 2023.07.29 |