Android 8.0 기능 및 API

Android 8.0 (API 레벨 26)에는 사용자와 개발자를 위해 새로운 기능과 성능을 제공합니다. 이 문서에서는 개발자를 위한 새로운 기능을 소개합니다.

또한 <ph type="x-smartling-placeholder"></ph> Android 8.0 동작 변경사항: 플랫폼이 변경되는 영역 알아보기 앱에 영향을 미칠 수 있습니다

사용자 환경

PIP 모드

Android 8.0의 PIP 모드.

Android 8.0 (API 수준 26)에서는 활동을 PIP 모드를 사용하면 안 됩니다. PIP는 주로 동영상 재생에 사용되는 특수한 유형의 멀티 윈도우 모드입니다. PIP 모드는 원래 Android TV에서만 사용할 수 있었지만 Android 8.0부터는 다른 Android 기기에서도 이 기능을 사용할 수 있습니다.

활동이 PIP 모드에 있으면 일시 정지된 상태이지만 콘텐츠를 계속 표시합니다. 따라서 앱이 onPause()에서 재생을 일시중지하지 않음 처리됩니다. 대신 onStop()에서 동영상을 일시중지했다가 onStart()에서 계속 재생해야 합니다. 자세한 내용은 다중 창 수명 주기를 참고하세요.

액티비티가 PIP 모드를 사용할 수 있도록 지정하려면 매니페스트에서 android:supportsPictureInPicture를 true로 설정합니다. (Android 8.0부터 PIP에는 android:resizeableActivity 매니페스트 속성이 필요하지 않습니다. 하지만 활동이 다른 요소를 지원하는 경우 android:resizeableActivity를 `true` 로 멀티 윈도우 모드).

Android 8.0(API 수준 26)에는 PictureInPictureParams라는 새로운 객체가 도입됩니다. 이 객체를 PIP 메서드에 전달하여 PIP 모드일 때 액티비티의 동작 방법을 지정할 수 있습니다. 이 객체는 액티비티의 기본 가로세로 비율 등과 같은 속성을 지정합니다.

기존 PIP 메서드는 추가 이제 PIP 모드를 Android TV뿐만 아니라 모든 Android 기기에서 사용됩니다. 또한 Android 8.0에서는 Android 8.1.0 이상을 지원하기 위해 다음과 같은 메서드를 제공합니다. PIP 모드:

  • Activity.enterPictureInPictureMode(PictureInPictureParams args): 활동을 PIP 모드로 전환합니다. 액티비티의 가로세로 비율 및 기타 구성 설정은 args를 통해 지정됩니다. args에서 어떤 필드가 비어 있을 경우, 시스템은 마지막으로 Activity.setPictureInPictureParams()를 호출했을 때 설정된 값을 사용합니다.

    지정된 활동이 화면 모서리에 배치됩니다. 나머지 화면이 화면에 표시된 이전 활동으로 채워집니다. PIP 모드로 전환되는 활동이 일시중지 상태로 전환되지만 그대로 유지됩니다. 시작됩니다 사용자가 PIP 활동을 탭하면 시스템에서 상호작용할 사용자 활동이 있는 동안에는 터치 이벤트가 PIP 상태가 됩니다.

  • Activity.setPictureInPictureParams(): 활동의 PIP 구성 설정을 업데이트합니다. 액티비티가 현재 PIP 모드에 있으면 설정이 업데이트됩니다. 이는 액티비티의 가로세로 비율이 변경될 때 유용합니다. 활동이 PIP 모드가 아닌 경우 이러한 구성 설정은 enterPictureInPictureMode() 메서드를 호출합니다.

알림

Android 8.0(API 수준 26)에서는 알림 동작과 설정을 더욱 간편하고 일관적으로 관리할 수 있도록 알림을 재구성했습니다. 변경사항은 다음과 같습니다.

    Android 8.0 (API 수준 26)의 길게 누름 알림 메뉴

    사용자가 앱 런처 아이콘을 길게 눌러 볼 수 있음 알림 기능을 사용할 수 있습니다.

  • 알림 채널: Android 8.0에서는 개발자가 표시하고자 하는 각 유형의 알림에 대해 사용자 맞춤형 채널을 생성할 수 있는 알림 채널을 도입합니다. 사용자 인터페이스는 알림 카테고리로 알림 채널에 추가합니다. 알림 채널을 구현하는 방법은 알림 채널 관리를 참고하세요.
  • 알림 표시 점: Android 8.0에서는 앱 런처 아이콘에 점 또는 배지를 표시하는 기능을 지원합니다. 알림 표시 점은 사용자가 아직 닫거나 조치를 취하지 않은 알림이 있는지 확인합니다. 알림 표시 점을 사용하는 방법을 알아보려면 다음을 참조하세요. 알림 배지를 추가합니다.
  • 다시 알림: 사용자는 알림을 다시 알림으로 설정할 수 있으며, 이 경우 알림이 일정 시간 동안 사라졌다가 다시 표시됩니다. 알림이 표시될 때 처음과 동일한 중요도를 나타냅니다. 앱에서 삭제 또는 업데이트 가능 다시 알림이 설정되고 있지만 다시 알림으로 설정된 알림을 업데이트해도 합니다.
  • 알림 시간 제한: 알림을 만들 때 시간 제한을 설정할 수 있습니다. 알림을 사용하여 setTimeoutAfter() 이 메서드를 사용하여 알림이 표시되기 전까지의 기간을 지정할 수 있습니다. 취소되어야 합니다. 필요한 경우 지정된 제한 시간이 경과하면
  • 알림 설정: setSettingsText() 앱의 링크를 생성할 때 표시되는 텍스트를 알림 설정을 사용하여 알림 설정을 Notification.INTENT_CATEGORY_NOTIFICATION_PREFERENCES 인텐트에 대한 응답 메시지입니다. 시스템은 필터링 인텐트와 함께 다음과 같은 추가 항목을 제공할 수 있습니다. 앱이 사용자에게 표시해야 하는 설정: EXTRA_CHANNEL_ID NOTIFICATION_TAG, NOTIFICATION_ID
  • 알림 닫기: 사용자는 알림을 직접 닫을 수 있습니다. 앱에서 프로그래매틱 방식으로 삭제할 수 있습니다. NotificationListenerService 클래스의 onNotificationRemoved() 메서드를 구현하여 알림이 닫히는 시점과 이유를 확인할 수 있습니다.
  • 배경 색상: 알림의 배경 색상을 설정하고 사용 설정할 수 있습니다. 사용자가 한눈에 볼 수 있도록 중요한 작업에 대한 알림에만 이 기능을 사용해야 합니다. 예를 들어 운전 중 길찾기 또는 진행 중인 통화와 관련된 알림에 대해 배경 색상을 설정할 수 있습니다. 또한 원하는 배경 색상을 setColor() 만들기 setColorized()를 사용하면 알림의 배경 색상을 사용할 수 있습니다.
  • 메시징 스타일: Android 8.0에서는 MessagingStyle 수업 표시 더 많은 콘텐츠가 표시됩니다. 메시지와 관련된 알림에는 MessagingStyle 클래스를 사용해야 합니다. 또한 addHistoricMessage() 메서드를 사용하여 다음을 추가하여 대화에 컨텍스트를 제공할 수 있습니다. 이전 메시지를 메시징 관련 알림에 추가할 수 있습니다

