개발자용 Android 7.0

Android 7.0 Nougat에는 사용자와 개발자를 위한 다양한 새로운 기능이 도입되었습니다. 이 문서에서는 개발자를 위한 새로운 기능을 소개합니다.

Android 7.0 동작 변경사항을 확인하여 플랫폼 변경사항이 앱에 영향을 줄 수 있는 분야에 관해 알아보세요.

Android 7.0의 소비자 기능에 관해 자세히 알아보려면 www.android.com을 방문하세요.

다중 창 지원

Android 7.0에서는 요청이 많은 새로운 멀티태스킹 기능인 멀티 윈도우 지원이 플랫폼에 도입됩니다.

이제 사용자가 화면에서 두 개의 앱을 동시에 열 수 있습니다.

  • Android 7.0을 실행하는 스마트폰과 태블릿에서 사용자는 화면 분할 모드로 두 앱을 나란히 또는 상하로 실행할 수 있습니다. 사용자는 앱 사이에 있는 구분선을 드래그하여 앱 크기를 조절할 수 있습니다.
  • Android TV 기기에서 앱은 PIP 모드로 배치될 수 있으므로 사용자가 다른 앱을 탐색하거나 상호작용하는 동안에도 계속해서 콘텐츠를 표시할 수 있습니다.
화면 분할 모드에서 모바일 실행 앱

그림 1. 화면 분할 모드에서 실행되는 앱

특히 태블릿 및 기타 대형 화면 기기에서 멀티 윈도우 지원을 통해 새로운 방식으로 사용자를 참여시킬 수 있습니다. 또한 앱에서 드래그 앤 드롭을 사용 설정하여 사용자가 편리하게 앱에서 콘텐츠를 드래그하거나 앱에서 콘텐츠를 드래그할 수 있도록 하여 사용자 환경을 개선할 수 있습니다.

앱에 멀티 윈도우 지원을 추가하고 멀티 윈도우 표시를 처리하는 방법을 구성하는 방법은 간단합니다. 예를 들어 활동의 최소 허용 크기를 지정하여 사용자가 활동의 크기를 지정된 크기보다 작게 조절하지 못하게 할 수 있습니다. 앱의 멀티 윈도우 표시를 사용 중지할 수도 있습니다. 이렇게 하면 시스템은 앱을 전체 화면 모드에서만 표시합니다.

자세한 내용은 멀티 윈도우 지원 개발자 문서를 참고하세요.

알림 향상

Android 7.0에서는 알림을 더 쉽고 빠르게 사용할 수 있도록 다시 디자인했습니다. 몇 가지 변경 사항은 다음과 같습니다.

  • 템플릿 업데이트: 히어로 이미지와 아바타를 새롭게 강조하기 위해 알림 템플릿을 업데이트하고 있습니다. 개발자는 최소한의 코드 조정만으로 새로운 템플릿을 활용할 수 있습니다.
  • 메시지 스타일 맞춤설정: MessagingStyle 클래스를 사용하여 알림과 연결된 더 많은 사용자 인터페이스 라벨을 맞춤설정할 수 있습니다. 메시지, 대화 제목, 콘텐츠 뷰를 구성할 수 있습니다.
  • 알림을 번들로 묶음: 시스템에서 메시지를 메시지 주제 등을 기준으로 그룹화하고 그룹을 표시할 수 있습니다. 사용자는 이 그룹에 대해 닫기 또는 보관처리와 같은 작업을 적절히 수행할 수 있습니다. Android Wear용 알림을 구현한 적이 있다면 이미 이 모델에 익숙할 것입니다.
  • 바로 답장: 실시간 커뮤니케이션 앱의 경우 Android 시스템에서 인라인 답장을 지원하므로 사용자가 알림 인터페이스 내에서 직접 SMS 또는 문자 메시지에 빠르게 응답할 수 있습니다.
  • 맞춤 뷰: 두 가지 새로운 API를 사용하면 알림에 맞춤 뷰를 사용할 때 알림 헤더 및 작업과 같은 시스템 장식을 활용할 수 있습니다.
묶음 메시지 알림을 표시하는 휴대기기
단일 메시지 알림을 표시하는 휴대기기
알림 인터페이스 내에 인라인 메시지 답장을 표시하는 휴대기기

그림 2. 번들 알림 및 바로 답장

새로운 기능을 구현하는 방법은 알림 가이드를 참고하세요.

프로필 가이드 방식의 JIT/AOT 컴파일

Android 7.0에서는 ART에 프로파일링되는 코드가 있는 JIT (Just in Time) 컴파일러를 추가했습니다. 이를 통해 Android 앱이 실행되는 동안 성능을 지속적으로 개선할 수 있습니다. JIT 컴파일러는 ART의 현재 AOT (Ahead-Of-Time) 컴파일러를 보완하고 런타임 성능을 개선하고 저장공간을 절약하고 앱 업데이트와 시스템 업데이트 속도를 높입니다.

프로필 기반 컴파일을 사용하면 ART가 실제 사용법과 기기의 조건에 따라 각 앱의 AOT/JIT 컴파일을 관리할 수 있습니다. 예를 들어 ART는 각 앱의 핫 메서드 프로필을 유지하고 최상의 성능을 위해 이러한 메서드를 미리 컴파일하고 캐시할 수 있습니다. 앱의 다른 부분은 실제로 사용될 때까지 컴파일되지 않은 상태로 유지됩니다.

프로필 기반 컴파일은 앱의 주요 부분의 성능을 개선하는 것 외에도 연결된 바이너리를 포함하여 앱의 전체 RAM 공간을 줄이는 데 도움이 됩니다. 이 기능은 저용량 메모리 기기에 특히 중요합니다.

ART는 기기 배터리에 미치는 영향을 최소화하는 방식으로 프로필 기반 컴파일을 관리합니다. 기기가 유휴 상태이고 충전 중일 때만 사전 컴파일을 실행하여 이러한 작업을 미리 실행하여 시간과 배터리를 절약합니다.

빠른 앱 설치 경로

