[android 10] android Q 기능과 API 들 |
https://developer.android.com/about/versions/10/features
보안 강화
* 생체 인증 dialog 의 개선
-
Android 10 에서는 통합 생체 인증 dialog 가 강화되었다.
...
* 내장된 DEX code 를 APK 에서 직접 수행한다.
-
platform 에 앱의 APK file 안에 embedded 된 DEX code 를 실행하도록 할 수 있다.
이 option 은 공격자가 단말에서 locally compile 한 것으로 대체하는 공격을 막을 수 있다.
-
이 feature 를 enable 하면 앱 성능에 영향이 있을 수 있다. 왜냐하면 이 옵션이 on 되면 ART 는 앱이 시작할 때 AOT 로 compile 된 native 파일을 읽는 대신 JIT Compiler 를 사용해야만 하기 때문이다.
그래서 이 기능을 enable 하여 출시하기 전에 성능 측정을 하는 것이 권장된다.
...
* TLS 1.3 support
-
TLS 1.3 은 TLS 표준의 major version 인다.
이 버전에는 성능 개선과 향상된 보안 기능을 가지고 있다.
benchmark 에 따르면 secure connection 을 맺는데 TLS 1.2 에 비해 40% 정도 빠른것으로 나왔다.
...
* Conscrypt API 의 공개
-
Conscrypt security provider 는 TLS 기능에 대한 public API 를 포함한다.
과거에는 유저가 이 기능을 reflection 으로 접근했어야 한다.
하지만 POS 의 non-public API 호출에 대한 제약에 따라 이 녀석들은 Q 에서 greylisted 되었다. 그리고 미래에는 더 많은 제약이 가해질 수 있다.
이 업데이트에는 android.net.ssl 의 class collection 이 추가되었다. 여기에는 javax.net.ssl API 에서는 가능하지 않았던 기능에 접근하는 static method 들이 들어 있다.
이 collection 들은 plural(복수) 형태로 되어 있어 쉽게 기능의 matching 을 할 수 있다.
예를 들어 javax.net.ssl.SSLSocket 은 새로운 android.net.ssl.SSLSockets class 의 함수들을 쓸 수 있다.
Connectivity features
Wi-Fi 연결 API
-
P2P connection 을 제공한다.
WifiNetworkSpecifier 를 이용하여 user 에게 현재 연결된 AP 변경을 설명과 함께 물어볼 수 있다.
P2P connection 은 network 제공 목적으로 사용되는 것이 아니며, Chromecast, Google Home 장비들과 같은 secondary device 의 config bootstrapping 에 이용된다.
...
* Wi-fi 네트워크 제안 API
-
자동으로 연결되는 Wifi AP 에 대한 네트워크 보안 기능을 설정할 수 있다.
WifiNetworkSuggestion 을 통해 어떤 네트워크에 붙을지 제안할 수 있다.
platform 은 궁극적으로 app 등으로부터 얻은 입력을 바탕으로 AP 를 선택할 수 있다.
-
platform 이 앱으로부터 제안받아 wifi 에 연결하려는 경우, user 의 승인이 필수적이다.
이는 platform 이 최초로 해당 network 에 붙으려 할 때 notification 의 형태로 알려준다.
그리고 이 경우 어떤 앱으로 인해 해당 AP 에 붙으려 하는지도 보여준다.
* WiFi 고성능, 저지연(low-latency) mode 개선
-
latency 를 최소화하기 위해 modem 에 hint 를 줄 수 있다.
Android Q 는 Wifi lock api 를 확장하여, 고성능, 저지연 mode 를 효율적으로 지원할 수 있다.
해당 mode 에서는 Wifi power save 가 비활성화된다.
-
low-latency mode 는 해당 lock 을 잡은 app 이 foreground 로 동작하고 있고, screen 이 on 일 경우에만 동작한다.
이 모드는 실시간 게임 앱에서 특히 유용하다.
* 특성화된 DNS lookup resolver
-
DNS over TLS 와 특성화된 DNS lookup 을 지원한다.
기존의 DNS resolver 는 type A resolution 만 지원했다. 이는 domain name 에 대한 IP address 를 제공했으며, 해당 IP 가 제공하는 service 에 대한 상세는 알지 못했다.
Android Q 에서는 SRV 와 NAPTR lookup 을 지원하며 IP 가 제공하는 service 에 대한 정보도 알 수 있다.
* Wifi Easy Connect
-
deprecated 된 WPS 대신 Easy Connect 라는 peer device 에 대한 인증 정보(credential)을 지원한다.
앱에서는 ACTION_PROCESS_WIFI_EASY_CONNECT_URI intent 를 사용하여 Easy Connect 의 setup 과 provisioning flow 를 쉽게 통합시킬 수 있다.
호출하는 앱은 QR code scan, Bluetooth LE scan, NFC 광고 등의 channel 을 통해 URI 를 받을 수 있다.
URI 를 받으면, peer device 에 ACTION_PROCESS_WIFI_EASY_CONNECT_URI intent 를 통해 provision 을 할 수 있다.
user 는 Wifi network 를 선택하고, 인증 정보를 공유할 수 있다.
-
위의 intent 를 사용하기 전에 Easy Connect 가 지원되는지, WifiManager.isEasyConnectSupported() 를 호출하여 확인해봐야 한다.
* Wifi direct 연결 API
-
WifiP2pConfig 와 WifiP2pManager 를 통해 기결정된 정보를 바탕으로 Wifi Direct connection 을 맺을 수 있다. (향상되었다.)
기결정된 정보는 Bluetooth 나 NFC 등의 side channel 을 통해 공유된다.
...
* Bluetooth LE Connection Oriented Channels (CoC)
-
BLE Coc 연결을 통해 큰 용량의 stream data 를 2개의 BLE 단말간에 전송 가능하도록 한다.
이 interface 는 블루투스와 연결 기계의 추상화를 제공하여 구현을 간단히 한다.
Telephony 기능
* 전화 품질 향상
-
진행중인 IP Multimedia Subsystem(IMS) call 에 대한 품질 정보, network 품질 정보 등에 대한 정보 수집이 가능해졌다.
* 수신 차단과 Caller ID
-
사용자의 연락처에 있지 않은 잠재적 스팸 전화 등을 미리 알 수 있는 방법을 제공한다.
그리고 user 대신 그런 스팸 전화를 조용히 자동적으로 거부하도록 할 수 있다.
이 차단 전화에 대한 정보는 차단 전화로 콜로그에 기록된다.
이 새로운 API 를 사용하면 READ_CALL_LOG 권한을 취득할 필요 없이 전화 차단과 caller ID 기능을 제공할 수 있다.
-
inbound caller 에 대한 추가 정보를 제공할 수 있다.
예를 들면 사업상 이름, Facebook 연락 정보 등.
이를 통하면 dialer app 에서 이를 보여줄 수 있다.
* 전화 포워딩 service API
-
Call intent 가 handle 되는 방식을 바꿨다.
NEW_OUTGOING_CALL broadcast 는 deprecate 되었으며, CallRedirectionService API 로 대체되었다.
CallRedirectionService API 는 발신 전화에 대해 수정할 수 있는 interface 를 제공한다.
예를 들면, 3rd-party app 에서 전화를 취소하거나 Voip 으로 유도하거나 할 수 있다.
external storage 에 파일 생성 개선
-
scoped storage 의 도입에 더해, external storage 에 대한 권한을 추가하였다.
IS_PENDING flag 를 사용하여 disk 에 써진 media file 에 exclusive access 권한을 얻을 수 있다.
파일이 저장되어야 하는 특정 위치를 알면, system 에게 새로운 파일을 어디에 써야하는지 hint 로 제공할 수 있다.
각각의 external storage 는 유일한 volume name 을 갖는다.
미디어와 그래픽스
* Audio input 의 sharing
-
auido input 을 2개의 앱이 share 할 수 있다.
...
* Audio playback capture
-
다른 앱에서의 audio playback 을 capture 할 수 있다.
...
* MediaStyle notification 에 Seekbar
-
MediaStyle notification 이 seekbar 를 보여줄 수 있다.
PlaybackState.getPosition() 을 통해 seekbar 의 playback progress 를 표시할 수 있다.
seekbar 의 모양은 다음 rule 에 의해 결정된다.
active MediaSession 이 있고, MediaMetadata.METADATA_KEY_DURATION 이 0 초과로 명시되어 있을 때만 등장한다.
session 이 ACTION_SEEK_TO 를 구현했을 때만 user 의 seekbar drag 가 playback location 변경을 지원한다.
* Native MIDI API
-
Android Native MIDI API (AMidi) 는 앱 개발자에게 MIDI data 를 C/C++ code 를 통해 보내고 받는 기능을 제공한다.
이는 C/C++ audio/control logic 과 더 긴밀하게 통합되어 있어 JNI 의 필요성을 줄여준다.
...
* MediaCodecInfo 개선
-
MediaCodecInfo 에 새로운 함수들이 추가되어, codec 에 대한 추가 정보를 보여 줄 수 있게 되었다.
...
Thermal API
-
단말이 너무 뜨거워지면 CPU 와 GPU 에 throttle 이 걸린다.
PowerManager 에 listener 를 달아서 단말이 너무 뜨거워졌을 때 앱이 성능을 줄이는 대처를 할 수 있다.
...
Camera and images
* Monochrome camera 지원
-
monochrome camera(흑백 카메라) 기능을 최초로 지원한다.
...
* Dynamic Depth Format
-
카메라가 depth data 를 image 와는 별개의 file 에 새로운 schema 인 DDF(Dynamic Depth Format) 를 사용하여 저장할 수 있다.
앱에서 blur 를 적용하기 위해서는 JPG 와 depth metadata 가 모두 필요하다.
...
* 고효율 Image File format
-
High Efficiency Image File (HEIF) format 은 고화질 미디어에 대해 다른 format 에 비해 적은 사이즈를 갖게 하는 표준 image, video format 이다.
...
* multi-camera 개선
-
여러개의 카메라를 하나의 logical camera 로 합치는 것을 개선하였다. 이 기능은 Android 9 부터 있었다.
Camera2 API 에 다음의 것들이 추가되었다.
isSessionConfigurationSupported(SessionConfiguration)
LOGICAL_MULTI_CAMERA_ACTIVE_HPSICAL_ID
Accessibility services API
-
자세한 내용은 생략..
Autofill 개선
-
자세한 내용은 생략..
UI 와 시스템 컨트롤
* JVMTI PopFrame caps 지원
-
Android JVMTI 구현에서 can_pop_frames 를 지원한다.
debugging 모드일 때, 이 기능은 breakpoint 에서 멈춘 후 locals, globals, function 구현을 바꾼 후 function 을 다시 호출할 수 있다.
* Surface control API
-
SurfaceControl API 를 통해서 system-compositor 인 SurfaceFlinger 의 low-level access 를 제공한다.
대부분의 사용자에게는 SurfaceView 가 compositor 를 컨트롤 하도록 하는 것이 올바른 방법이다.
SurfaceControl API 는 다음과 같은 상황에서만 유용한다.
Multiple surface 의 sync
Cross-process surface embedding
Lower-level 생명 주기 관리
...
* WebView hung renderer detection
-
WebViewRendererClient 라는 새로운 abstract class 를 도입했다.
이것은 WebView 가 반응이 없을 때를 detect 할 수 있게 해준다.
...
* Settings panels
-
User 에게 앱의 context 내에서 settings 를 보여줄 수 있는 API 를 제공한다.
이것으로 user 가 settings 로 가서 설정을 바꾸는 수고를 덜어준다.
...
* 공유 개선
-
Sharing Shortcuts API, Direct share targets, Previewing text 등의 기능을 사용할 수 있다.
...
* Dark theme
-
Android system level 에서 Dark theme 을 지원한다.
...
Foreground service types
-
foregroundServiceType 이라는 xml manifest attribute 를 추가했다.
적용가능한 범위는 모르겠지만, 1개의 service 에 여러개의 foreground service type 을 추가할 수 있다.
다음의 type 들과 예가 있다.
connectedDevice : wearable 의 fitness tracker 를 monitor 한다.
dataSync : network 에서 파일 다운로드
location
mediaPlayback
mediaProjection
phoneCall
Kotlin
* libcore API 들에 대한 Nullability annotation
-
libcore API 들에 대해까지 nullability annotation coverage 를 늘렸다.
-
일반적으로 Kotlin 에서의 nullability 계약 위반은 compile error 로 이어진다.
호환성 문제를 위해 새로운 annotation 인 @RecentlyNullable, @RecentlyNonNull 로 한정한다.
이 말은 nullability 위반이 error 대신 warning 으로 표시된다는 의미이다.
추가적으로 @RecentlyNullable 이나 @RecentlyNonNull annotation 으로 Android 9 에서 표기된 녀석들은 다음 버전에서는 각각 @Nullable 과 @NonNull 로 바뀔 것이다.
다시 말해 Android 10 에서는 nullability 에 대한 강화가 더 세졌다고 보면 된다.
NDK
-
자세한 내용은 생략..
Runtime
* 잘못된 정보 바탕 GC trigger
-
작은 java object 가 C++ 의 큰 heap 을 참조할 경우, C++ objects 들은 해당 Java object 가 GC 될대까지 메모리를 차지하였다.
이전 버전에서는 플랫폼에서 java object 와 연결된 많은 C++ object 의 크기를 예측했으나, 이 예측은 항상 정확한 것이 아니었고, 수행되었어야 할 GC 가 수행되지 않거나 실패한 경우 메모리 사용량이 크게 증가하는 현상이 있었다.
Q 에서는 GC system malloc() 에 의해 할당된 total heap size 를 트래킹하여,
큰 malloc() 할당에 대해서는 GC-triggering 게산에 항상 포함되도록 했다.
따라서 Java 와 엮인 많은(큰 사이즈의) C++ 할당이 더 잦은 GC 를 유발할 수 있다.
그 외에는 약간의 감소를 보일 수 있다.
Testing 과 Debugging
* on-device system tracing
-
on-device system trace 를 사용할 경우 trace 의 size 와 duration 에 제약을 걸 수 있다.
...
TextClassfier 개선
-
언어 감지, 대화 제안에 개선이 있었다.
...
notification 의 똑똑한 reply / action
-
Android 9 에서는 notification 에 suggested reply 를 보여주는 기능이 소개되었다.
Android 10 에서는 intent action 기반으로 ML 을 이용하여 자동으로 suggestion 들을 보여준다.
...
'프로그래밍 놀이터 > 안드로이드, Java' 카테고리의 다른 글
[android] JobScheduler dumpsys log 분석해보자 (0) | 2020.07.24 |
---|---|
[android 10] 개발자를 위한 Android Q 가이드 (Highlights) (0) | 2020.03.17 |
[android 10] Q target 하는 앱의 동작 변화 (0) | 2020.03.15 |
[android 10] 모든 앱에 해당하는 동작 변화 (0) | 2020.03.14 |
[Java] regex 를 써보자 - 아주 기초 (0) | 2020.03.01 |
댓글