자동 완성 프레임워크

계정 생성, 로그인, 신용카드 거래는 시간이 걸리고 오류가 발생하기 쉽습니다. 사용자는 이러한 유형이 필요한 앱으로 인해 쉽게 불만을 느낄 수 있습니다. 설계하는 방법을 배웠습니다

Android 8.0 (API 수준 26)에서는 로그인과 같은 양식 작성 자동 완성 프레임워크 도입으로 더욱 쉬워졌습니다. 사용자가 Autocomplete Framework를 선택하면 기존 앱과 새로운 앱에서 자동 완성 프레임워크를 사용할 수 있습니다. 자동 완성

앱에서 프레임워크를 사용하는 방식을 최적화하기 위해 몇 가지 단계를 취할 수 있습니다. 자세한 내용은 Autofill Framework 개요를 참고하세요.

다운로드 가능한 글꼴

Android 8.0(API 수준 26) 및 Android 지원 라이브러리 26을 사용하면 APK에 글꼴을 번들로 묶거나 APK로 글꼴을 다운로드하는 대신 글꼴을 제공자 애플리케이션에서 요청할 수 있습니다. 이 기능을 사용하면 APK 크기가 줄어들고 앱 크기가 여러 앱이 동일한 글꼴을 공유할 수 있도록 합니다.

글꼴 다운로드에 대한 자세한 내용은 다운로드 가능한 글꼴

XML의 글꼴

Android 8.0(API 수준 26)에는 글꼴을 리소스로 사용할 수 있는 새로운 기능인 XML의 글꼴이 도입되었습니다. 즉, 전체 글꼴 크기 때문에 글꼴을 번들로 묶을 애셋으로 사용합니다 글꼴은 R 파일로 컴파일되고 시스템에서 자동으로 리소스로 사용할 수 있습니다. 그런 다음 새로운 리소스 유형인 font를 사용하여 이러한 글꼴에 액세스할 수 있습니다.

지원 라이브러리 26은 API 버전 14 이상이 실행되는 기기에서 이 기능을 완벽하게 지원합니다.

글꼴을 리소스로 사용하고 시스템 글꼴을 검색하는 방법에 관한 자세한 내용은 XML의 글꼴을 참고하세요.

TextView 자동 크기 조절

Android 8.0 (API 수준 26)에서는 텍스트 확장 또는 축소의 축소됩니다. 즉, 다양한 화면에서 또는 동적 콘텐츠로 텍스트 크기를 더 쉽게 최적화할 수 있습니다. Android 8.0의 TextView 자동 크기 조절에 관한 자세한 내용은 TextView 자동 크기 조절을 참고하세요.

적응형 아이콘

Android 8.0 (API 수준 26)에는 적응형 런처 아이콘이 도입되었습니다. 어댑티브 아이콘은 시각적 효과를 지원하며, 다른 기기 모델에서 다양한 모양을 표시할 수 있습니다. 적응형 아이콘을 만드는 방법은 적응형 아이콘 참조하세요.

색상 관리

이미징 앱을 개발하는 Android 개발자는 이제 새로운 기기를 활용할 수 있습니다. 넓어진 색 영역을 표시할 수 있는 디스플레이 광고입니다. 넓은 색 영역을 표시하려면 앱이 매니페스트에서 플래그를 사용 설정해야 합니다 (활동별). 임베디드 와이드 컬러 프로필 (AdobeRGB, Pro Photo RGB, DCI-P3 등).

WebView API

Android 8.0에서는 앱에 웹 콘텐츠를 표시하는 WebView 객체를 관리하는 데 도움이 되는 여러 API를 제공합니다. 이러한 API는 앱의 안정성과 보안을 개선해 주며 다음과 같은 API가 포함됩니다.

  • 버전 API
  • Google SafeBrowsing API
  • Termination Handle API
  • 렌더기 중요도 API

이러한 API에 대해 자세히 알아보려면 WebView 관리를 참고하세요.

웹 브라우징의 보안 강화를 위해 이제 WebView 클래스에 안전 브라우징 API가 포함됩니다. 자세한 내용은 Google 세이프 브라우징 API.

바로가기 및 위젯 고정

Android 8.0 (API 레벨 26)에는 단축키와 있습니다. 앱에서 다음 앱을 위한 고정된 바로가기와 위젯을 만들 수 있습니다. 런처에 설치될 수 있습니다.

자세한 내용은 단축키 및 위젯 고정 기능 가이드를 참고하세요.

최대 화면 가로세로 비율

Android 8.0 (API 수준 26)에서는 앱의 최대 가로세로 비율을 구성하는 방법이 변경되었습니다.

첫째, Android 8.0은 maxAspectRatio 속성을 사용하면 앱의 최대 가로세로 비율을 설정하는 데 사용할 수 있습니다. 또한 Android 8.0 이상에서는 앱의 기본 최대 가로세로 비율이 앱이 실행 중인 기기의 네이티브 가로세로 비율입니다.

최대 가로세로 비율 선언에 관한 자세한 내용은 여러 화면 지원을 참고하세요.

다중 디스플레이 지원

Android 8.0(API 수준 26)부터 플랫폼에서 다중 디스플레이 지원이 강화됩니다. 활동이 멀티 윈도우 모드를 지원하고 다중 디스플레이가 있는 기기에서 실행되는 경우 사용자는 활동을 이동할 수 있고 다른 디스플레이로 이동하는 것입니다. 앱이 활동을 시작할 때 활동을 실행해야 하는 디스플레이를 지정할 수 있습니다.

참고: 활동이 Android 8.0에서는 자동으로 다중 디스플레이 지원을 제공합니다. 앱을 테스트하여 다중 디스플레이 환경에서 적절히 작동하는지 확인합니다.

