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

[android] Pie (android 9) 의 변경점

by 돼지왕 왕돼지 2019. 7. 31.
반응형

[android] Pie (android 9) 의 변경점


https://developer.android.com/about/versions/pie/android-9.0-changes-all


access_coarse_location, access_fine_location, ACCESS_WIFI_STATE, addservicerequest, adoptable storage device, android 9 for all apps, android jar, android p for all apps, android pie for all apps, Android secure encrypted files, android test, app standby bucket, asecs, battery saver improvement, bg app camera, bg app mic, bg app sensor data, bg sensor, bg wifi scan, bssid, calllog 접근 제한, CALL_LOG permission group, certificate 를 이용한 hostname 검증, cryptographic changes, device location setting, device security 변경, discoverservices, getallcellinfo, getcelllocation, getconnectioninfo, getneighboringcellinfo, getscanresult, icu lib update, internationalization support, IOException, java utf decoder, Listen, network address lookup, network violation, NETWORK_STATE_CHANGED_ACTION, NPE, onCallStateChanged, Permission Group, permission rule, phone call, phone number 접근 제한, phone permission group, phone state, PHONE_STATE_CHANGED, power management, privileged syscall, PROCESS_OUTGOING_CALLS, READ_CALL_LOG, READ_PHONE_STATE, sdcard, seccomp filter, sensor foreground service, SSID, sslengine, sslsocket, system call, telephony info, tls impl changes, wifi scan, wifiinfo, WRITE_CALL_LOG


-

다음 변경점들은 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 이 발생한다.



등등....




반응형

댓글