ART JIT 컴파일러의 가장 실질적인 이점 중 하나는 앱 설치 및 시스템 업데이트 속도입니다. Android 6.0에서 최적화하고 설치하는 데 몇 분이 걸리는 대용량 앱도 이제 단 몇 초 만에 설치할 수 있습니다. 또한 더 이상 최적화 단계가 없으므로 시스템 업데이트도 더 빠릅니다.

이동 중 잠자기 모드...

Android 6.0에서는 기기가 테이블 위나 창에 앉아 있을 때와 같이 기기가 유휴 상태일 때 앱의 CPU 및 네트워크 활동을 지연하여 배터리를 절약하는 시스템 모드인 잠자기를 도입했습니다.

이제 Android 7.0에서는 잠자기 기능이 한 단계 더 발전하여 이동 중에 배터리를 절약합니다. 일정 시간 동안 화면이 꺼져 있고 기기의 연결이 해제되어 있으면 잠자기는 친숙한 CPU 및 네트워크 제한사항의 하위 집합을 앱에 적용합니다. 즉, 사용자는 기기를 주머니에 휴대하고 다닐 때도 배터리를 절약할 수 있습니다.

잠자기에서 첫 번째 수준의 시스템 활동 제한을 적용하여 배터리 수명을 개선하는 방법을 보여주는 그림

그림 3. 이제 잠자기에서는 기기가 정지 상태가 아니더라도 배터리 수명을 개선하기 위해 제한사항을 적용합니다.

기기의 배터리가 켜져 있는 동안 화면이 꺼지면 잠시 후에 잠자기는 네트워크 액세스를 제한하고 작업 및 동기화를 연기합니다. 짧은 유지보수 기간 동안 애플리케이션의 네트워크 액세스가 허용되고 지연된 작업/동기화가 실행됩니다. 화면을 켜거나 기기를 전원에 연결하면 기기가 잠자기 모드가 해제됩니다.

기기가 다시 일정 시간 동안 배터리가 켜진 상태로 고정되면 잠자기 모드는 PowerManager.WakeLock, AlarmManager 알람, GPS/Wi-Fi 검색에 전체 CPU 및 네트워크 제한을 적용합니다.

앱을 잠자기에 맞게 조정하는 권장사항은 기기의 이동 여부와 관계없이 동일하므로 잠자기를 원활하게 처리하도록 앱을 이미 업데이트했다면 설정이 완료된 것입니다. 그렇지 않다면 지금 앱을 잠자기에 맞게 조정하세요.

Project Svelte: 백그라운드 최적화

Project Svelte는 생태계의 모든 Android 기기에서 시스템 및 앱의 RAM 사용을 최소화하기 위한 지속적인 노력입니다. Android 7.0에서 ProjectSvelte는 앱이 백그라운드에서 실행되는 방식을 최적화하는 데 초점을 맞추고 있습니다.

백그라운드 처리는 대부분의 앱에서 필수적인 부분입니다. 올바르게 처리하면 즉각적이고 빠르며 컨텍스트를 인지하는 탁월한 사용자 환경을 만들 수 있습니다. 백그라운드 처리가 올바르게 처리되지 않으면 RAM과 배터리를 불필요하게 소비하고 다른 앱의 시스템 성능에 영향을 미칠 수 있습니다.

Android 5.0부터 사용자에게 편리한 방식으로 백그라운드 작업을 실행하는 데 JobScheduler가 선호되었습니다. 앱은 메모리, 전력, 연결 조건에 따라 시스템을 최적화하면서 작업을 예약할 수 있습니다. JobScheduler는 제어 기능과 간편성을 제공하며, 저희는 모든 앱에서 이것을 사용하기를 바랍니다.

또 다른 좋은 옵션은 Google Play 서비스의 일부인 GCMNetworkManager로, 기존 버전의 Android와 호환되는 유사한 작업 예약을 제공합니다.

Google은 더 많은 사용 사례를 충족하기 위해 JobSchedulerGCMNetworkManager를 계속 확장하고 있습니다. 예를 들어 Android 7.0에서는 콘텐츠 제공자의 변경사항에 따라 백그라운드 작업을 예약할 수 있습니다. 이와 동시에 Google에서는 특히 메모리가 부족한 기기에서 시스템 성능을 저하시킬 수 있는 일부 오래된 패턴에 대한 지원을 중단하기 시작했습니다.

Android 7.0에서는 흔히 사용되는 세 가지 암시적 브로드캐스트인 CONNECTIVITY_ACTION, ACTION_NEW_PICTURE, ACTION_NEW_VIDEO를 삭제합니다. 한 번에 여러 앱의 백그라운드 프로세스를 절전 모드에서 해제하여 메모리와 배터리를 과도하게 소모시킬 수 있기 때문입니다. 앱이 이러한 알림을 수신하는 경우 대신 Android 7.0을 활용하여 JobScheduler 및 관련 API로 이전하세요.

자세한 내용은 백그라운드 최적화 문서를 참고하세요.

SurfaceView

Android 7.0은 SurfaceView 클래스에 동기식 이동을 제공하여 특정 경우에 TextureView보다 더 나은 배터리 성능을 제공합니다. 동영상 또는 3D 콘텐츠를 렌더링할 때 스크롤 및 애니메이션 동영상 위치가 있는 앱은 TextureView보다 SurfaceView에서 더 적은 전력을 사용합니다.

SurfaceView 클래스는 앱 창 콘텐츠와 별도로 전용 하드웨어에서 합성되므로 화면에서 배터리를 더 효율적으로 합성할 수 있습니다. 따라서 TextureView보다 적은 수의 중간 복사본이 생성됩니다.

이제 SurfaceView 객체의 콘텐츠 위치가 포함하는 앱 콘텐츠와 동기식으로 업데이트됩니다. 이러한 변경으로 인한 한 가지 결과, SurfaceView에서 재생되는 동영상의 간단한 번역이나 배율로는 동영상이 이동할 때 더 이상 뷰 옆에 검은색 막대가 생성되지 않습니다.

Android 7.0부터는 TextureView 대신 SurfaceView를 사용하여 전원을 절약하는 것이 좋습니다.

데이터 절약 모드

설정의 데이터 절약 모드

그림 4. 설정의 데이터 절약 모드