한 번에 하나의 액티비티만 재개됨 상태가 될 수 있습니다. 앱에 여러 개의 디스플레이가 있습니다. 포커스가 있는 활동이 재개된 상태입니다. 다른 모든 표시되는 활동은 일시 중지되지만 중지되지는 않습니다. 여러 액티비티가 표시되는 경우 액티비티 수명 주기에 관한 자세한 내용은 다중 창 수명 주기를 참고하세요.

사용자가 한 디스플레이에서 다른 디스플레이로 활동을 이동하면 시스템은 활동의 크기를 조정하고 필요에 따라 런타임 변경을 실행합니다. 활동은 구성 변경을 직접 처리하거나 시스템이 활동이 포함된 프로세스를 소멸시키고 새 크기로 활동을 다시 생성하도록 허용할 수 있습니다. 자세한 내용은 구성 변경 처리를 참고하세요.

ActivityOptions는 사용자 지원을 위한 두 가지 새로운 메서드를 제공합니다. 다중 디스플레이:

setLaunchDisplayId()
활동이 시작될 때 활동을 표시해야 하는 디스플레이를 지정합니다.
getLaunchDisplayId()
활동의 현재 실행 디스플레이를 반환합니다.

adb 셸이 다중 디스플레이를 지원하도록 확장되었습니다. 이제 shell start 명령어를 사용하여 액티비티를 시작하고 액티비티의 대상 디스플레이를 지정할 수 있습니다.

adb shell start <activity_name> --display <display_id>

통합된 레이아웃 여백 및 패딩

Android 8.0(API 수준 26)을 사용하면 View 요소의 반대쪽에서 같은 여백 또는 안쪽 여백을 사용하는 상황을 더 쉽게 지정할 수 있습니다. 특히, 이제는 레이아웃 XML 파일에 다음 속성을 사용할 수 있습니다.

참고: 앱의 로직을 서로 다른 다양한 언어 및 문화를 고려하는 것이 좋습니다 속성의 값은 <ph type="x-smartling-placeholder"></ph> layout_marginStart님, layout_marginEnd님, paddingStart 또는 paddingEnd 새로운 수직 및 수평 레이아웃 속성 외에, 이러한 값을 직접 설정하여 텍스트 방향에 따라 달라지는 레이아웃 동작을 만들 수 있습니다.

포인터 캡처

게임, 원격 데스크톱, 가상화 클라이언트와 같은 일부 앱은 마우스 포인터를 제어할 수 있게 되면 큰 이점을 누릴 수 있습니다. 포인터 캡처는 모든 마우스 이벤트를 앱의 포커스 뷰에 제공함으로써 이러한 제어를 제공하는 Android 8.0(API 수준 26)의 새로운 기능입니다.

Android 8.0부터 앱의 View가 포인터를 캡처하고 리스너를 정의하여 캡처된 포인터 이벤트를 처리합니다. 이 모드에서는 마우스 포인터가 숨겨집니다. 뷰는 더 이상 마우스 정보가 필요하지 않을 경우 포인터 캡처를 해제할 수 있습니다. 시스템도 예컨대 사용자가 다른 앱을 열 때와 같이, 뷰가 포커스를 잃을 경우 포인터 캡처를 해제할 수 있습니다.

앱에서 이 기능을 사용하는 방법에 관한 자세한 내용은 포인터 캡처를 참고하세요.

앱 카테고리

Android 8.0(API 수준 26)에서는 관련된 적절한 범주를 각 앱이 선언할 수 있습니다. 이러한 카테고리는 용도나 기능이 유사한 앱을 모아서 사용자에게 표시할 때 사용됩니다(예: 데이터 사용량, 배터리 사용량 또는 저장소 사용량). 앱의 범주를 정의하기 위해 <application> 매니페스트 태그에서 android:appCategory 속성을 설정할 수 있습니다.

Android TV 런처

Android 8.0(API 수준 26)에는 새로운 콘텐츠 중심의 Android TV 홈 화면 환경이 포함되어 있으며, 이 환경은 Android 8.0용 Android TV 에뮬레이터 및 Nexus Player 기기 이미지에서 사용할 수 있습니다. 새로운 홈 화면에는 채널에 해당되는 행의 동영상 콘텐츠가 표시되며, 각 행에는 있습니다. 앱은 여러 채널을 게시할 수 있고, 사용자는 홈 화면에서 보고 싶은 채널을 구성할 수 있습니다. Android TV 홈 화면에는 다음 볼만한 동영상 행도 포함되어 있는데, 사용자의 시청 습관에 따라 앱의 프로그램으로 채워짐 앱은 또한 사용자가 프로그램에 초점을 맞추면 자동으로 재생되는 동영상 미리보기입니다. API는 채널과 프로그램을 채우는 것은 Android용 계정으로 배포되는 TvProvider API의 일부입니다. Android 8.0에서 라이브러리 모듈을 지원합니다.

AnimatorSet

Android 8.0(API 수준 26)부터 AnimatorSet API에서 탐색과 역방향 재생을 지원합니다. 탐색을 통해 애니메이션 세트의 위치를 특정 확인할 수 있습니다. 앱에 실행 취소할 수 있는 작업의 애니메이션이 포함된 경우 역방향 재생이 유용합니다. 2개의 애니메이션 세트를 별도로 정의하는 대신 같은 애니메이션을 역방향으로 재생할 수 있습니다.

입력 및 탐색

키보드 탐색 클러스터

앱의 활동이 그림 2와 같이 복잡한 뷰 계층 구조를 사용하는 경우, UI 요소 그룹을 클러스터로 구성하면 키보드 탐색이 더 쉬워집니다. 사용자는 Chromebook 기기에서 Meta+Tab 또는 Search+Tab 키를 눌러 클러스터 간에 이동할 수 있습니다. 클러스터의 적절한 예로는 측면 패널, 탐색 메뉴, 기본 콘텐츠 영역 그리고 많은 하위 요소들을 포함할 수 있는 요소를 들 수 있습니다.

사용자가 방문하는 다섯 개의 탐색 클러스터가 포함된 활동 예시
  키보드 탐색 클러스터 단축키를 사용하여
탐색할 수 있습니다 클러스터는 다음과 같은 배열로 나타납니다. 상단 패널, 왼쪽 패널, 기본 콘텐츠 영역, 하단 패널, 플로팅 액션 버튼
그림 2. 탐색 5개가 포함된 활동 클러스터
를 통해 개인정보처리방침을 정의할 수 있습니다.

View 또는 ViewGroup 요소를 클러스터로 만들려면 요소의 레이아웃 XML 파일에서 android:keyboardNavigationCluster 속성을 true로 설정하거나 앱의 UI 로직에서 truesetKeyboardNavigationCluster()로 전달합니다.

