본문 바로가기
프로그래밍 놀이터/안드로이드, Java

[android 10] android Q 기능과 API 들

by 돼지왕왕돼지 2020. 3. 16.

[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 들을 보여준다.

...




댓글0