휴대기기의 수명 동안 모바일 데이터 요금제의 비용이 기기 자체의 비용을 초과하는 경우가 많습니다. 많은 사용자에게 모바일 데이터는 아끼고자 하는 값비싼 자원입니다.

Android 7.0에서는 새로운 시스템 서비스인 데이터 절약 모드가 도입되었습니다. 데이터 절약 모드는 로밍 시, 결제 주기가 끝날 무렵, 소액 선불 데이터 팩 사용 시 앱의 모바일 데이터 사용량을 줄이는 데 도움이 됩니다. 데이터 절약 모드를 통해 사용자는 앱이 모바일 데이터를 사용하는 방식을 제어할 수 있으며 데이터 절약 모드가 켜져 있을 때 개발자가 더 효율적인 서비스를 제공할 수 있습니다.

사용자가 설정에서 데이터 절약 모드를 사용 설정하고 기기가 데이터 전송량 제한이 있는 네트워크를 사용 중인 경우 시스템은 백그라운드 데이터 사용을 차단하고 가능하면 스트리밍의 비트 전송률을 제한하거나 이미지 품질을 낮추거나 낙관적 사전 캐싱을 지연시키는 등 가능하면 포그라운드에서 데이터를 덜 사용하도록 앱에 신호를 보냅니다. 사용자는 데이터 절약 모드가 사용 설정된 경우에도 특정 앱이 데이터 전송량 제한이 있는 백그라운드 데이터 사용을 허용하도록 허용할 수 있습니다.

Android 7.0은 ConnectivityManager를 확장하여 사용자의 데이터 절약 모드 환경설정을 검색하고 환경설정 변경사항을 모니터링하는 방법을 앱에 제공합니다. 모든 앱은 사용자가 데이터 절약 모드를 사용 설정했는지 확인하고 포그라운드 및 백그라운드 데이터 사용량을 제한하도록 노력해야 합니다.

Vulkan API

Android 7.0은 새로운 3D 렌더링 API인 VulkanTM을 플랫폼에 통합합니다. OpenGLTM ES와 마찬가지로 Vulkan은 Khronos Group에서 관리하는 3D 그래픽 및 렌더링을 위한 개방형 표준입니다.

Vulkan은 처음부터 드라이버의 CPU 오버헤드를 최소화하도록 설계되었으며, 애플리케이션이 GPU 작업을 더욱 직접적으로 제어할 수 있게 해줍니다. 또한 Vulkan은 여러 스레드가 명령어 버퍼 생성과 같은 작업을 한 번에 실행할 수 있도록 하여 더 나은 병렬화를 지원합니다.

Vulkan 개발 도구와 라이브러리가 Android 7.0 SDK에 출시됩니다. 여기에는 다음이 포함됩니다.

  • 헤더
  • 유효성 검사 계층(디버그 라이브러리)
  • SPIR-V 셰이더 컴파일러
  • SPIR-V 런타임 셰이더 컴파일 라이브러리

Vulkan은 Nexus 5X, Nexus 6P, Nexus Player와 같이 Vulkan 지원 하드웨어가 있는 기기의 앱에서만 사용할 수 있습니다. Google은 가능한 한 빨리 Vulkan을 더 많은 기기에 제공하기 위해 파트너와 긴밀히 협력하고 있습니다.

자세한 내용은 API 문서를 참고하세요.

Quick Settings Tile API

알림 창의 빠른 설정 타일

그림 5. 알림 창의 빠른 설정 타일

빠른 설정은 알림 창에서 직접 키 설정과 작업을 노출하는 데 널리 사용되는 간단한 방법입니다. Android 7.0에서는 더욱 유용하고 편리한 설정을 위해 빠른 설정의 범위가 확장되었습니다.

사용자가 왼쪽이나 오른쪽으로 스와이프하여 페이지로 나눈 디스플레이 영역에서 액세스할 수 있는 빠른 설정 타일을 위한 공간을 더 추가했습니다. 또한 사용자가 빠른 설정 타일이 표시되는 내용과 표시되는 위치를 제어할 수 있도록 했습니다. 사용자는 타일을 드래그 앤 드롭하는 것만으로 타일을 추가하거나 이동할 수 있습니다.

또한, Android 7.0에는 개발자가 앱의 키 컨트롤 및 작업에 쉽게 액세스할 수 있도록 고유한 빠른 설정 타일을 정의할 수 있는 새로운 API가 추가되었습니다.

빠른 설정 타일은 긴급하게 필요하거나 자주 사용되는 컨트롤 또는 작업을 위해 예약되어 있으며, 앱을 실행하기 위한 바로가기로 사용해서는 안 됩니다.

카드를 정의한 후에는 사용자에게 표시할 수 있으며, 사용자는 드래그 앤 드롭으로 빠른 설정에 카드를 추가할 수 있습니다.

앱 카드 만들기에 관한 자세한 내용은 Tile 참조 문서를 확인하세요.

번호 차단

Android 7.0은 이제 플랫폼에서 번호 차단을 지원하며 서비스 제공업체가 차단 번호 목록을 유지할 수 있는 프레임워크 API를 제공합니다. 기본 SMS 앱, 기본 전화 앱, 이동통신사 앱은 차단된 번호 목록에서 읽고 쓸 수 있습니다. 다른 앱은 이 목록에 액세스할 수 없습니다.

Android는 번호 차단을 플랫폼의 표준 기능으로 만들어 앱이 광범위한 기기에서 번호 차단을 지원하는 일관된 방법을 제공합니다. 앱에서 활용할 수 있는 기타 이점은 다음과 같습니다.

  • 통화에서 차단된 번호가 텍스트에서도 차단됩니다.
  • 차단된 번호는 재설정 시에도 백업 및 복원 기능을 통해 기기에서 유지될 수 있습니다.
  • 여러 앱이 동일한 차단된 번호 목록을 사용할 수 있습니다.

또한 Android를 통한 이동통신사 앱 통합은 이동통신사가 기기에서 차단된 번호 목록을 읽고 서비스 측 차단을 실행하여 원치 않는 전화와 문자가 VOIP 엔드포인트 또는 착신전환 전화와 같은 매체를 통해 사용자에게 도달하는 것을 막을 수 있음을 의미합니다.