참고: 클러스터는 중첩되지 않지만 중첩될 수 없습니다. 클러스터는 계층 구조의 다른 수준에서 나타날 수 있습니다. 클러스터를 중첩시키려고 시도하면 프레임워크는 최상위 ViewGroup 요소만을 클러스터로 간주합니다.

터치 스크린이 있는 기기에서는 클러스터로 지정된 ViewGroup 객체의 요소 android:touchscreenBlocksFocus개를 true에서 다음 위치로 해당 클러스터 안팎으로의 클러스터 전용 탐색을 허용합니다. 이 사용자는 Tab 키나 화살표 키를 사용하여 클러스터 안팎으로 탐색합니다. 클러스터 탐색을 눌러야 하고 키보드 조합을 사용하세요.

기본 포커스 보기

Android 8.0 (API 수준 26)에서는View (다시) 생성된 활동이 재개되고 사용자가 Tab 키와 같은 키보드 탐색 키입니다. 이 '기본 포커스' 설정을 적용하려면 UI 요소가 포함된 레이아웃 XML 파일에서 View 요소의 android:focusedByDefault 속성을 true로 설정하거나 앱의 UI 로직에서 truesetFocusedByDefault()로 전달합니다.

음성 출력

활동과 서비스는 TextToSpeech 인스턴스를 사용하여 콘텐츠를 받아쓰고 발음할 수 있습니다. Android 8.0(API 수준 26)부터 앱은 TTS 엔진이 이 정보를 제공하는 한 TTS 엔진이 개별 합성 단어를 말하기 시작하는 시점에 관한 더 정확한 타이밍 정보를 얻을 수 있습니다. 이 기능을 사용하면 텍스트 음성 변환 엔진에서 특정 단어를 말할 때 사용자의 주의를 끌 수 있습니다.

앱에서 이러한 텍스트 음성 변환 엔진 개선사항을 사용하려면 UtteranceProgressListener 인스턴스를 등록합니다. Google Cloud의 핸들러에 포함되므로 onRangeStart() 메서드를 사용하여 축소하도록 요청합니다.

텍스트 음성 변환 엔진은 녹화하려면 rangeStart()하세요 특정 범위의 텍스트에서 오디오가 재생될 것으로 예상되는 시점 시작합니다. 해당 텍스트 범위의 오디오 재생이 시작되면 앱의 onRangeStart() 메서드가 실행됩니다. 그러면 앱이 이 콜백에 다음과 같이 응답할 수 있습니다. 발화와 연결된 텍스트 범위를 강조 표시합니다.

텍스트 음성 변환 엔진의 재생 진행률 추적에 관한 자세한 내용은 UtteranceProgressListener 클래스 참조를 참고하세요.

시스템

새로운 StrictMode 탐지기

Android 8.0(API 수준 26)에서는 앱의 잠재적 버그를 찾도록 도와주는 세 개의 새로운 StrictMode 탐지기를 추가합니다.

  • detectUnbufferedIo()에서 감지한 시점 앱에서 버퍼링 없이 데이터를 읽거나 쓰는데, 이로 인해 확인할 수 있습니다
  • detectContentUriWithoutPermission()은 앱 외부에서 액티비티를 시작할 때 이 앱이 실수로 또 다른 앱에 권한을 부여하는 것을 잊어버린 경우 이를 탐지합니다.
  • detectUntaggedSockets()는 앱이 디버깅 용도로 setThreadStatsTag(int)를 사용하지 않고 네트워크 트래픽을 실행하는 경우 이를 탐지합니다.

캐시된 데이터

Android 8.0(API 수준 26)은 캐시된 데이터에 대한 더 나은 지침과 동작을 제공합니다. 각 이제 다음과 같이 캐시된 데이터를 위한 디스크 공간 할당량이 앱에 제공됩니다. getCacheQuotaBytes(UUID)

시스템이 디스크 공간을 늘려야 하는 경우, 할당된 할당량을 가장 많이 초과하는 앱에서 캐시된 파일을 먼저 삭제합니다. 따라서 할당된 할당량 아래로 캐시된 데이터를 유지한다면, 필요한 경우 해당 캐시 파일이 시스템에서 마지막으로 지워집니다. 앱에서 어떤 캐시 파일을 삭제할지 결정할 때 시스템은 가장 오래된 파일을 먼저 삭제할 것을 고려합니다(수정된 시간으로 판별).

또한 디렉터리별로 사용하여 제어할 수 있는 두 가지 새로운 동작도 있습니다. 시스템이 캐시된 데이터를 확보하는 방법:

  • StorageManager.setCacheBehaviorAtomic()는 디렉터리와 그 안의 모든 콘텐츠를 단일 원자 단위로 삭제해야 한다는 것을 명심해야 합니다.
  • setCacheBehaviorTombstone(File, boolean)은 디렉터리 내의 파일을 삭제하는 대신, 파일을 0바이트 길이로 자르고 빈 파일은 그대로 두어야 함을 나타냅니다.

마지막으로, 대용량 파일에 디스크 공간을 할당할 경우, 새로운 allocateBytes(FileDescriptor, long) API 사용을 고려하세요. 이 API는 여러분의 요청을 충족시키기 위해 (필요에 따라) 다른 앱에 속하는 캐시 파일을 자동으로 지웁니다. 기기에 새 데이터를 저장할 디스크 공간이 충분하므로 getAllocatableBytes(UUID) getUsableSpace(): 전자는 캐시된 데이터를 고려하고 자동으로 삭제할 수 있습니다

콘텐츠 제공자 페이징

대규모 한 번에 한 페이지씩 데이터 세트로 이동할 수 있습니다 예를 들어 수천 개의 이미지가 포함된 사진 앱은 데이터의 하위 집합을 쿼리하여 페이지에 표시할 수 있습니다. 각 페이지 콘텐츠 제공자가 반환한 결과의 50%가 단일 커서로 표현됨 객체를 지정합니다. 이 기능을 사용하려면 클라이언트와 제공자가 모두 페이징을 구현해야 합니다.

콘텐츠 제공자의 변경사항에 관한 자세한 내용은 ContentProviderContentProviderClient를 참고하세요.

콘텐츠 새로고침 요청

ContentProvider 및 이제 ContentResolver 클래스에 refresh() 메서드에 전달하여 클라이언트가 요청하는 정보가 최신인지 확인합니다.

다음을 확장하여 맞춤 콘텐츠 새로고침 로직을 추가할 수 있습니다. ContentProvider 이때 반환할 refresh() 메서드 true: 사용자가 시도했던 것을 제공업체의 클라이언트에 나타냅니다. 데이터를 직접 새로고침합니다

