동작 변경사항: API 레벨 28+를 타겟팅하는 앱

Android 9(API 레벨 28)에서는 Android 시스템에 많은 변경사항이 도입됩니다. 다음 동작 변경사항은 타겟팅 대상 앱에만 적용됩니다. API 수준 28 이상 targetSdkVersion를 API 수준 28로 설정하는 앱 상위 수준은 앱이 이러한 동작을 적절히 지원하도록 고안되었습니다(앱에 적용되는 경우).

어떤 API이든 Android 9에서 실행되는 모든 앱에 영향을 미치는 변경사항의 경우 확인할 수 있으며 동작 변경사항: 모든 앱.

포그라운드 서비스

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를 준수해야 합니다. 특히 시스템 리졸버가 DNS-over-TLS를 수행하는 경우 기본 제공 DNS 클라이언트는 동일한 호스트 이름에 대해 암호화된 DNS를 사용하거나 시스템 리졸버를 위해 사용 중지됩니다.

프레임워크 보안 변경사항

Android 9에는 적용되지만 이러한 변경사항은 앱이 API 수준을 대상으로 하는 경우에만 적용됩니다. 28 이상

기본적으로 네트워크 TLS 사용

앱이 Android 9 이상을 타겟팅하는 경우 isCleartextTrafficPermitted() 드림 메서드는 기본적으로 false를 반환합니다. 앱에서 일반 텍스트를 활성화해야 하는 경우 명시적으로 cleartextTrafficPermittedtrue로 설정해야 합니다. 앱의 네트워크 보안에 구성.

프로세스별로 구분되는 웹 기반 데이터 디렉터리

Android 9에서 앱 안정성과 데이터 무결성을 개선하기 위해 앱은 다음 작업을 실행할 수 없습니다. 단일 WebView 데이터 공유 디렉터리와 여러 프로세스를 사용합니다. 일반적으로 이러한 데이터 디렉토리는 쿠키, HTTP 캐시 및 기타 영구 및 웹 탐색과 관련된 임시 저장소입니다.

대부분의 경우 앱은 android.webkit 패키지 예: 그룹: WebViewCookieManager, 단 1개 프로세스입니다 예를 들어 WebView를 사용하는 Activity 객체 동일한 프로세스로 옮길 수 있습니다. '단일 프로세스만'이라는 정책을 더 엄격하게 적용할 수 있습니다. 규칙 (으)로 disableWebView()인치 다른 프로세스와 충돌할 수 있습니다. 이 호출로 인해 WebView가 초기화되지 않습니다. 다른 프로세스에서 실수로 다른 프로세스에 있습니다.

앱이 둘 이상의 프로세스에서 WebView 다음 명령어로 각 프로세스에 고유한 데이터 디렉터리 접미사를 WebView.setDataDirectorySuffix() 이 프로세스에서 WebView의 주어진 인스턴스를 사용하기 전에 메서드를 호출할 수 있습니다. 이 방법 각 프로세스의 웹 데이터를 앱 데이터 내 자체 디렉터리에 배치합니다. 를 참조하세요.

앱별 SELinux 도메인

Android 9 이상을 타겟팅하는 앱은 다음을 사용하여 다른 앱과 데이터를 공유할 수 없습니다. 권한이 있어야 합니다. 이 변경으로 인해 Android 애플리케이션 샌드박스 특히 앱의 요구사항이 개인 정보에 액세스할 수 있고 확인할 수 있습니다.

다른 앱과 파일을 공유하려면 콘텐츠 provider로 이동합니다.

연결 변경사항

연결 데이터 카운트 및 다중 경로

Android 9 이상을 타겟팅하는 앱에서는 시스템이 집계됨 네트워크의 네트워크 트래픽 현재 기본값이 아닌 경우(예: 기기가 켜져 있는 동안 이동통신 트래픽) Wi-Fi를 사용하고, NetworkStatsManager 드림 클래스를 사용하여 해당 트래픽을 쿼리합니다.

특히 getMultipathPreference() 드림 이제 앞서 언급한 네트워크 트래픽을 기반으로 값을 반환합니다. 시작값 Android 9의 경우 이 메서드는 모바일 데이터에 true를 반환하지만 데이터가 일정량 이상이면 트래픽이 하루에 누적되면 false이(가) 반환되기 시작합니다. 실행 중인 앱 Android 9에서는 이 메서드를 호출하고 이 힌트를 준수해야 합니다.