자세한 내용은 BlockedNumberContract 참조 문서를 확인하세요.

통화 스크리닝

Android 7.0에서는 기본 전화 앱이 수신 통화를 스크리닝하도록 허용합니다. 전화 앱은 전화 앱이 수신 전화의 Call.Details에 따라 다음과 같은 다양한 작업을 실행할 수 있도록 새로운 CallScreeningService를 구현하여 이 작업을 실행합니다.

  • 수신 통화 거절
  • 통화를 통화 기록에 허용하지 않음
  • 통화 알림을 사용자에게 표시하지 않음

자세한 내용은 CallScreeningService 참조 문서를 확인하세요.

다중 로케일 지원, 더 많은 언어 지원 추가

두 가지 언어로 된 사용 사례를 더 효과적으로 지원하기 위해 이제 Android 7.0에서는 사용자가 설정에서 여러 언어를 선택할 수 있습니다. 앱은 새로운 API를 사용하여 사용자의 언어를 가져온 후 검색결과를 여러 언어로 표시하고 사용자가 이미 알고 있는 언어로는 웹페이지를 번역하지 않는 등 더 정교한 사용자 환경을 다국어 사용자에게 제공할 수 있습니다.

Android 7.0에서는 다중 언어 지원과 함께 사용자가 사용할 수 있는 언어의 범위도 확장되었습니다. 영어, 스페인어, 프랑스어, 아랍어 등 일반적으로 사용되는 언어에 대해 각각 25가지 이상의 변형을 제공합니다. 또한 100개가 넘는 새로운 언어를 부분적으로 지원합니다.

앱은 LocaleList.GetDefault()를 호출하여 사용자가 설정한 언어 목록을 가져올 수 있습니다. 더 많은 언어를 지원하기 위해 Android 7.0에서는 리소스 확인 방식을 변경하고 있습니다. 새로운 리소스 확인 로직에서 앱이 예상대로 작동하는지 테스트하고 확인해야 합니다.

새로운 리소스 확인 동작과 따라야 할 권장사항을 알아보려면 다국어 지원을 참조하세요.

새 이모티콘

Android 7.0에는 피부색 그림 이모티콘과 변형 선택기 지원을 비롯한 추가적인 그림 이모티콘과 그림 이모티콘 관련 기능이 도입되었습니다. 앱에서 그림 이모티콘을 지원하는 경우 아래 가이드라인에 따라 이러한 그림 이모티콘 관련 기능을 활용하세요.

  • 그림 이모티콘을 삽입하기 전에 기기에 그림 이모티콘이 포함되어 있는지 확인하세요. 시스템 글꼴에 어떤 이모티콘이 있는지 확인하려면 hasGlyph(String) 메서드를 사용하세요.
  • 그림 이모티콘이 변형 선택기를 지원하는지 확인합니다. 변형 선택기를 사용하면 특정 이모티콘을 컬러나 흑백으로 표현할 수 있습니다. 모바일 기기에서는 앱이 흑백보다는 컬러로 이모티콘을 표시해야 합니다. 그러나 앱이 텍스트와 함께 이모티콘을 표시하는 경우에는 흑백 변형을 사용해야 합니다. 그림 이모티콘에 변형 이모티콘이 있는지 확인하려면 변형 선택기를 사용하세요. 변형이 있는 문자의 전체 목록은 변형에 관한 유니코드 문서그림 이모티콘 변형 시퀀스 섹션을 검토하세요.
  • 그림 이모티콘이 피부색을 지원하는지 확인합니다. Android 7.0에서는 사용자가 이모티콘의 렌더링된 피부색을 원하는 대로 수정할 수 있습니다. 키보드 앱은 피부색이 여러 개인 이모티콘에 관한 시각적 표시를 제공해야 하며 사용자가 선호하는 피부색을 선택할 수 있도록 해야 합니다. 어떤 시스템 이모티콘에 피부색 수정자가 있는지 확인하려면 hasGlyph(String) 메서드를 사용하세요. 유니코드 문서를 참고하여 피부 색조를 사용하는 그림 이모티콘을 확인할 수 있습니다.

Android의 ICU4J API

Android 7.0에서는 이제 android.icu 패키지 아래의 Android 프레임워크에서 ICU4J API의 하위 집합을 제공합니다. 마이그레이션이 용이하며 대부분 com.java.icu 네임스페이스를 android.icu로 변경하기만 하면 됩니다. 앱에서 이미 ICU4J 번들을 사용 중인 경우 Android 프레임워크에서 제공되는 android.icu API로 전환하면 APK 크기를 크게 줄일 수 있습니다.

Android ICU4J API에 관해 자세히 알아보려면 ICU4J 지원을 참고하세요.

WebView

Chrome + WebView 포함

Android 7.0 이상의 Chrome 버전 51부터는 기기의 Chrome APK를 사용하여 Android 시스템 WebView를 제공하고 렌더링합니다. 이 방법을 사용하면 기기 자체의 메모리 사용량이 개선되고 WebView를 최신 상태로 유지하는 데 필요한 대역폭도 줄어듭니다 (Chrome이 사용 설정된 상태를 유지하는 한 독립형 WebView APK가 더 이상 업데이트되지 않기 때문).

개발자 옵션을 사용 설정하고 WebView 구현을 선택하여 WebView 제공업체를 선택할 수 있습니다. 기기에 설치된 호환되는 Chrome 버전 (개발자, 베타 또는 안정화 버전) 또는 독립형 WebView APK를 사용하여 WebView 구현 역할을 할 수 있습니다.

Multiprocess

Android 7.0의 Chrome 버전 51부터 개발자 옵션 'Multiprocess WebView'가 사용 설정되면 WebView는 별도의 샌드박스 프로세스에서 웹 콘텐츠를 실행합니다.

향후 Android 버전에서 다중 프로세스 WebView를 사용 설정하기 전에 N의 호환성 및 런타임 성능에 관한 의견을 기다리고 있습니다. 이 버전에서는 시작 시간, 총 메모리 사용량 및 소프트웨어 렌더링 성능의 회귀가 예상됩니다.

멀티 프로세스 모드에서 예상치 못한 문제가 발견되면 이에 대해 알려주세요. Chromium 버그 추적기에 대해서는 WebView팀에 문의하세요.