클라이언트 앱은 refresh()라고도 불리는 다른 메서드를 호출하여 새로 고쳐진 콘텐츠를 명시적으로 요청할 수 있습니다. 이 메서드를 호출할 때 새로고침할 데이터의 URI를 전달합니다.

참고: 네트워크를 통해 데이터를 요청할 수 있으므로 콘텐츠가 오래되었다는 확신이 드는 경우에만 클라이언트 측에서 refresh()를 호출해야 합니다. 이러한 형태의 콘텐츠 새로고침을 수행하는 가장 일반적인 이유는 스와이프하여 새로고침 동작에 응답하는 경우입니다. 이 동작은 현재 UI에 최신 콘텐츠를 표시하도록 명시적으로 요청합니다.

JobScheduler 개선 사항

Android 8.0(API 수준 26)에서는 JobScheduler에 여러 가지 개선사항이 도입되었습니다. 이러한 개선사항을 통해 새로운 배경의 준수를 위해 실행 제한: 일반적으로 예약된 작업을 사용하여 현재 제한된 백그라운드 서비스나 암시적 브로드캐스트 수신기

JobScheduler 업데이트에는 다음이 포함됩니다.

  • 이제 작업 큐를 예약된 작업과 연결할 수 있습니다. 작업 항목을 추가하려면 작업의 큐에서 JobScheduler.enqueue() 작업이 실행 중일 때는 보류 중인 작업을 큐에서 제거하고 실행 중인 작업을 처리할 수 있습니다. 이 기능은 이전에는 상당히 많이 발생했던 많은 사용 사례를 처리합니다. 백그라운드 서비스, 특히 모바일 웹 앱을 구현하는 IntentService
  • Android 지원 라이브러리 26.0.0에는 IntentService와 동일한 기능을 제공하지만 Android 8.0(API 수준 26) 이상에서 실행될 때는 서비스 대신 작업을 사용하는 새로운 JobIntentService 클래스가 도입되었습니다.
  • 이제 전화를 걸 수 있습니다. JobInfo.Builder.setClipData() ClipData를 작업과 연결합니다. 이 옵션을 사용하면 이를 통해 URI 권한 부여를 작업과 연결할 수 있습니다. 권한은 Context.startService()에 전파될 수 있습니다. 작업 큐에서 인텐트와 함께 URI 권한 부여를 사용할 수도 있습니다.
  • 예약된 작업은 이제 몇 가지 새로운 제약 조건을 지원합니다. <ph type="x-smartling-placeholder">
    </ph>
    JobInfo.isRequireStorageNotLow()
    기기의 사용 가능한 저장용량이 부족하면 작업이 실행되지 않습니다.
    JobInfo.isRequireBatteryNotLow()
    배터리 잔량이 임계 수준이거나 그보다 낮으면 작업이 실행되지 않는데, 임계 수준에 이르면 기기에 Low battery warning 시스템 대화상자가 표시됩니다.
    NETWORK_TYPE_METERED
    대부분의 모바일 데이터 요금제와 같이, 작업을 위해 데이터 통신 네트워크 연결이 필요합니다.

사용자설정 데이터 스토어

Android 8.0(API 수준 26)에서는 환경설정에 맞게 데이터 스토어를 맞춤설정할 수 있습니다. 이는 앱이 환경설정을 클라우드나 로컬 데이터베이스에 저장하는 경우나 환경설정이 기기별로 다른 경우에 유용할 수 있습니다. 자세한 내용은 자세히 알아보려면 맞춤 데이터 스토어.

미디어 개선

VolumeShaper

새로운 VolumeShaper 클래스가 있습니다. 이 클래스를 사용하여 페이드 인, 페이드 아웃, 크로스 페이드 등의 짧은 자동 볼륨 전환을 수행할 수 있습니다. 자세한 내용은 VolumeShaper로 진폭 제어를 참고하세요.

오디오 포커스 개선

오디오 앱은 오디오 포커스를 요청하고 중단하는 방식으로 기기에서 오디오 출력을 공유합니다. 앱은 재생을 시작 또는 중지하거나 볼륨을 더킹하는 방식으로 포커스의 변화를 처리합니다. 새로운 AudioFocusRequest 클래스가 있습니다. 이 클래스를 requestAudioFocus()의 매개변수로 사용하면 앱에서 오디오 포커스의 변화를 처리할 때 새로운 기능인 자동 더킹지연된 포커스 게인을 사용할 수 있습니다.

미디어 지표

getMetrics() 메서드는 PersistableBundle를 반환합니다. 구성을 포함하는 객체 특성과 값의 맵으로 표현되는 성능 정보를 제공합니다. getMetrics() 메서드는 다음 미디어 클래스에 관해 정의됩니다.

측정항목은 각 인스턴스에 대해 개별적으로 수집되며 인스턴스 수명 동안 지속됩니다. 사용할 수 있는 측정항목이 없으면 메서드는 null을 반환합니다. 반환되는 실제 측정항목은 클래스에 따라 다릅니다.

MediaPlayer

Android 8.0(API 수준 26)부터 MediaPlayer는 DRM으로 보호된 자료와 HLS 샘플 수준 암호화된 미디어를 재생할 수 있습니다.

Android 8.0에는 새로운 오버로드된 seekTo() 명령어를 사용하면 제어할 수 있습니다. 여기에는 탐색 모드를 지정하는 두 번째 매개변수가 포함됩니다.

  • SEEK_PREVIOUS_SYNC는 미디어 위치를 지정된 시간 직전 또는 지정된 시간에 있는 데이터 소스와 연결된 동기화(또는 키) 프레임으로 이동합니다.
  • SEEK_NEXT_SYNC는 미디어 위치를 연결된 동기화 (또는 키) 프레임으로 이동합니다. 특정 시점 직후 또는 지정된 시간에 있는 데이터 소스로 교체할 수 있습니다.
  • SEEK_CLOSEST_SYNC는 미디어 위치를 지정된 시간에 가장 근접하거나 지정된 시간에 있는 데이터 소스와 연결된 동기화(또는 키) 프레임으로 이동합니다.
  • SEEK_CLOSEST는 미디어 위치를 지정된 시간에 가장 근접하거나 지정된 시간에 있는 데이터 소스와 연결된 프레임(동기화 또는 키 프레임이 아닐 수 있음)으로 이동합니다.

지속적으로 탐색하는 경우 앱은 SEEK_CLOSEST가 아닌 SEEK_ 모드를 사용해야 합니다. 이 모드는 비교적 느리게 실행되지만 더 정확할 수 있습니다.

