개발하는 두더지

[Android] Android P 변경사항 본문

Java,Android

[Android] Android P 변경사항

덜지 2018. 7. 18. 11:32

targetSdkVersion이 "P"로 설정된 경우 앱에 영향을 미치는 주요 변경사항


포그라운드 서비스 권한

포그라운드 서비스를 사용하려면 FOREGROUND_SERVICE 권한을 요청해야함

권한없이 서비스를 시작하면 SecurityException이 발생


Bouncy Castle 암호화 지원 중단

Bouncy Castle가 제공하는 여러 암호화가 중단되고 Conscrypt가 제공하는 암호화로 대체됨


Build.serial에 대한 직접 액세스 제거

READ_PHONE_STATE 권한 요청 이후, Android P [ API 28]에 추가된 Build.getSerial() 을 사용


WebView 데이터 디렉토리 공유 불가

앱이 여러 프로세스에서 단일 WebView 데이터 디렉토리를 공유할 수 없음


앱의 데이터 디렉토리에 대한 액세스가 SELinux에 의해 차단됨

시스템은 각 앱의 비공개 데이터 디렉토리에 대한 앱별 SELinux 샌드박스를 적용

이제 경로로 다른 앱의 디렉토리에 직접 액세스하는 것이 허용되지 않음

앱이 FD 전달을 포함한 IPC 메커니즘을 사용하여 데이터를 공유할 수 있음





Android P 기능 및 API


Wi-Fi RTT( Round-Trip-Time)를 이용한 실내 위치추적

Android P에서 IEEE 802.11mc Wi-Fi 프로토콜을 지원하므로 실내 위치추적을 활용할 수 있음

주변에 있는 RTT 지원 Wi-Fi 액세스 포인트(AP)까지의 거리를 측정할 수 있음

위치 + Wi-Fi 켜져있어야함

RTT를 위해 AP에 연결할 필요는 없음. 스스로 주변을 탐색해서 찾음

기기에서 3개 이상의 AP에 대한 거리를 측정하는 경우 다변측정(MLAT) 알고리즘을 사용하여 가장 적합한 기기 위치를 측정함

그 결과는 1~2 미터 이내로 정확함

이 정확함을 사용하여 건물내 탐색, 음성제어와 같은 미세 위치 기반 서비스를 활용할 수 있음 ( ex "앞에있는 조명을 켜세요" )



디스플레이 컷아웃 지원

카메라와 스피커를 위한 디스플레이 컷아웃이 있는 최신 화면을 지원함

DisplayCutout 클래스 사용



알림

Android N [ 7.0 API 24] 부터 메시지에 회신하거나 알림에서 직접 다른 텍스트를 입력하는 액션을 추가할 수 있었음

Android P [ API 28 ]부터 아래와 같이 향상됨

이미지 지원 : setData()

단순화된 대화 참가자 지원 :  Notification.Person 클래스로 대화 참가자(아바타 및 URI 포함)를 식별하는데 사용

회신을 초안으로 저장 : 사용자가 실수로 알림을 닫은 경우 앱은 사용자가 회신을 완료할 수 있도록 텍스트 필드에 텍스트를 미리 채움

대화가 그룹 대화인지 식별 : setGroupConversation() 

인텐트의 문맥적 액션 설정 : setSemanticAction() 로 액션을 지정할 수 있음 ( 예: 읽기, 삭제, 회신 등으로 표시 )

SmartReply : RemoteInput.setChoices() 를 이용하여 표준회신을 제공


채널 설정, 프로드캐스트 및 알림 일시중지

Android O [ 8.0 API 26 ]에서 각 유형의 알림에 대해 사용자 맞춤 채널을 생성하는 알림 채널이 도입됨

Android P [ API 28 ]는 이러한 변경을 통해 알림 채널 설정을 단순화 함

채널 그룹 차단 : 사용자가 전체 채널 그룹을 차단할 수 있음

새로운 브로드캐스트 인텐트 유형 : 안드로이드 시스템에서 알림 채널과 채널 그룹의 차단 상태가 변경될 때 브로드캐스트 인텐트를 보냄

새로운 알림 일시중지 우선순위 범주 : NotificationManager.Policy 에 새로운 정책 2개 추가



멀티 카메라 지원 및 카메라 업데이트

듀얼 전방 카메라 또는 듀얼 후방 카메라가 달린 기기에서 두 대 이상의 물리적 카메라에서 동시에 스트림에 액세스가 가능함

새로운 기능을 구현할 수 있음 ( 예: 매끄러운 확대/축소 등 )



비트맵과 드로어블용 ImageDecoder

Android P [ API 28 ]에서 이미지 디코딩을 위한 최신 방법을 제공하기 위해 ImageDecoder를 도입

이미지를 디코딩하려면 기존 BitmapFactory 및 BitmapFactory.options API 대신 ImageDecoder를 사용해야 함

ImageDecoder를 사용하면 바이트 버퍼, 파일 또는 URI로부터 Drawable 또는 Bitmap을 생성할 수 있음

그리고 둥근 모서리나 원형 마스크 등의 복잡한 맞춤형 효과를 이미지에 추가할 수 있음



애니메이션

Android P [ API 28 ]에서 GIF 및 WebP 애니메이션 이미지를 그리고 표시하기 위해 AnimatedImageDrawable 클래스가 도입