페이지 로드 전에 Javascript 실행

Android 7.0을 타겟팅하는 앱부터는 새 페이지가 로드될 때 자바스크립트 컨텍스트가 재설정됩니다. 현재는 새 WebView 인스턴스에 로드된 첫 번째 페이지에 컨텍스트가 이월됩니다.

WebView에 자바스크립트를 삽입하려는 개발자는 페이지 로드가 시작된 후에 스크립트를 실행해야 합니다.

비보안 출처의 위치정보

Android 7.0을 타겟팅하는 앱부터는 보안 출처 (HTTPS를 통해)에서만 위치정보 API가 허용됩니다. 이 정책은 사용자가 안전하지 않은 연결을 사용할 때 사용자의 개인 정보를 보호하기 위해 설계되었습니다.

WebView Beta를 사용한 테스트

WebView는 정기적으로 업데이트되므로 WebView의 베타 채널을 사용하여 앱과의 호환성을 자주 테스트하는 것이 좋습니다. Android 7.0에서 WebView의 출시 전 버전 테스트를 시작하려면 Chrome 개발자 또는 Chrome 베타를 다운로드하여 설치하고 위에서 설명한 대로 개발자 옵션에서 WebView 구현으로 선택합니다. 새 WebView 버전이 출시되기 전에 문제를 해결할 수 있도록 Chromium 버그 추적기를 통해 문제를 신고해 주세요.

OpenGLTM ES 3.2 API

Android 7.0에서는 다음을 비롯하여 OpenGL ES 3.2용 프레임워크 인터페이스와 플랫폼 지원을 추가합니다.

  • EXT_texture_sRGB_decode를 제외한 Android Extension Pack (AEP)의 모든 확장 프로그램
  • HDR 및 지연 셰이딩을 위한 부동 소수점 프레임 버퍼.
  • 일괄처리 및 스트리밍 성능을 향상시키는 BaseVertex 그리기 호출.
  • WebGL 오버헤드를 줄여주는 강력한 버퍼 액세스 제어.

Android 7.0의 OpenGL ES 3.2용 프레임워크 API에는 GLES32 클래스가 제공됩니다. OpenGL ES 3.2를 사용할 때는 <uses-feature> 태그와 android:glEsVersion 속성을 사용하여 매니페스트 파일에서 요구사항을 선언해야 합니다.

런타임에 기기의 지원되는 OpenGL ES 버전을 확인하는 방법을 포함하여 OpenGL ES 사용에 관한 자세한 내용은 OpenGL ES API 가이드를 참고하세요.

Android TV 녹화

Android 7.0에는 새로운 녹화 API를 통해 Android TV 입력 서비스의 콘텐츠를 녹화하고 재생하는 기능이 추가되었습니다. 기존의 타임 시프팅 API를 기반으로 빌드된 TV 입력 서비스는 녹화할 수 있는 채널 데이터와 녹화된 세션의 저장 방법을 제어하고 녹화된 콘텐츠와의 사용자 상호작용을 관리할 수 있습니다.

자세한 내용은 Android TV 녹화 API를 참고하세요.

Android for Work

Android for Work에는 Android 7.0을 실행하는 기기를 위한 새로운 기능과 API가 많이 추가되었습니다. 몇 가지 주요 기능은 아래와 같습니다. 전체 기능 목록은 Android Enterprise 기능 목록을 참고하세요.

작업 프로필 보안 인증 질문

N SDK를 타겟팅하는 프로필 소유자는 직장 프로필에서 실행되는 앱에 별도의 보안 인증 질문을 지정할 수 있습니다. 사용자가 직장 앱을 열려고 할 때 직장 프로필 보안 인증 질문이 표시됩니다. 보안 인증 질문에 성공하면 직장 프로필이 잠금 해제되고 필요한 경우 직장 프로필이 복호화됩니다. 프로필 소유자의 경우 ACTION_SET_NEW_PASSWORD는 사용자에게 직장 프로필 보안 질문을 설정하라는 메시지를 표시하고 ACTION_SET_NEW_PARENT_PROFILE_PASSWORD는 사용자에게 기기 잠금을 설정하라는 메시지를 표시합니다.

프로필 소유자는 setPasswordQuality(), setPasswordMinimumLength() 및 관련 메서드를 사용하여 업무용 보안 인증 질문에 관한 고유한 비밀번호 정책(예: PIN의 길이 또는 프로필을 잠금 해제하는 데 지문을 사용할 수 있는지 여부)을 설정할 수 있습니다. 프로필 소유자는 새 getParentProfileInstance() 메서드에서 반환된 DevicePolicyManager 인스턴스를 사용하여 기기 잠금을 설정할 수도 있습니다. 또한 프로필 소유자는 새로운 setOrganizationColor()setOrganizationName() 메서드를 사용하여 작업 프로필 보안 질문의 사용자 인증 정보 화면을 맞춤설정할 수 있습니다.

작업 해제

작업 프로필이 있는 기기에서는 사용자가 작업 모드를 설정하거나 해제할 수 있습니다. 작업 모드를 사용 중지하면 관리 사용자가 일시적으로 종료되며, 이 경우 직장 프로필 앱, 백그라운드 동기화, 알림이 사용 중지됩니다. 여기에는 프로필 소유자 애플리케이션이 포함됩니다. 작업 모드가 꺼져 있으면 사용자가 직장 앱을 실행할 수 없음을 사용자에게 알리기 위해 시스템에서 영구 상태 아이콘을 표시합니다. 런처는 직장 앱과 위젯에 액세스할 수 없음을 나타냅니다.

상시 접속 VPN

기기 소유자 및 프로필 소유자는 항상 지정된 VPN을 통해 직장 앱이 연결되도록 할 수 있습니다. 시스템은 기기가 부팅된 후 해당 VPN을 자동으로 시작합니다.

새로운 DevicePolicyManager 메서드는 setAlwaysOnVpnPackage()getAlwaysOnVpnPackage()입니다.