MediaRecorder

  • 이제 MediaRecorder는 스트리밍에 유용한 MPEG2_TS 형식을 지원합니다.

    Kotlin

    mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_2_TS)

    자바

    mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_2_TS);

    MediaRecorder.OutputFormat 참고

  • 이제 MediaMuxer는 개수에 제한없이 오디오와 동영상 스트림을 처리할 수 있습니다. 더 이상 하나의 오디오 트랙이나 하나의 동영상 트랙으로 제한되지 않습니다. addTrack()를 사용하여 원하는 갯수만큼 트랙을 믹싱하세요.
  • MediaMuxer는 사용자가 정의한 프레임당 정보를 포함하는 하나 이상의 메타데이터 트랙을 추가할 수도 있습니다. 메타데이터의 형식은 애플리케이션에 의해 정의됩니다. 메타데이터 트랙은 MP4 컨테이너에만 지원됩니다.

메타데이터는 오프라인 처리에 유용할 수 있습니다. 예를 들어, 자이로 신호는 이 센서는 동영상 흔들림 보정을 실행하는 데 사용될 수 있습니다.

메타데이터 트랙을 추가할 때 트랙의 MIME 형식은 접두사로 시작해야 합니다. 'application/'으로 설정합니다. 메타데이터 쓰기는 동영상/오디오 데이터 쓰기와 동일하며, 단 데이터가 MediaCodec에서 가져오지 않습니다. 대신 앱은 ByteBuffer를 연결된 타임스탬프와 함께 writeSampleData() 메서드에 전달합니다. 타임스탬프는 동영상 및 오디오 트랙과 동일한 시간 베이스에 있어야 합니다.

생성된 MP4 파일은 섹션에 정의된 TextMetaDataSampleEntry를 사용합니다. ISOBMFF 12.3.3.2를 사용하여 메타데이터의 MIME 형식 신호를 보냅니다. MediaExtractor를 사용하여 메타데이터 트랙이 있는 파일을 추출할 경우, 이 메타데이터의 mime 형식은 MediaFormat으로 추출됩니다.

개선된 미디어 파일 액세스

이 <ph type="x-smartling-placeholder"></ph> 저장소 액세스 프레임워크 (SAF)를 통해 앱은 맞춤 DocumentsProvider: 파일에 대한 액세스 권한을 제공할 수 있습니다. 데이터를 다른 앱에 할당할 수도 있습니다 실제로 문서 제공자가 파일에 대한 액세스를 제공할 수도 또는 네트워크 스토리지에 상주하거나 미디어 전송 프로토콜 (MTP).

그러나 대용량 미디어 파일을 원격 데이터 소스에서 액세스하는 경우 약간의 문제가 발생합니다.

  • 미디어 플레이어는 문서 제공자의 파일에 대해 검색 가능한 액세스를 요구합니다. 대용량 미디어 파일이 원격 데이터 소스에 있는 경우, 문서 제공자는 모든 데이터를 미리 가져와서 스냅샷 파일 설명자를 생성해야 합니다. 미디어 플레이어는 파일 설명자가 없는 파일은 재생할 수 없으므로, 문서 제공자가 파일 다운로드를 마칠 때까지는 재생을 시작할 수 없습니다.
  • 사진 앱과 같은 미디어 수집 관리자는 일련의 범위 지정 옵션을 통해 외부 SD 카드에 저장된 미디어에 연결하도록 URI에 액세스합니다. 폴더를 만들 수 있습니다 이 액세스 패턴은 미디어에서 대량으로 이루어지는 이동, 복사, 삭제 등의 작업 속도를 현저히 떨어뜨립니다.
  • 미디어 수집 관리자는 URI가 주어진 문서의 위치를 결정할 수 없습니다. 이로 인해 이러한 유형의 앱에서는 사용자가 콘텐츠를 선택할 수 없으며, 미디어 파일을 저장할 위치를 지정합니다.

Android 8.0은 저장소 액세스를 개선하여 이러한 각 문제를 해결합니다. 프레임워크입니다.

사용자설정 문서 제공자

Android 8.0부터는 저장소 액세스 프레임워크(SAF)를 통해 맞춤 문서 제공자가 원격 데이터 소스에 있는 파일에 대해 검색 가능한 파일 설명자를 생성할 수 있습니다. SAF는 파일을 열어 기본 검색 가능한 파일 설명자를 가져올 수 있습니다. 그런 다음 SAF는 개별 바이트 요청을 문서로 전달합니다. 제공업체 이 기능을 통해 문서 제공자는 전체 파일을 미리 캐싱하는 대신 미디어 플레이어 앱이 요청했던 정확한 바이트 범위를 반환할 수 있습니다.

이 기능을 사용하려면 새 StorageManager.openProxyFileDescriptor() 메서드를 호출해야 합니다. 이 openProxyFileDescriptor() 메서드는 ProxyFileDescriptorCallback 객체를 콜백으로 허용합니다. SAF는 클라이언트 애플리케이션이 서버에서 파일 작업을 수행할 때마다 콜백을 파일 설명자를 반환합니다.

직접 문서 액세스

Android 8.0(API 수준 26)부터 getDocumentUri() 메서드를 사용하여 주어진 mediaUri와 동일한 문서를 참조하는 URI를 가져올 수 있습니다. 하지만 반환되는 URI는 DocumentsProvider의 지원을 받으므로 미디어 수집 관리자가 범위가 지정된 디렉터리의 트리를 거칠 필요 없이 문서에 직접 액세스할 수 있습니다. 그 결과 미디어 관리자는 문서에서 파일 작업을 훨씬 더 빠르게 수행할 수 있습니다.

주의: getDocumentUri() 메서드는 미디어 파일만 찾습니다. 앱에 권한을 부여하지 않으며 해당 파일에 액세스할 수 있는 권한이 있어야 합니다. 미디어 파일에 대한 액세스 권한을 얻는 방법을 자세히 알아보려면 참조 문서를 참고하세요.

문서의 경로

Android 8.0(API 수준 26)에서 저장소 액세스 프레임워크를 사용할 때 DocumentsContractDocumentsProvider 클래스에서 모두 사용 가능한 findDocumentPath() 메서드를 사용하여 문서의 ID가 지정된 파일 시스템의 루트에서 경로를 확인할 수 있습니다. 이 메서드는 DocumentsContract.Path 객체. 파일 시스템에서 동일한 문서에 대해 정의된 경로가 여러 개 있는 경우, 이 메서드는 지정된 ID를 가진 문서에 연결하기 위해 가장 자주 사용되는 경로를 반환합니다.

