Android 9(API 레벨 28)에서는 Android 시스템에 많은 변경사항이 도입됩니다.
1) Android 9 플랫폼에서 실행되는 모든 앱
백그라운드에서 센서 액세스 제한
Android 9에서는 백그라운드 앱이 사용자 입력과 센서 데이터에 액세스하는 능력을 제한합니다. Android 9이 실행되는 기기에서 앱이 백그라운드로 실행 중인 경우, 시스템은 다음과 같은 제한을 앱에 적용합니다.
- 앱이 마이크나 카메라에 액세스할 수 없습니다.
- 연속 보고 모드를 사용하는 센서(예: 가속도계 및 자이로스코프)는 이벤트를 수신하지 않습니다.
- 변경 시 또는 원샷 보고 모드를 사용하는 센서는 이벤트를 수신하지 않습니다.
Android 9이 실행되는 기기에서 앱이 센서 이벤트를 감지해야 하는 경우, 포그라운드 서비스를 사용하세요.
전화번호 액세스 제한
Android 9에서 실행되는 앱은 사용 사례에 필요한 다른 권한 외에도 먼저 READ_CALL_LOG 권한을 얻어야 전화번호 또는 전화 상태를 읽을 수 있습니다.
Wi-Fi 위치 및 연결 정보 액세스 제한
Android 9은 이전 버전보다 앱이 Wi-Fi를 스캔하는 데 필요한 권한 요구사항이 엄격해졌습니다. 자세한 내용은 Wi-Fi 스캔 제한을 참조하세요.
유사한 제한이 getConnectionInfo() 메서드에도 적용됩니다. 이 메서드는 현재 Wi-Fi 위치를 설명하는 WifiInfo 객체를 반환합니다. 호출하는 앱에 다음과 같은 권한이 있을 경우 이 객체의 메소드만 사용하여 SSID 및 BSSID 값을 검색할 수 있습니다.
- ACCESS_FINE_LOCATION 또는 ACCESS_COARSE_LOCATION
- ACCESS_WIFI_STATE
SSID 또는 BSSID를 검색하려면 기기에서 위치 서비스가 활성화되어 있어야 합니다(Settings > Location 아래).
Wi-Fi 서비스 메서드에서 정보 삭제
Android 9에서 다음 이벤트와 브로드캐스트는 사용자 위치 또는 개인 식별 데이터와 관련된 정보를 수신하지 않습니다.
- WifiManager의 getScanResults() 와 getConnectionInfo() 메서드.
- WifiP2pManager의 discoverServices() 와 addServiceRequest() 메서드.
- NETWORK_STATE_CHANGED_ACTION 브로드캐스트.
Wi-Fi의 NETWORK_STATE_CHANGED_ACTION 시스템 브로드캐스트에는 SSID(이전의 EXTRA_SSID), BSSID (이전의 EXTRA_BSSID) 또는 연결 정보(이전의 EXTRA_NETWORK_INFO)가 포함되지 않습니다. 앱에 이 정보가 필요하면 대신 getConnectionInfo()를 호출하세요.
기기 위치 설정에 따라 전화 정보 제공
사용자가 Android 9이 실행되는 기기에서 기기 위치를 비활성화했다면 다음의 메서드는 결과를 제공하지 않습니다.
보안 동작 변경사항
TLS 구현 변경사항
Android 9에서는 다음과 같이 시스템의 TLS 구현이 여러 차례 변경되었습니다.
- SSLSocket의 인스턴스가 생성되는 동안 연결에 실패할 경우, 시스템에서 NullPointerException 대신 IOException을 발생시킵니다.
- 어떤 close_notify 경고가 발생하더라도 SSLEngine 클래스가 이를 깔끔하게 처리합니다.
Android 앱에서 안전한 웹 요청을 하는 자세한 방법은 HTTPS 예시를 참조하세요.
해결법 : black-jin0427.tistory.com/163
2) API 레벨 28 이상을 타겟팅하는 앱
포그라운드 서비스
Android 9 이상을 타겟팅하며 포그라운드 서비스를 사용하는 앱은 FOREGROUND_SERVICE 권한을 요청해야 합니다. 이는 정상적 권한이므로 시스템은 요청 앱에 자동으로 권한을 부여합니다.
Android 9 이상을 타겟팅하는 앱이 FOREGROUND_SERVICE를 요청하지 않고 포그라운드 서비스를 만들려고 하면 SecurityException이 발생합니다.
개인정보 보호 변경사항
앱이 Android 9을 타겟팅할 경우 다음의 동작 변경사항을 고려해야 합니다. 이러한 기기 일련번호 및 DNS 정보 업데이트로 사용자 개인정보 보호가 강화됩니다.
빌드 일련번호 지원 중단
Android 9에서는 사용자 개인정보를 보호하기 위해 Build.SERIAL이 항상 "UNKNOWN"으로 설정됩니다.
앱이 기기의 하드웨어 일련번호에 액세스해야 하는 경우에는 대신 READ_PHONE_STATE 권한을 요청한 다음 getSerial()을 호출해야 합니다.
DNS 개인정보 보호
Android 9을 타겟팅하는 앱은 비공개 DNS API를 준수해야 합니다. 특히 앱은 시스템 리졸버가 TLS를 통한 DNS를 실행할 경우 내장 DNS 클라이언트가 동일한 호스트 이름에 대해 암호화된 DNS를 시스템으로 사용하거나 시스템 리졸버를 선호하여 사용 중지되는지 확인해야 합니다.
기본적으로 네트워크 TLS 사용
앱이 Android 9 이상을 타겟팅하는 경우 isCleartextTrafficPermitted() 메서드는 기본적으로 false를 반환합니다. 앱이 특정 도메인을 위해 일반 텍스트를 사용 설정해야 할 경우 앱의 네트워크 보안 구성에서 cleartextTrafficPermitted를 명시적으로 true로 설정해야 합니다.
해결법 : black-jin0427.tistory.com/163
Apache HTTP 클라이언트 지원 중단
Android 6.0에서는 Apache HTTP 클라이언트 지원 기능이 삭제되었습니다. Android 9부터는 이 라이브러리가 bootclasspath에서 제거되고 기본적으로 앱에서 사용할 수 없습니다.
Android 9 이상을 타겟팅하는 앱이 Apache HTTP 클라이언트를 계속 사용하려면 다음을 AndroidManifest.xml에 추가해야 합니다.
<uses-library android:name="org.apache.http.legacy" android:required="false"/>
file: URI용 MIME 유형 스니핑
Android 9 이전의 Android 버전은 파일 내용에서 MIME 유형을 유추할 수 있습니다. Android 9(API 레벨 28)부터 앱은 WebView에서 file: URI를 로드할 때 정확한 파일 확장자를 사용해야 합니다.
파일 내용을 사용하여 MIME 유형을 유추하는 것은 보안 버그의 원인이 될 수 있으며 일반적으로 최신 브라우저에서는 허용되지 않습니다.
파일에 .html, .txt, .js 또는 .css 같은 인식된 파일 확장자가 있는 경우 MIME 유형은 확장자에 의해 결정됩니다. 파일에 확장자가 없거나 인식할 수 없는 파일인 경우 MIME 유형은 일반 텍스트입니다.
예를 들어 file:///sdcard/test.html과 같은 URI는 HTML로 렌더링되지만, file:///sdcard/test와 같은 URI는 파일에 HTML 데이터가 포함되어 있더라도 일반 텍스트로 렌더링됩니다.
출처 :
developer.android.com/about/versions/pie/android-9.0-changes-28?hl=ko#framework-security-changes
developer.android.com/about/versions/pie/android-9.0-changes-all?hl=ko
'안드로이드 > SDK version' 카테고리의 다른 글
안드로이드 11 대응 (0) | 2021.03.25 |
---|---|
안드로이드 10 (Q) 대응 (0) | 2021.03.25 |
Android 8.0 Oreo 대응 (0) | 2021.03.24 |
안드로이드 7.0 Nougat 대응 (0) | 2021.03.24 |
안드로이드 Marshmallow (안드로이드 6.0 권한체크) (0) | 2021.03.24 |