ConnectivityManager.NetworkCallback 클래스가 이제 VPN에 대한 정보를 앱으로 보냅니다. 이번 변경을 통해 동기 및 스레드를 혼용하지 않고도 앱이 연결 이벤트를 수신 대기하도록 비동기 호출 및 제한된 API 사용 또한 기기가 여러 네트워크에 연결된 경우 정보 전송은 Wi-Fi 네트워크 또는 여러 이동통신망을 동시에 사용할 수 있습니다.

Apache HTTP 클라이언트 지원 중단

Android 6.0에서는 Apache HTTP 클라이언트에 대한 지원이 삭제되었습니다. Android 9부터는 이 라이브러리가 bootclasspath하고 기본적으로 앱에 사용할 수 없습니다.

Apache HTTP 클라이언트를 계속 사용하려면 Android 9 이상을 타겟팅하는 앱에서 AndroidManifest.xml에 다음을 추가할 수 있습니다.

<uses-library android:name="org.apache.http.legacy" android:required="false"/>

앱은 런타임 Apache 라이브러리 사용의 대안으로 자체 버전의 org.apache.http 라이브러리를 사용할 수도 있습니다. 이렇게 하면 다음과 같은 유틸리티를 사용하여 라이브러리를 Jar Jar 사용)을 사용하여 클래스 호환성 문제를 방지하세요. 할 수 있습니다.

UI 변경사항

뷰 포커스

0 영역(너비나 높이가 0)이 있는 뷰는 포커스가 불가능합니다.

또한 활동이 더 이상 초기 포커스를 있습니다. 대신 초기 포커스를 명시적으로 요청해야 합니다. 있습니다.

CSS RGBA 16진수 값 처리

Android 9 이상을 타겟팅하는 앱은 초안을 사용 설정해야 합니다. CSS 색상 모듈 수준 4 4자리 및 8자리 16진수 CSS 색상을 처리하기 위한 동작을 수행합니다.

CSS 색상 모듈 레벨 4 출시 52부터 Chrome에서 지원되었지만 현재 WebView에서 이 기능을 사용 중지합니다. 기존 Android 애플리케이션에는 32비트 16진수 색상이 포함되어 있었기 때문에 Android 순서 (ARGB)에 포함되어 있으면 렌더링 오류가 발생합니다.

예를 들어 #80ff8080 색상은 현재 다음에서 렌더링됩니다. 불투명으로 표시되는 WebView API 수준 27 이하를 타겟팅하는 앱의 경우 연한 빨간색 (#ff8080) 선두 (Android에서는 알파 구성 요소로 해석될 수 있음) 현재 무시됩니다. 앱이 API 수준 28 이상을 타겟팅하는 경우 #80ff8080는 50% 투명 연한 녹색 (#80ff80)으로 해석됩니다.

file: URI용 MIME 유형 스니핑

Android 9 이전의 Android 버전은 파일에서 MIME 유형을 추론할 수 있습니다. 있습니다. Android 9 (API 수준 28)부터 앱은 file: URI를 로드할 때 올바른 파일 확장자를 WebView의 시스템 뷰입니다.

파일 콘텐츠를 사용하여 MIME 유형을 추론하는 것은 보안 버그의 원인이 될 수 있습니다. 최신 브라우저에서는 일반적으로 허용되지 않습니다.

파일의 파일 확장자가 .html와 같이 인식되는 경우 .txt, .js 또는 .css MIME 유형은 확장 프로그램에서 결정합니다. 파일에 확장자가 없거나 인식할 수 없는 파일인 경우, MIME 유형은 일반입니다. 있습니다.

예를 들어 file:///sdcard/test.html와 같은 URI는 다음과 같이 렌더링됩니다. HTML이지만 file:///sdcard/test과 같은 URI는 일반 텍스트로 렌더링됩니다. 파일에 HTML 데이터가 포함되어 있는 경우에도 마찬가지입니다.

문서 스크롤 요소

Android 9는 문서의 루트가 요소가 스크롤 요소입니다. 이전 버전에서는 스크롤 위치가 본문 요소에 설정되었습니다. 루트 요소에 0 스크롤 값이 있었습니다. Android 9은 스크롤 요소가 루트 요소인 경우 요소가 포함됩니다.

또한 document.body.scrollTop, document.body.scrollLeft, document.documentElement.scrollTop 또는 document.documentElement.scrollLeft 대상 SDK에 따라 다르게 작동합니다 표시 영역에 액세스하려면 스크롤하세요. 가능한 경우 document.scrollingElement를 사용합니다.

일시정지된 앱의 알림

Android 9 이전에는 정지된 앱의 알림이 취소되었습니다. Android 9부터는 일시 중지된 앱의 알림이 다음 시간까지 숨겨집니다. 앱이 재개됩니다.