VPN 서비스는 앱 상호작용 없이 시스템에 의해 직접 바인딩될 수 있으므로 VPN 클라이언트는 상시 사용 설정 VPN의 새로운 진입점을 처리해야 합니다. 이전과 마찬가지로 서비스는 android.net.VpnService 작업과 일치하는 인텐트 필터를 통해 시스템에 표시됩니다.

사용자는 설정>더보기>Vpn을 사용하여 VPNService 메서드를 구현하는 상시 사용 설정 VPN 클라이언트를 수동으로 설정할 수도 있습니다. 설정에서 VPN 상시 사용 설정을 사용 설정하는 옵션은 VPN 클라이언트가 API 수준 24를 타겟팅하는 경우에만 사용할 수 있습니다.

사용자 지정 프로비저닝

애플리케이션은 기업 색상과 로고를 사용하여 프로필 소유자 및 기기 소유자 프로비저닝 흐름을 맞춤설정할 수 있습니다. DevicePolicyManager.EXTRA_PROVISIONING_MAIN_COLOR는 흐름 색상을 맞춤설정합니다. DevicePolicyManager.EXTRA_PROVISIONING_LOGO_URI는 기업 로고를 사용하여 흐름을 맞춤설정합니다.

접근성 향상

이제 Android 7.0에서는 새 기기 설정의 시작 화면에서 직접 Vision 설정을 제공합니다. 이렇게 하면 사용자가 기기에서 확대 동작, 글꼴 크기, 디스플레이 크기, TalkBack 등 접근성 기능을 훨씬 쉽게 찾고 구성할 수 있습니다.

이렇게 눈에 띄는 위치에 접근성 기능을 배치하면 사용자가 이 기능을 사용 설정한 상태에서 앱을 사용해 볼 가능성이 높아집니다. 이러한 설정을 사용하여 조기에 앱을 테스트해야 합니다. 설정 > 접근성에서 사용 설정할 수 있습니다.

또한 Android 7.0에서는 운동 장애가 있는 사용자가 이제 접근성 서비스를 통해 화면을 터치할 수 있습니다. 새로운 API를 사용하면 얼굴 추적, 시선 추적, 지점 스캔 등의 기능으로 서비스를 빌드하여 이러한 사용자의 요구사항을 충족할 수 있습니다.

자세한 내용은 GestureDescription 참조 문서를 확인하세요.

직접 부팅

직접 부팅은 기기 시작 시간을 개선하고 예기치 않은 재부팅 후에도 등록된 앱이 제한된 기능을 사용하도록 합니다. 예를 들어 사용자가 수면 중일 때 암호화된 기기가 재부팅되면 이제 등록된 알람, 메시지, 수신 전화가 평소대로 사용자에게 계속 알릴 수 있습니다. 즉, 다시 시작한 후에도 접근성 서비스를 즉시 사용할 수 있습니다.

직접 부팅은 Android 7.0의 파일 기반 암호화를 활용하여 시스템과 앱 데이터 모두에 세분화된 암호화 정책을 사용합니다. 시스템은 선택된 시스템 데이터와 명시적으로 등록된 앱 데이터에 기기가 암호화된 저장소를 사용합니다. 기본적으로 사용자 인증 정보가 암호화된 저장소는 다른 모든 시스템 데이터, 사용자 데이터, 앱, 앱 데이터에 사용됩니다.

부팅 시 시스템은 제한 모드에서 시작되며, 기기 암호화 데이터에만 액세스할 수 있고 앱이나 데이터에 대한 일반적인 액세스 권한은 없습니다. 이 모드에서 구성요소를 실행하려는 경우 매니페스트에 플래그를 설정하여 구성요소를 등록할 수 있습니다. 재시작 후 시스템은 LOCKED_BOOT_COMPLETED 인텐트를 브로드캐스트하여 등록된 구성요소를 활성화합니다. 시스템은 잠금 해제하기 전에 등록된 기기로 암호화된 앱 데이터를 사용할 수 있는지 확인합니다. 사용자가 잠금 화면 사용자 인증 정보를 확인하여 복호화할 때까지 다른 모든 데이터는 사용할 수 없습니다.

자세한 내용은 직접 부팅을 참고하세요.

키 증명

Android 7.0에는 기기의 하드웨어 지원 키 저장소에 저장된 키 쌍이 앱에서 사용하는 민감한 정보를 적절하게 보호하도록 도와주는 새로운 보안 도구인 키 증명이 도입되었습니다. 이 도구를 사용하면 앱을 실행하는 기기가 루팅된 경우에도 앱이 보안 하드웨어에 있는 키와 상호작용한다는 확신을 더할 수 있습니다. 앱에서 하드웨어 지원 키 저장소의 키를 사용하는 경우, 특히 키를 사용하여 앱 내의 민감한 정보를 확인하는 경우 이 도구를 사용해야 합니다.

키 증명을 사용하면 RSA 또는 EC 키 쌍이 생성되어 기기의 TEE (신뢰할 수 있는 실행 환경) 내에 있는 기기의 하드웨어 지원 키 저장소에 저장되었는지 확인할 수 있습니다. 이 도구를 사용하면 앱의 백엔드 서버와 같은 기기 외부 서비스를 사용하여 키 쌍의 용도와 유효성을 확인하고 강력하게 확인할 수도 있습니다. 이러한 기능은 누군가 기기를 루팅하거나 기기에서 실행되는 Android 플랫폼의 보안을 손상시키는 경우에도 키 쌍을 보호하는 추가적인 보안 수준을 제공합니다.

참고: Android 7.0을 실행하는 기기에서만 하드웨어 수준 키 증명이 지원됩니다. Android 7.0을 실행하는 다른 모든 기기에서는 대신 소프트웨어 수준 키 증명을 사용합니다. 프로덕션 수준 환경에서 기기의 하드웨어 지원 키 속성을 확인하려면 먼저 기기가 하드웨어 수준 키 증명을 지원하는지 확인해야 합니다. 이렇게 하려면 증명 인증서 체인에 Google 증명 루트 키에 의해 서명된 루트 인증서가 포함되어 있고 키 설명 데이터 구조 내의 attestationSecurityLevel 요소가 TrustedEnvironment 보안 수준으로 설정되어 있는지 확인해야 합니다.

자세한 내용은 키 증명 개발자 문서를 참조하세요.

네트워크 보안 구성