이 기능은 다음과 같은 상황에서 특히 유용합니다.

  • 앱이 특정 문서의 위치를 표시하는 'save as' 대화상자를 사용합니다.
  • 앱이 검색 결과 뷰에 폴더를 표시하며 하위 항목을 로드해야 함 사용자가 선택한 경우 특정 폴더 내에 있는 문서를 찾을 수 있습니다. 있습니다.

참고: 앱이 경로에 있는 문서 중 일부에만 액세스할 권한이 있는 경우, findDocumentPath()의 반환 값은 앱이 액세스할 수 있는 폴더와 문서만 포함합니다.

오디오 재생 모니터링

AudioManager 시스템 서비스는 활성 AudioPlaybackConfiguration 객체 목록을 유지 관리하며, 각 객체에는 특정 오디오 재생 세션에 관한 정보가 포함됩니다. 앱은 getActivePlaybackConfigurations()를 호출하여 현재 활성 구성 집합을 검색할 수 있습니다.

Android 8.0(API 수준 26)부터 하나 이상의 AudioPlaybackConfiguration 객체가 변경될 때 앱에 알리는 콜백을 등록할 수 있습니다. 이렇게 하려면 registerAudioPlaybackCallback()를 호출하여 AudioManager.AudioPlaybackCallbackAudioManager.AudioPlaybackCallback 클래스에는 다음이 포함됩니다. onPlaybackConfigChanged() 메서드로, 오디오가 재생될 때 시스템에서 호출합니다. 변경할 수 있습니다.

연결

Wi-Fi Aware

Android 8.0(API 수준 26)에서는 NAN(Neighbor Awareness Networking) 사양을 기반으로 하는 Wi-Fi Aware 지원이 추가됩니다. 적절한 Wi-Fi Aware 하드웨어가 기기에 있다면, 앱과 인접 기기들이 인터넷 액세스 지점 없이도 Wi-Fi를 통해 검색과 통신을 수행할 수 있습니다. 우리는 하드웨어와 가능한 한 빨리 Wi-Fi Aware 기술을 기기에 도입할 것입니다. 대상 Wi-Fi Aware를 앱에 통합하는 방법에 관한 자세한 내용은 Wi-Fi Aware를 참고하세요.

블루투스

Android 8.0(API 수준 26)에서는 다음과 같은 기능을 추가하여 플랫폼의 블루투스 지원을 강화합니다.

  • 곡-라이브러리 탐색이 가능한 AVRCP 1.4 표준 지원.
  • BLE(Bluetooth Low-Energy) 5.0 표준 지원.
  • Sony LDAC 코덱을 블루투스 스택에 통합.

호환 기기 페어링

Android 8.0 (API 레벨 26)은 페어링 요청 대화상자를 블루투스, BLE, Wi-Fi가 있습니다. 자세한 내용은 호환 기기 페어링을 탭합니다.

Android에서 Bluetooth를 사용하는 방법에 관한 자세한 내용은 블루투스 가이드를 참조하세요. 대상 블루투스 변경 사항이 있는 경우 Android 8.0 (API 레벨 26)에만 적용되는 경우 Bluetooth 섹션에서 Android 8.0 동작 변경사항 페이지.

공유

스마트 공유

Android 8.0(API 수준 26)은 사용자의 맞춤설정된 공유 환경설정에 대한 정보를 획득하여 공유할 앱의 각 콘텐츠 유형에 대해 더 정확히 파악합니다. 예를 들어 사용자가 영수증 사진을 찍으면 Android 8.0이 지출 추적 앱을 추천할 수 있고, 사용자가 셀카를 찍으면 소셜 미디어 앱이 이미지를 더욱 효과적으로 처리할 수 있습니다. Android 8.0은 이 모든 것을 자동으로 학습하여 사용자의 패턴을 학습한 후 맞춤설정할 수 있습니다.

스마트 공유는 image 이외의 콘텐츠 유형에서 작동합니다. 예를 들면 다음과 같습니다. audio님, video님, text님, URL님 기타

스마트 공유를 사용 설정하려면 ArrayList를 최대 3개까지 추가하세요. 문자열 주석을 추가하는 것입니다. 주석은 콘텐츠의 주요 구성 요소나 항목을 설명하는 내용이어야 합니다. 다음 코드 예는 인텐트에 주석을 추가하는 방법을 보여줍니다.

Kotlin

val annotations: ArrayList<String> = arrayListOf(
        "topic1",
        "topic2",
        "topic3"
)

intent.putStringArrayListExtra(
        Intent.EXTRA_CONTENT_ANNOTATIONS,
        annotations
)

자바

ArrayList<String> annotations = new ArrayList<>();

annotations.add("topic1");
annotations.add("topic2");
annotations.add("topic3");

intent.putStringArrayListExtra(
    Intent.EXTRA_CONTENT_ANNOTATIONS,
    annotations
);

스마트 공유 주석에 대한 자세한 내용은 다음을 참고하세요. EXTRA_CONTENT_ANNOTATIONS

텍스트 분류기

호환되는 기기에서 앱은 새 텍스트 분류기를 사용하여 문자열이 알려진 분류기 항목 유형과 일치하는지 확인하고 추천 선택 대안을 가져올 수 있습니다. 시스템이 인식하는 엔터티에는 주소, URL, 전화번호, 이메일 주소 등이 포함됩니다. 자세한 내용은 TextClassifier

접근성

Android 8.0(API 수준 26)은 자체 접근성 서비스를 만드는 개발자를 위해 다음과 같은 몇 가지 새로운 접근성 기능을 지원합니다.

앱의 접근성을 높이는 방법에 대해 자세히 알아보려면 접근성을 참고하세요.

보안 및 개인 정보 보호

권한

Android 8.0 (API 수준 26)에는 전화 통신과 관련된 몇 가지 새로운 권한이 도입되었습니다.

  • ANSWER_PHONE_CALLS 권한을 사용하면 앱이 프로그래매틱 방식으로 수신 전화를 받을 수 있습니다. 앱에서 걸려오는 전화를 처리하려면 acceptRingingCall() 메서드를 사용하면 됩니다.
  • READ_PHONE_NUMBERS 권한이 있으면 앱에서 기기에 저장된 전화번호를 읽을 수 있습니다.

이러한 권한은 모두 위험한 그리고 둘 다 PHONE 권한 그룹입니다.

새로운 Account Access 및 Discovery API

Android 8.0(API 수준 26)에서는 앱이 사용자 계정에 액세스하는 방식을 여러 가지로 개선합니다. 인증자는 자신이 관리하는 계정을 어떤 앱에는 숨기고 어떤 앱에는 표시할지 여부를 결정하기 위해 고유한 정책을 사용할 수 있습니다. Android 시스템은 특정 계정에 액세스할 수 있는 애플리케이션을 추적합니다.

