Android12 미리보기
안드로이드 12에 대한 최신 정보는 공식 문서에서 확인할 수 있다.
안드로이드는 전통적으로 메이저 버전에 알파벳 순으로 디저트 이름을 붙여왔다. Pie 이후로는 Q로 시작하는 이름대신 Android10이라 명명했다. 하지만 내부적으로는 여전히 디저트 이름을 붙이고 있다
- Queen Cake(or Quince Tart, Android10)
- Red Velvet Cake (Android11)
- Snow Cone (Android12)
출시 일정
2021년 2월 18일 프리뷰 버전이 출시 되었으며,
5월중에 베타버전이 출시될 예정이다. 정식 버전 출시는 9월중으로 예상된다.
Android 12를 적용할 수 있는 기기
안드로이드 12를 미리 맛볼수 있는 기기는 픽셀 뿐이다.
- Pixel 3 및 3 XL
- Pixel 3a 및 3a XL
- Pixel 4 및 4 XL
- Pixel 4a 및 4a (5g)
- Pixel 5
안드로이드 12의 변경사항
안드로이드12기기에서 동작하는 모든 앱에 해당하는 변경사항에 대해서 알아본다.
Immersive Mode에서의 네비게이션 제스쳐 변경사항
안드로이드 12부터 Back, Home 에 대한 네비게이션 제스처가 두번이 아닌 한번으로 동작.
Android10 및 11에서 전체화면을 제공하는 앱은 스와이프를 일시적으로 비활성화 하므로 두번 스와이프 해야한다.
포어그라운드 서비스 노티피케이션 지연
노티피케이션을 활용하여 백그라운드 실행을 하는 포어그라운드 서비스의 경우, Android12부터는 사용자의 편의성을 위해 10초 안에 실행이 끝나는 포어그라운드 서비스는 알림(Notification)을 지연 시킬 수 있다.
Netlink MAC 주소 제한사항
MAC 주소 접근을 추가적으로 제한한다. MAC 주소를 요청하는 API 사용시 Android12를 타겟팅하는 앱은 null을 반환한다.
Android 11이하에서는 하드코딩된 값을 반환한다 (02:00:00:00:00:00)
MAC 으로 사용자를 식별하는 것은 권장하지 않으므로 구글의 고유 식별에 대한 권장사항 가이드를 확인하자
신뢰 할 수 없는 터치 이벤트 차단
안전하지 않은 방식으로 오버레이하여 앱을 가리는 경우 터치 이벤트를 사용할 수 없다.
하지만 예외는 있다.
- 앱 내에서 오버레이를 사용
- 접근성 윈도우, IME, 어시스턴트 윈도우는 예외적으로 허용
- 윈도우의 최상위 View가 Gone 또는 INVISIBLE 상태 일 때
- 윈도우의 alpha 속성이 0.0 일 때
- 시스템 얼럿 윈도우가 불투명 할 때
ACTION_CLOSE_SYSTEM_DIALOGS 인텐트 액션 지원 중단
앱이 더 이상 시스템 다이얼로그를 강제로 닫을 수 없다.
하지만, 예외는 있다.
- 앱이 Instrumented Test를 실행 중 일 때
- 앱이 안드로이드 11 이하를 타겟팅하고, 알림 서랍위에 윈도우가 나타날 때
- 앱이 안드로이드 11 이하를 타겟팅하고, 알림을 클릭했을 때 서비스 또는 브로드캐스트 리시버를 처리 할 때
Android12를 타겟팅하는 앱에 대한 변경사항
안드로이드12를 타겟팅하는 앱에 해당하는 변경사항에 대해서 알아본다.
포어그라운드 서비스 시작 제한
오레오의 등장 이후로 구글은 백그라운드 작업에 대한 제약을 메이저 버전 업데이트때마다 강화하고 있다.
Android 12를 타겟팅하는 경우, 몇가지 경우를 제외하고 백그라운드에서 포어그라운드 서비스를 시작할 수 없다.
대안으로 WorkManager를 사용하자.
WorkManager 변경사항
신속 처리 작업(Expedited jobs)
신속 처리 작업은 시스템이 즉시 실행해야 하는 작업을 말한다. Battery Saver 및 Doze모드에 영향을 받지 않지만, 시스템이 바쁘거나 작업 할당량 초과 시에는 지연될 수도 있다.
포어그라운드 서비스가 허용되는 경우
- Activity와 같이 사용자에게 앱이 보여지는 상황
- FCM을 통한 우선순위가 높은 메시지 수신 시
- 사용자가 Bubble, Notification, Widget과 같은 UI와 관련된 액션을 취할 때
- 지오펜싱 또는 Activity를 감지하는 것과 관련된 이벤트를 수신할 때
- 좀 더 자세한 내용은 공식 문서를 참조
인텐트 필터가 포함된 컴포넌트의 명시적 노출 선언
안드로이드12를 타겟팅하고 인텐트 필터를 사용하는 컴포넌트는 android:exported 속성을 명시적으로 선언해야 한다.
이를 위반하는 경우 로그캣에 다음과 같은 오류 메시지가 표시된다.
Pending Intent의 변경 가능 여부 선언
Android12를 타겟팅하는 경우 PendingIntent를 만들 때 객체의 변경 가능 여부를 지정해야 한다.
- PendingIntent.FLAG_MUTABLE : 변경 가능
- PendingIntent.FLAG_IMMUTABLE : 변경 불가능
플래그를 설정하지 않으면 IllegalArgumentException 발생한다.
변경 가능한 PendingIntent를 만드는 경우
- 노티피케이션의 Direct Reply Action을 사용하는 경우
- PendingIntent를 사용한 Bubble을 사용하는 경우
안전하지 않은 중첩된 인텐트 실행
플랫폼 보안을 개선하기 위해 Android 12에서는 앱이 안전하지 않은 방식으로 중첩된 인텐트를 실행하면 경고를 표시하는 디버깅 기능을 제공한다.
커스텀 노티피케이션 변경사항
Android12에서는 커스텀 노티피케이션의 외관과 행동이 완전히 변경됨.
이전 커스텀 노티피케이션에서는 전체 노티피케이션 영역을 사용하고 노티피케이션에서 레이아웃과 스타일을 제공했지만 이로 인해 사용자를 혼란스럽게하거나 다른 장치에서 레이아웃 호환성 문제를 일으킬 수 있는 안티 패턴이 발생했다.
표준 템플릿은 커스텀 노티피케이션이 확장 및 축소된 상태에서 노티피케이션의 앱아이콘 이나 이름 등 모든 상태에서 다른 노티피케이션과 동일한 양식을 갖도록 한다.
일관성 있고 쉽게 접근할 수 있는 친숙한 UI/UX를 사용자에게 제공한다.
노티피케이션을 커스텀 할 수 있는 영역은 다음과 같다.
비 SDK 인터페이스 제한 사항 업데이트
- Android12에서는 비 SDK 인터페이스 목록을 업데이트함. (변경사항 목록 확인)
- Android9 부터 앱에서 사용할 수 있는 비 SDK 인터페이스를 제한함.
- 타겟팅 API에 따라 일부 비 SDK 인터페이스를 사용할 수 있지만, 크래시가 발생할 위험성이 높아짐.
- 로그 메시지 확인 및 StricMode, veridex 도구 등을 사용하여 테스트 할 수 있음.
모션 센서 제한
- 잠재적으로 민감한 사용자 정보를 보호하기 위해 모션 센서 및 포지션 센서 데이터 갱신 주기를 200Hz로 제한
- 만약 더 많은 모션 센서 데이터를 더 빠른 주기로 얻고 싶다면,
HIGH_SAMPLING_RATE_SENSORS 권한을 선언해야 한다. 그렇지 않으면 SecurityException이 발생한다.
웹뷰에서 최신 SameSite 쿠키 적용
Android12부터 WebView에는 타사 쿠키의 기본처리에 대한 변경사항이 포함된다.
- 기본값 SameSite=Lax
- SameSite=None 이 있는 쿠키는 Secure 속성을 지정해야함.
- HTTP버전과 HTTPS 버전 간의 링크는 SameSite=None; Secure로 적절하게 표시되지 않는 한 전송되지 않는다.
ADB 백업 제한
Android 12에서는 adb backup 명령어의 기본 동작이 변경 되었다.
- Android12를 타겟팅하는 앱의 경우 기기에서 내보내는 다른 시스템 데이터에서 앱 데이터가 제외 됨.
- 테스트 및 개발 목적으로 adb backup을 사용하는 경우 메니페스트에서 android:debuggable 속성을 true로 지정할 수 있다.
Android 12에서 새롭게 추가되는 기능!!
최근 메이저 업데이트에서 혁신적이라고 할 만한 변경사항은 없는 것 같다. (플랫폼이 그만큼 성숙했다는 의미기도 하다)
Android12에서 새롭게 추가되는 주요 기능은 다음과 같다.
- Rich Content Insertion
- 호환 가능한 미디어 트랜스코딩
- PIP 개선
Rich Content Insertion
앱에서 리치 콘텐츠를 클립보드나 키보드, 드래그 앤 드롭 등을 통해 수신할 수 있는 새로운 통합 API 제공.
- 하위 버전 호환성을 위한 AndroidX 라이브러리 제공
- Android API 24이상부터 지원
호환 되는 미디어 트랜스 코딩
Android 12에서는 동영상 캡처 앱이 다른 앱과의 호환성을 유지하면서 기기에 녹화 된 동영상에 대해 보다 효율적인 인코딩을 제공한다.
아래의 포맷은 기기에서 생성 된 콘텐츠에 대해 자동으로 트랜스 코딩 될 수 있다.
Google은 현재 HEVC (High Efficiency Video Coding) 비디오 압축 표준을 지원하지 않는 앱이 훨씬 향상된 비디오 압축을 활용할 수 있도록 Android 12에 새로운 트랜스 코딩 레이어를 추가하고 있다. 이 새로운 표준은 널리 사용되는 AVC(Advanced Video Coding) 압축 형식의 후속 형식이며 동일한 비디오 품질 수준에서 25-50 % 향상된 데이터 압축을 제공한다.
향상된 PIP
- 싱글 및 더블 탭에 대한 개선
- 제스쳐 네비게이션에서 더욱 자연스러워진 PIP모드로의 전환
- 비 Video 컨텐츠에 대한 매끄러운 리사이징
- PIP모드를 빠져나올 때 자연스러운 애니메이션 지원
- 윈도우 숨기기 또는 나타내기, 핀치 줌을 통한 PIP 윈도우 사이즈 조절 하기 등 새로운 제스쳐 지원
더 쉬워진 블러, 색상 필터 및 기타 효과
View 및 렌더링 계층에 일반적인 그래픽 효과를 더 쉽게 적용할 수 있다.
RenderEffect를 사용하여 블러, 컬러 필터 등을 적용하고 이를 체이닝 할 수 있다.
둥근 모서리 지원
최근 디바이스들은 둥근 모서리의 스크린으로 출시. 이를 지원하기 위해 새로운 API를 제공한다.
RoundedCorner는 radius, centerpoint 등의 정보를 가지고 있다. Display.getRoundedCorner() 호출을 통해 모서리 정보를 얻을수 있고, WindowInsets.getRoundedCorner()를 호출하면 앱의 경계에 관련된 모서리 정보를 얻을 수 있다.
앱의 호환성 변경사항 테스트
개발자모드 > 앱 호환성 변경사항 > 항목별 활성화
- 앱의 targetSdkVersion을 실제로 변경하지 않고 타겟팅 된 변경사항을 테스트 할 수 있음.
- adb를 통해서도 테스트 할 항목을 활성화 또는 비활성화 할 수 있음.
TL;DR;
이번 Android 업데이트에서는 개발자에게 Scoped Storage와 같은 대규모 공사(?)를 필요로 보안과 관련된 변경사항은 없어 보입니다. 그래도 자잘하게 신경써야하는 부분들이 있기 때문에 targetSDK를 “S”로 변경하기 전에 간략히라도 함축해놓은 본문을 꼭 참고하시기 바랍니다.
0개의 댓글