Android 7.0에서 앱은 오류가 발생하기 쉬운 기존의 프로그래매틱 API (예: X509TrustManager)를 사용하는 대신 선언적 네트워크 보안 구성을 사용하여 코드 수정 없이 보안 (HTTPS, TLS) 연결의 동작을 안전하게 맞춤설정할 수 있습니다.

지원되는 기능:

  • 커스텀 신뢰 앵커. 애플리케이션이 보안 연결을 위해 신뢰할 수 있는 인증 기관 (CA)을 맞춤설정할 수 있게 해줍니다. 예를 들어 특정 자체 서명 인증서 또는 제한된 공개 CA 집합을 신뢰합니다.
  • 디버그 전용 재정의. 애플리케이션 개발자가 설치된 기반에 위험을 더하지 않고 애플리케이션의 보안 연결을 안전하게 디버그할 수 있습니다.
  • 일반 텍스트 트래픽 선택 해제. 애플리케이션이 일반 텍스트 트래픽을 실수로 사용하지 않도록 스스로를 보호할 수 있게 해줍니다.
  • 인증서 고정. 애플리케이션에서 보안 연결을 위해 신뢰할 수 있는 서버 키를 제한할 수 있는 고급 기능입니다.

자세한 내용은 네트워크 보안 구성을 참고하세요.

신뢰할 수 있는 기본 인증 기관

기본적으로 Android 7.0을 타겟팅하는 앱은 시스템에서 제공하는 인증서만 신뢰하며 사용자가 추가한 인증 기관 (CA)은 더 이상 신뢰하지 않습니다. Android 7.0(API 수준 24)을 타겟팅하고 사용자가 추가한 CA를 신뢰하려는 앱은 네트워크 보안 구성을 사용하여 사용자 CA를 신뢰할 수 있는 방식을 지정해야 합니다.

APK 서명 체계 v2

Android 7.0에는 앱 설치 시간을 단축하고 APK 파일의 무단 변경으로부터 더 안전하게 보호하는 새로운 앱 서명 체계인 APK 서명 체계 v2가 도입되었습니다. 기본적으로 Android 스튜디오 2.2 및 Gradle용 Android 플러그인 2.2는 APK 서명 체계 v2와 JAR 서명을 사용하는 기존의 서명 체계를 모두 사용하여 앱에 서명합니다.

앱에 APK 서명 체계 v2를 적용하는 것이 좋지만 이 새로운 체계는 필수는 아닙니다. APK 서명 체계 v2를 사용할 때 앱이 제대로 빌드되지 않으면 새 체계를 사용 중지할 수 있습니다. 사용 중지 프로세스로 인해 Android 스튜디오 2.2 및 Gradle용 Android 플러그인 2.2는 기존 서명 체계만 사용하여 앱에 서명합니다. 기존 체계로만 서명하려면 모듈 수준 build.gradle 파일을 연 다음 v2SigningEnabled false 줄을 출시 서명 구성에 추가합니다.

  android {
    ...
    defaultConfig { ... }
    signingConfigs {
      release {
        storeFile file("myreleasekey.keystore")
        storePassword "password"
        keyAlias "MyReleaseKey"
        keyPassword "password"
        v2SigningEnabled false
      }
    }
  }

주의: APK 서명 체계 v2를 사용하여 앱에 서명한 후 앱을 추가로 변경하면 앱의 서명이 무효화됩니다. 따라서 zipalign과 같은 도구는 APK 서명 체계 v2를 사용하여 앱에 서명한 후가 아니라 서명하기 전에 사용해야 합니다.

자세한 내용은 Android 스튜디오에서 앱에 서명하는 방법과 Gradle용 Android 플러그인을 사용하여 앱 서명을 위한 빌드 파일을 구성하는 방법을 설명하는 Android 스튜디오 문서를 읽어보세요.

범위가 지정된 디렉터리 액세스

Android 7.0에서 앱은 새로운 API를 사용하여 SD 카드와 같은 이동식 미디어의 디렉터리를 비롯하여 특정 외부 저장소 디렉터리 액세스를 요청할 수 있습니다. 새로운 API는 애플리케이션에서 Pictures 디렉터리와 같은 표준 외부 저장소 디렉터리에 액세스하는 방법을 크게 간소화합니다. 사진 앱과 같은 앱은 모든 저장소 디렉터리에 대한 액세스 권한을 부여하는 READ_EXTERNAL_STORAGE 또는 사용자가 디렉터리로 이동하게 하는 저장소 액세스 프레임워크를 사용하는 대신 이러한 API를 사용할 수 있습니다.

또한 새로운 API는 사용자가 앱에 외부 저장소 액세스 권한을 부여하는 단계를 단순화합니다. 새 API를 사용할 때 시스템은 애플리케이션이 액세스를 요청하는 디렉터리를 명확하게 설명하는 간단한 권한 UI를 사용합니다.

자세한 내용은 범위가 지정된 디렉터리 액세스 개발자 문서를 참고하세요.

Keyboard Shortcuts Helper

Android 7.0에서 사용자는 Meta + /를 눌러 단축키 화면을 트리거할 수 있습니다. 이 화면에는 시스템과 포커스가 있는 앱에서 모두 사용 가능한 모든 단축키를 표시할 수 있습니다. 시스템은 이러한 바로가기가 있는 경우 앱의 메뉴에서 이러한 바로가기를 자동으로 검색합니다. 화면에 맞게 미세 조정된 자체 바로가기 목록을 제공할 수도 있습니다. 이렇게 하려면 onProvideKeyboardShortcuts() 메서드를 재정의하면 됩니다.

참고: Meta 키는 모든 키보드에 없습니다. Macintosh 키보드에서는 Command 키, Windows 키보드에서는 Windows 키, Pixel C 및 ChromeOS 키보드에는 Search 키가 있습니다.

앱의 어디서나 단축키 도우미를 트리거하려면 관련 활동에서 requestShowKeyboardShortcuts()를 호출합니다.

Custom Pointer API