RenderThread는 디코딩을 위해 워커 스레드를 사용하므로 앱 UI 스레드와 충돌하지 않고도 앱에서 애니메이션 이미지를 가질 수 있음



미디어 API

Android P [ API 28 ]에서 MediaPlayer2 도입! DataSourceDesc를 사용하여 빌드된 재생목록을 지원함

MediaPlayer2.create()로 인스턴스 생성

AudioTrack, AudioRecord, MediaDrm 클래스로부터 미디어 지표를 사용할 수도 있음



JobScheduler의 데이터 비용 민감도

Android P [ API 28 ]에서는 JobScheduler가 이동통신사가 별도로 제공하는 네트워크 상태 신호화 함께

사용자의 네트워크 관련 작업을 처리하도록 개선 ( 예 : 크기가 큰 네트워크 요청을 연기 가능 )



자동 완성 프레임워크

Android O [ 8.0 API 26 ] 에서 Autofill Framework 도입

Android P [ API 28 ] 에서 Autofill Framework에서 사용자 경험을 향상시키도록 자동 완성 서비스를 구현할 수 있는 여러가지 개선된 기능이 도입



회전

Android P [ API 28 ] 에서 원치않는 회전을 없애기 위해 방향이 변경되더라도 현재 방향이 고정되는 새로운 모드가 추가

필요할 때 사용자가 시스템 바의 새 버튼을 눌러 수동으로 회전을 트리거함

대부분 기존 앱의 호환성 영향이 없겠지만 항상 세로모드, 맞춤형 회전동작이 있는 경우에는 문제가 발생할 수도 있음




보안 업데이트

통합 지문 인증 대화상자

Android P [ API 28 ] 에서는 시스템이 앱을 대신해 지문 인증 대화상자를 제공함 

대화상자에 대해 표준화된 모양, 느낌, 배치를 제공하여 사용자가 신뢰할 수 있는 지문 자격 증명 검사기를 사용하고 있음을 확신하게 함

FingerprintManager -> FingerprintDialog 사용

대신 hasSystemFeature() 을 통해 FEATURE_FINGERPRINT를 지원하는지 확인해야 함

지문 인증을 지원하지 않는 기기의 경우 createConfirmDeviceCredentialIntent() 메서드를 사용해 PIN, 패턴, 비밀번호로 대체 가능



높은 보증 수준의 사용자 확인

Android P [ API 28 ] 를 설치한 상태로 출시되는 기기를 통해 Protected Confirmation API를 사용 가능

이 새로운 API를 사용하면 앱이 ConfirmationDialog의 인스턴스를 사용하여 사용자에게 짧은 문장으로 승인할 것을 요구하는 프롬프트를 표시함

이 문장을 통해 사용자가 결제와 같은 중요한 트랜젝션을 완료하겠다는 의사를 재차 확인할 수도 있음

사용자가 수락하면 앱이 키 해시 메시지 인증 코드 (HMAC)로 보호되는 암호화 서명을 받음

( 결제 모듈 연결시 한번 찾아보자.. )



하드웨어 보안 모듈

Android P [ API 28 ] 을 설치한 상태로 출시되는 지원 기기에는 하드웨어 보안 모듈에 있는 Keymaster HAL의 구현인 StrongBox Keymaster가 있음

이 모듈에는 자체 CPU, 보안 저장소, 순수 난수 생성기, 패키지 무단 변조와 권한 없는 앱 사이드 로딩을 방지하는 추가적인 매커니즘이 있음

시스템은 StrongBox Keymaster에 저장된 키를 검사할 때 TEE( Trusted Execution Environment)로 키의 무결성을 확증함




Android P 동작 변경 사항

백그라운드 앱에서 입력 및 데이터 개인정보 보호

Android P [ API 28 ] 가 실행되는 기기에서 앱이 백그라운드로 실행 중인 경우, 아래의 내용이 제한됩니다

- 앱이 마이크나 카메라에 액세스 할 수 없음

- 가속도계 및 자이로스코프 같은 센서는 이벤트 수신하지 않음

앱이 센서 이벤트를 감지해야 하는 경우, 포그라운드 서비스를 이용해야 함


앱호환성 변경사항

앱 안정성과 호환성을 보장하기 위해 플랫폼에서는 일부 비 SDK 메서드와 필드의 사용을 제한함

리플렉션을 통해 메서드와 필드에 직접 액세스를 시도하든 JNI를 사용하든 모두 적용됨

비 SDK 인터페이스에 대한 제한 보기


ICU 라이브러리에 대한 업데이트

Android O [ 8.0 API 26 ] , Android O [ 8.1 API 27 ]에서 사용되던 ICU 58이

Android P [ API 28 ] 에서 ICU 60으로 업데이트 됨

ICU ( android.icu package ) 아래 공개 API를 제공하는데 사용되며 국제화 지원을 위해 Android 플랫폼에서 내부적으로 사용됨


네트워크 주소 조회 시 네트워크 위반이 발생할 수 있음

이름 확인을 요구하는 네트워크 주소 조회에는 네트워크 I/O가 포함될 수 있으며 차단 작업으로 간주됨

메인 스레드의 차단 작업은 일시 중지나 버벅거림 현상을 유발함

StrictMode 클래스를 활성한 채로 앱을 출시하면 네트워크 위반 감지될 수 있음




출처

안드로이드 P 개발자 미리보기

안드로이드 P 기능 및 API

안드로이드 P 보안업데이트

안드로이드 P 동작 변경사항

Comments