이전 버전의 Android에서 사용자 계정 목록을 추적하려는 앱은 관련 없는 유형의 계정을 포함하여 모든 계정을 업데이트해야 했습니다. Android 8.0에서는 앱이 계정 변경 사항을 수신해야 하는 계정 유형 목록을 지정할 수 있는 addOnAccountsUpdatedListener(android.accounts.OnAccountsUpdateListener, android.os.Handler, boolean, java.lang.String[]) 메서드를 추가합니다.

API 변경사항

AccountManager는 인증자가 계정을 볼 수 있는 앱을 관리하도록 도와주는 6개의 새로운 메서드를 제공합니다.

Android 8.0 (API 수준 26)에는 가시성을 지정하기 위해 두 개의 특수 Package Name 값이 도입됨 애플리케이션의 특정 레벨을 setAccountVisibility(android.accounts.Account, java.lang.String, int) 메서드를 사용하여 축소하도록 요청합니다. PACKAGE_NAME_KEY_LEGACY_VISIBLE 가시성 값은 GET_ACCOUNTS 권한이 있고 Android 8.0보다 낮은 Android 버전을 타겟팅하거나 서명이 Android 버전을 타겟팅하는 인증자와 일치하는 앱에 적용됩니다. PACKAGE_NAME_KEY_LEGACY_NOT_VISIBLE 기본 공개 상태 값을 제공합니다. 이전에 설정되지 않았고 PACKAGE_NAME_KEY_LEGACY_VISIBLE이(가) 다음 제외: 있습니다.

새로운 Account Access 및 Discovery API에 대한 자세한 정보는 AccountManagerOnAccountsUpdateListener를 참고하세요.

테스트

계측 테스트

Android 8.0 (API 수준 26)은 앱의 도구 작동 테스트입니다.

비기본 앱 프로세스에 대해 실행

이제 특정 계측 테스트를 실행하도록 지정할 수 있습니다. 프로세스를 하지 않을 수도 있습니다. 이 구성은 서로 다른 프로세스에서 실행되는 여러 활동이 앱에 포함되어 있습니다.

비기본 프로세스 계측을 정의하려면 매니페스트 파일로 이동한 다음 원하는 <instrumentation> 요소로 이동합니다. android:targetProcess 속성을 추가하고 값을 다음 중 하나로 설정합니다.

  • 특정 프로세스의 이름.
  • 쉼표로 구분된 프로세스 이름 목록.
  • 계측 실행을 허용하는 와일드 카드 ("*") 에 지정된 패키지의 코드를 실행하는 모든 시작된 프로세스에 대해 android:targetPackage 속성

계측 테스트가 실행되는 동안 getProcessName()를 호출하여 어떤 프로세스가 테스트 중인지 확인할 수 있습니다.

테스트 중에 결과 보고

이제 계측 테스트가 실행되는 동안 결과를 보고할 수 있습니다. addResults()를 호출하면 됩니다.

테스트용 가짜 인텐트

앱의 UI를 위한 격리되고 독립적인 UI 테스트를 더 쉽게 Android 8.0 (API 레벨 26)에서는 onStartActivity() 메서드를 사용하여 지도 가장자리에 패딩을 추가할 수 있습니다. Instrumentation.ActivityMonitor 클래스의 맞춤 서브클래스에서 이 메서드를 재정의하여 테스트 클래스가 호출하는 특정 인텐트를 처리합니다.

테스트 클래스가 인텐트를 호출할 때, 이 메서드는 인텐트 자체를 실행하는 대신 스텁 Instrumentation.ActivityResult 객체를 반환합니다. 테스트에 이 가짜 인텐트 로직을 사용하면 액티비티가 다른 액티비티나 전혀 다른 앱으로 전달하는 인텐트를 준비하고 처리하는 방식에 집중할 수 있습니다.

런타임 및 도구

플랫폼 최적화

Android 8.0 (API 레벨 26)은 다양한 성능 개선이 가능합니다. 이러한 최적화에는 동시 압축 가비지 수집, 메모리 사용 효율성 향상, 코드 위치 등이 포함됩니다.

이러한 최적화를 통해 부팅 시간이 단축되고 두 VM 모두에서 성능이 향상됩니다. 실행할 수 있습니다.

업데이트된 Java 언어 지원

Android 8.0 (API 레벨 26)은 여러 개의 추가적인 OpenJDK Java API에 대한 지원을 추가합니다.

새로 추가된 API 참조 문서를 확인하세요.

Android 스튜디오에서 Java 8 언어 기능을 사용하려면 최신 미리보기 버전을 다운로드해야 합니다.

업데이트된 ICU4J Android 프레임워크 API

Android 8.0(API 수준 26)은 앱 개발자가 android.icu 패키지에서 사용할 수 있도록 ICU4J API의 하위 집합인 ICU4J Android 프레임워크 API를 확장합니다. 이 API는 현지화 데이터를 사용하여 이에 따라 APK 사용 공간을 줄일 수 있습니다. 따라서 APK를 APK의 ICU4J 라이브러리

표 1. Android에서 사용되는 ICU, CLDR, 유니코드 버전

Android API 레벨 ICU 버전 CLDR 버전 유니코드 버전
Android 7.0 (API 레벨 24), Android 7.1 (API 레벨 25) 56 28 8.0
Android 8.0(API 수준 26) 58.2 30.0.3 9.0

Android의 국제화에 관한 자세한 내용은 ICU4J 지원에 대한 자세한 내용은 를 참조하세요. Android의 다국어 지원

Android 엔터프라이즈

Android 8.0(API 수준 26)을 실행하는 기기에 새로운 엔터프라이즈 기능과 API가 도입되었습니다. 주요 특징은 다음과 같습니다.

  • 완벽히 관리되는 기기의 작업 프로필을 통해 기업은 개인 데이터와 작업을 둘 다 관리하면서도 분리할 수 있습니다.
  • API 위임을 통해 기기 소유자와 프로필 소유자가 앱 관리를 다른 애플리케이션에 할당할 수 있습니다.
  • 프로비저닝 흐름에서 사용자 환경 개선은 설정 시간을 줄여줍니다(새로운 맞춤설정 옵션 포함).
  • 블루투스, Wi-Fi, 백업, 보안을 위한 새로운 컨트롤을 통해 기업에서 더 많은 기기를 관리할 수 있습니다. 네트워크 활동 로그 기록은 기업에서 문제를 추적하도록 도와줍니다.

이러한 API와 기타 새로운 Android Enterprise API 및 기능에 관해 자세히 알아보려면 엔터프라이즈의 Android를 참조하세요.