[android Q] 모든 앱에 해당하는 동작 변화 |
https://developer.android.com/about/versions/10/behavior-changes-all
Non-SDK interface 제한
-
Pie 부터 Non-SDK interface 제한이 시작되었다.
Q 에서는 해당 list 를 업데이트하였다.
목표는 모든 private api 를 제거하는 것이다.
-
Android Q 를 target 하지 않는다면, 몇몇 변화는 즉각적으로 영향을 미치지 않을 것이다.
하지만 현재 greylist 에 있는 non-SDK interface 를 사용한다면, 이것은 미래에 어떻게든 high risk 로 돌아올 것이다.
-
만약 앱이 non-SDK interface 를 사용하는지 확실치 않다면 테스트 해서 찾아내라. (로그에 찍힌다.)
그리고 찾아냈다면, SDK 대체수단으로 migration 을 고려해야 한다.
만약 대체 sdk interface 를 찾을 수 없다면 새로운 public API 를 요청하라.
Gesture Navigation
-
gesture navigation 을 enable 할 수 있다.
이는 target 과 상관없이 모든 앱에 적용된다.
특별히 화면의 특정 영역에 대해 gesture 를 override 하지 않으면 모든 앱에서 system gesture 가 작동한다.
NDK
-
자세한 내용은 생략
생체 lib 과 동적 linker path 의 변화
-
Q 부터는 몇몇 path 가 실제 파일이 아닌 symbolic link 로 대체된다.
그래서 path 에 의존한 경우 문제가 될 수 있다.
* /system/lib/libc.so -> /apex/com.android.runtime/lib/bionic/libc.so
* /system/lib/libm.so -> /apex/com.android.runtime/lib/bionic/libm.so
* /system/lib/libdl.so -> /apex/com.android.runtime/lib/bionic/libdl.so
* /system/bin/linker -> /apex/com.android.runtime/bin/linker
-
자세한 내용은 생략한다.
시스템 바이너리/라이브러리가 execute-only memory 에 매핑되었다.
-
실행 가능한 시스템 바이너리와 라이브러리 조각들이 "코드 재사용 공격” 의 방어 강화 기술의 일환으로, execute-only(non-readable) memory 로 매핑되었다.
의도적인 혹은 의도적이지 않은 해당 메모리 seg 의 읽기는 execute-only 로 mark 되어 SIGSEGV 를 throw 할 예정이다. ( 버그던, 취약하던, 의도적인 메모리 조사이던간에 )
-
왜 crash 가 났는지 보려면, 관련된 tombstone file 을 /data/tombstones/ 에서 확인해 볼 수 있다.
execute-only 관련된 crash 는 다음과 같은 메시지를 갖는다.
Cause: execute-only (no-read) memory access error; likely due to data in .text.
-
자세한 내용은 생략한다.
보안
* TLS 1.3 enabled by default
-
TLS 1.3 에서는 cipher suites 를 customize 할 수 없다.
setEnabledCipherSuites() 를 통한 disable 시도는 무시된다.
-
TLS 1.3 이 negotiate 할 때, HandshakeCompletedListener 가 session 이 session cache 에 추가되기 전에 불린다.
(1.2 에서는 후에 불렸다.)
-
특정 상황에서 SSLEngine 이 SSLHandshakeException 을 던졌었다.
그러나 이제 SSLProtocolException 을 던진다.
-
0-RTT mode 는 지원되지 않는다.
-
SSLContext 를 취득해서 TLS1.3 을 disable 시킬 수 있다. (SSLContext.getInstance("TLSv1.2")
또한 setEnabledProtocols() 를 통해 connection 단위로 protocol version 을 조정할 수도 있다.
* Certificates signed with SHA-1 arent' trusted in TLS
-
SHA-1 알고리즘으로 서명된 인증서는 TLS 에서 신뢰되지 않는다.
이런 root 인증서는 2016 이후로 발급되지 않고 있다. Chrome 을 비롯한 메이저 브라우저에서 더 이상 신뢰되지 않기 때문이다.
* KeyChain behavior changes and improvements
-
크롬같은 몇몇 브라우저에서는 TLS server 가 인증서 요청 메시지를 보냈을 때 (TLS handshake 에서)인증서를 선택할 수 있게 해준다.
Android 10 에서는 KeyChain.choosePrivateKeyAlias() 호출을 통해 인증서 선택창을 보여준다.
선택할 인증서가 없는 경우에는 (서버 요구사항에 안 맞거나, 인증서가 하나도 없거나) 해당 창은 보여지지 않는다.
* Other TLS and cryptography changes
-
자세한 내용 생략
Wifi Direct broadcast
-
Q 부터는 다음 broadcast 들이 더 이상 sticky 하지 않다.
WIFI_P2P_CONNECTION_CHANGED_ACTION
WIFI_P2P_THIS_DEVICE_CHANGED_ACTION
-
자세한 내용은 생략.
Wifi 인지 능력들
-
Wifi ware data path 들을 이용하며 TCP/UDP Socket 을 만드는 것을 쉽게 하였다.
-
자세한 내용은 생략.
Go 단말에서의 SYSTEM_ALERT_WINDOW
-
Go 버전의 Android Q 에서 동작하는 앱은 SYSTEM_ALERT_WINDOW 권한을 받을 수 없다.
이유는 overlay window 를 사용하는 것은 엄청난 양의 메모리를 사용하고, 이는 low-memory android 단말에 취약함을 제공하기 때문이다.
-
Go 버전의 Q 미만 OS 에서 동작하는 앱은 SYSTEM_ALERT_WINDOW 권한을 받고, 해당 앱은 Q 로 업그레이드 해도 해당 권한을 유지한다.
하지만 OS 가 Q 로 업그레이드 되기 전 취득을 못하면, 그 이후에는 취득할 수 없다.
-
자세한 내용은 생략한다.
앱이 오래된 android version 을 target 하면 경고를 보여준다.
-
app 을 처음 실행할 때 target 이 old version 이면 (Q에서는 Android 6.0, API Level 23, MOS 미만) 유저에게 경고를 보여준다.
만약 앱이 권한을 요구한다면(돼왕 : 하위단말에서는 설치시 자동 grant 였기 때문에), 유저는 앱이 처음 실행되기 전에 권한에 대한 조정을 할 수 있다.
-
구글의 target API 요구사항에 의거, 유저는 이런 경고를 최근까지도 update 를 하지 않은 앱들에 대해서만 볼 것이다.
다른 스토어를 통해 배포되는 경우에도 비슷한 target API 정책이 2019에 도입되었기 때문에 비슷할 것이다.
SHA-2 CBC cipher suites 제거
-
다음이 시스템에서 제거되었다.
* TLS_RSA_WITH_AES_128_CBC_SHA256
* TLS_RSA_WITH_AES_256_CBC_SHA256
* TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
* TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
* TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
* TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
앱 사용
-
UsageStats 앱 사용 개선 : 앱이 split-screen, PIP 모드 등에 있어도 좀 더 정확하게 UsageStats 를 추적한다.
앱 단위 grayscale : 앱 단위의 grayscale 디스플레이 모드를 설정할 수 있다.
…
-
자세한 내용 생략.
HTTPS connection changes
-
setSSLSocketFactory 에 null 을 전달하면, IllegalArgumentException 이 발생한다.
이전의 null 전달은 current default factory 를 전달하는 것과 효과가 같았다.
android.preference lib 은 deprecate 되었다.
-
AndroidX 의 preference lib 을 사용해야 한다.
Zip file utility library changes
-
java.util.zip pkg 에 변화가 생겼다.
안드로이드와 다른 platform 간의 상호 호환이 잘 되도록 변경되었다.
-
자세한 내용은 생략..
카메라 변경
-
많은 카메라 앱이 단말이 portrait 설정이라고 가정한다.
과거에는 안전한 가정이었을 수 있지만, 폴더블과 같은 단말들이 나타나면서 그렇지 않다.
…
배터리 사용 트레킹
-
SystemHealthManager 는 단말이 주된 충전 event 후에 unplug 되면 베터리 사용 통계를 reset 한다.
주된 충전 event 란, 단말이 완충되거나, 거의 방전에서 거의 완충으로 변한 상태를 말한다.
Q 이전에는 배터리 사용 통계는 항상 unplug 되면 reset 되었다.
Android Beam deprecation
-
공식적으로 deprecate 되었다.
'프로그래밍 놀이터 > 안드로이드, Java' 카테고리의 다른 글
[android 10] android Q 기능과 API 들 (0) | 2020.03.16 |
---|---|
[android 10] Q target 하는 앱의 동작 변화 (0) | 2020.03.15 |
[Java] regex 를 써보자 - 아주 기초 (0) | 2020.03.01 |
[regex] 정규식의 성능을 개선해보자. (0) | 2020.02.27 |
[android] Notification Channel ( Oreo 부터 생김 ) (0) | 2020.02.26 |
댓글