[android] Pie (android 9) 의 변경점 |
https://developer.android.com/about/versions/pie/android-9.0-changes-all
-
다음 변경점들은 API level 이나 targeting 에 상관없이 Android 9 platform 에서 동작하는 “모든 앱” 에 적용된다.
* Power management
전원 관리 관련된 새로운 기능들이 추가되었다
https://developer.android.com/about/versions/pie/power
app standby bucket 과 battery saver improvements 가 주 내용이다.
* Privacy changes
bg app 이 sensor 에 접근하거나, Wi-Fi scan 하는 것에 제약이 생겼다.
그리고 phone call, phone state, wifi scan 등에 대한 permission rule 과 permission group 이 추가되었다.
이 변화들은 targetSdk 관련 없이 android 9 에서 동작하는 모든 앱에 영향을 미친다.
** background 에서의 sensor 제한
-
bg app 은 user input 이나 sensor data 에 접근할 수 없다.
마이크, 카메라에 접근할 수 없다.
지속적으로 제보하는 sensor (accelerometer, gyroscope) 의 event 를 수신할 수 없다.
변화가 생기거나, 1회성으로 report 하는 sensor 에 대해서도 event 를 수신할 수 없다.
만약 센서 데이터를 수신하고 싶다면 foreground service 를 사용해야 한다.
* call log 접근 제한
-
Android9 에서는 CALL_LOG permission group 이 생겼다.
READ_CALL_LOG, WRITE_CALL_LOG, PROCESS_OUTGOING_CALLS permission 이 이 group 에 들어갔다.
기존에는 PHONE permission group 에 들어있었다.
-
만약 앱이 call log 에 접근, outgoing call 등을 처리해야 한다면, CALL_LOG permission 을 요청해야 한다.
그렇지 않으면 SecurityException 이 발생한다.
* phone number 에 대한 접근 제한
-
READ_CALL_LOG permission 이 없으면 PHONE_STATE_CHANGED broadcast 로 전달되던 phone number field 와 PhoneStateListener 로 전달되는 값은 empty 이다. ( 저 둘은 incoming, outgoing call 에 대한 phone number 를 가져올 수 있었다. )
PHONE_STATE 에 대한 intent action 으로부터 번호를 얻어오려면 READ_CALL_LOG 와 READ_PHONE_STATE permission 이 있어야 한다.
onCallStateChanged() 에서 번호를 읽으려면 READ_CALL_LOG permission 만 있으면 된다.
* Wi-Fi 위치 및 connection 정보 접근 제한
-
Wi-Fi scan 을 위한 권한 요구사항이 강화되었다.
WifiInfo 를 return 하는 getConnectionInfo method 를 사용하는 곳도 마찬가지이다.
SSID 나 BSSID 값을 얻어오기 위해서는 다음 permission 들이 있어야 한다.
ACCESS_FINE_LOCATION or ACCESS_COARSE_LOCATION / ACCESS_WIFI_STATE
SSID 나 BSSID 를 얻어오기 위해서는 location service 도 enable 되어 있어야 한다. (Seetings > Location)
* Wi-Fi service information method 가 제거되었다.
-
다음 함수들에서 user location 를 비롯한 개인 정보를 얻을 수 없다.
WifiManager 의 getScanResult(), getConnectionInfo()
WifiP2pManager 의 discoverServices(), addServiceRequest()
NETWORK_STATE_CHANGED_ACTION broadcast
-
NETWORK_STATE_CHANGED_ACTION broadcast 는 더 이상 SSID 와 BSSID, 그리고 connection info 를 더 이상 제공하지 않는다. getConnectionInfo 를 대신 사용해야 한다.
* Telephony info 가 이제는 device location setting 에 의존한다.
-
user 가 device location 을 disable 하면 다음 함수들은 결과를 제공하지 않는다.
getAllCellInfo()
listen()
getCellLocation()
getNeighboringCellInfo()
* non-SDK interface 제한
* Device security 변경
-
app target 과 관련 없이 몇 가지 capability 가 추가되었다.
** TLS impl changes
-
SSLSocket 이 생성 도중 connect 가 실패하면 NPE 대신 IOException 을 던지도록 한다.
SSLEngine class 가 close_notify alert 를 확실하게 다룬다.
** SECCOMP filter 더 더 엄격하게
-
app 에 가능했던 system call 에 대해 더 엄격해진다.
이 변화는 오직 privileged syscall 사용에만 영향을 미친다.
자세한 내용은 https://developer.android.com/about/versions/oreo/android-8.0-changes#security-all
* Cryptographic changes
-
자세한 내용은 생략...
* Android secure encrypted files 은 더 이상 지원되지 않는다.
-
Android secure encrypted files (ASECs) 의 대한 지원을 완전히 제거한다.
Android 2.2 (API 8)에서 SDcard 에 있는 app 을 지원하기 위해 ASEC 가 소개되었다.
Android 6.0 (API 23)에서 adoptable storage device 기술이 도입되었고, ASEC 대신 이것을 쓸 수 있다.
* ICU lib 에 대한 update
-
Android 9 은 ICU lib 의 ver 60 을 사용한다. ( 그 이전 최신은 ICU 58 )
ICU 는 android.icu package 에 있으며 platform 이 internationalization support 를 위해 사용된다.
예를 들어 java.util, java.text, android.text.format 에서 이것을 사용한다.
-
ICU 60 에는 Emoji 5.0 support, 향상된 date/time format 등을 포함한 여러 가지 변화가 있다.
자세한 내용은 생략한다.
* Android test 변화
-
JUnit based class 들을 다음 3개의 lib 으로 재구성했다.
android.test.base, android.test.runner, android.test.mock
따라서 android.jar 가 제공하는 것에 independent 하게 test 를 할 수 있다.
자세한 내용은 https://developer.android.com/training/testing/set-up-project
* Java UTF decoder
-
UTF-8 은 android 의 기존 charset 이다.
Android9 에서는 unicode 표준을 더 엄격하게 지킨다.
* certificate 를 이용한 hostname 검증
* Network address lookup 은 network violation
-
Network address lookup 은 network I/O 를 포함하는 작업이다.
관련하여 StrictMode에서 detect 된다.
detectNetwork, detectAll 에 대해 NetworkOnMainThreadException 이 발생한다.
등등....
'프로그래밍 놀이터 > 안드로이드, Java' 카테고리의 다른 글
[android] AndroidX 로의 migration : 그 때가 왔다! ( from Dev Summit 19 ) (0) | 2019.11.15 |
---|---|
[android] Coding in Style: Static Analysis with Custom Lint Rules ( from Dev Summit 19 ) (0) | 2019.11.14 |
[android] Pie 에서 앱 잘 작동하는지 확인하기 (0) | 2019.07.30 |
[android] Pie (9) 의 Power management (0) | 2019.07.29 |
[android] Pie (POS) 에서의 text (0) | 2019.07.25 |
댓글