Android 7.0에는 맞춤 포인터 API가 도입되어 포인터의 모양, 가시성, 동작을 맞춤설정할 수 있습니다. 이 기능은 사용자가 마우스나 터치패드를 사용하여 UI 객체와 상호작용할 때 특히 유용합니다. 기본 포인터는 표준 아이콘을 사용합니다. 이 API에는 특정 마우스 또는 터치패드 움직임에 따라 포인터 아이콘의 모양을 변경하는 등의 고급 기능도 포함되어 있습니다.

포인터 아이콘을 설정하려면 View 클래스의 onResolvePointerIcon() 메서드를 재정의합니다. 이 메서드는 PointerIcon 객체를 사용하여 특정 모션 이벤트에 상응하는 아이콘을 그립니다.

Sustained Performance API

기기 구성요소가 온도 제한에 도달하면 시스템이 단일 칩 시스템 엔진을 제한하므로 장기 실행되는 앱의 성능이 크게 변동될 수 있습니다. 이러한 변동은 장기 실행 고성능 앱을 만드는 앱 개발자에게 움직이는 과녁과도 같습니다.

이러한 제한을 해결하기 위해 Android 7.0에는 지속적인 성능 모드가 지원되어 OEM이 장기 실행 앱의 기기 성능 기능에 관한 힌트를 제공할 수 있습니다. 앱 개발자는 이러한 힌트를 사용하여 장기간에 걸쳐 예측 가능하고 일관적인 수준의 기기 성능을 위해 앱을 조정할 수 있습니다.

앱 개발자는 Nexus 6P 기기에서만 Android 7.0의 이 새로운 API를 사용해 볼 수 있습니다. 이 기능을 사용하려면 지속적인 성능 모드로 실행할 기간에 대해 지속적인 성능 기간 플래그를 설정합니다. Window.setSustainedPerformanceMode() 메서드를 사용하여 이 플래그를 설정합니다. 창에 더 이상 포커스가 없으면 시스템은 이 모드를 자동으로 사용 중지합니다.

VR 지원

Android 7.0에는 개발자가 사용자를 위한 고품질 모바일 VR 환경을 빌드할 수 있도록 새로운 VR 모드를 위한 플랫폼 지원 및 최적화가 추가되었습니다. VR 앱용 전용 CPU 코어에 대한 액세스를 포함하여 여러 가지 성능 개선사항이 있습니다. 앱 내에서 지능형 머리 추적 및 VR용으로 작동하는 스테레오 알림을 활용할 수 있습니다. 무엇보다도 Android 7.0은 지연 시간이 매우 짧은 그래픽을 제공합니다. Android 7.0용 VR 앱 빌드에 관한 자세한 내용은 Android용 Google VR SDK를 참고하세요.

Android 7.0에서는 이제 인쇄 서비스 개발자가 개별 프린터 및 인쇄 작업에 관한 추가 정보를 표시할 수 있습니다.

개별 프린터를 나열할 때 이제 인쇄 서비스에서 다음 두 가지 방식으로 프린터별 아이콘을 설정할 수 있습니다.

또한 setInfoIntent()를 호출하여 추가 정보를 표시하도록 프린터별 활동을 제공할 수 있습니다.

setProgress()setStatus()를 각각 호출하여 인쇄 작업 알림에 인쇄 작업의 진행 상황과 상태를 표시할 수 있습니다.

프레임 측정항목 API

Frame Metrics API를 사용하면 앱에서 UI 렌더링 성능을 모니터링할 수 있습니다. API는 앱의 현재 창에 대한 프레임 타이밍 정보를 전송하는 스트리밍 Pub/Sub API를 노출하여 이 기능을 제공합니다. 반환된 데이터는 adb shell dumpsys gfxinfo framestats에서 표시하는 데이터와 동일하지만 지난 120프레임으로 제한되지 않습니다.

Frame Metrics API를 사용하여 USB 연결 없이 프로덕션 환경에서 상호작용 수준의 UI 성능을 측정할 수 있습니다. 이 API를 사용하면 adb shell dumpsys gfxinfo보다 훨씬 더 세부적으로 데이터를 수집할 수 있습니다. 시스템이 앱의 특정 상호작용에 관한 데이터를 수집할 수 있기 때문에 이렇게 보다 세분화할 수 있습니다. 시스템이 전체 앱 성능에 관한 전역 요약을 캡처하거나 전역 상태를 지울 필요가 없습니다. 이 기능을 사용하면 앱 내 실제 사용 사례의 UI 성능에서 성능 데이터를 수집하고 성능 저하를 찾아낼 수 있습니다.

창을 모니터링하려면 OnFrameMetricsAvailableListener.onFrameMetricsAvailable() 콜백 메서드를 구현하여 해당 창에 등록합니다.

API는 FrameMetrics 객체를 제공하며 이 객체에는 렌더링 하위 시스템이 프레임 수명 주기의 다양한 주요 시점에 관해 보고하는 타이밍 데이터가 포함됩니다. 지원되는 측정항목은 UNKNOWN_DELAY_DURATION, INPUT_HANDLING_DURATION, ANIMATION_DURATION, LAYOUT_MEASURE_DURATION, DRAW_DURATION, SYNC_DURATION, COMMAND_ISSUE_DURATION, SWAP_BUFFERS_DURATION, TOTAL_DURATION, FIRST_DRAW_FRAME입니다.

가상 파일

이전 버전의 Android에서는 앱이 저장소 액세스 프레임워크를 사용하여 사용자가 Google Drive와 같은 클라우드 저장소 계정에서 파일을 선택하도록 허용할 수 있었습니다. 그러나 직접적인 바이트 코드 표현이 없는 파일을 표현할 방법이 없었으며, 모든 파일이 입력 스트림을 제공해야 했습니다.

Android 7.0은 저장소 액세스 프레임워크에 가상 파일이라는 개념을 추가합니다. 가상 파일 기능을 사용하면 직접적인 바이트 코드 표현이 없더라도 DocumentsProviderACTION_VIEW 인텐트와 함께 사용할 수 있는 문서 URI를 반환할 수 있습니다. 또한 Android 7.0에서는 가상 파일이든 아니든 사용자 파일의 대체 형식을 제공할 수 있습니다.

가상 파일 열기에 관한 자세한 내용은 저장소 액세스 프레임워크 가이드에서 가상 파일 열기를 참고하세요.