Android 10 기능 및 API

Android 10에는 사용자와 개발자를 위한 훌륭한 기능이 도입되었습니다. 이 문서에서는 개발자를 위한 기능을 소개합니다.

API에 관해 알아보려면 API 차이점 보고서를 읽거나 Android API 참조를 방문하여 'API 수준 29에 추가된' API를 찾아보세요. 또한 Android 10 동작 변경사항 (API 수준 29를 타겟팅하는 앱 및 모든 앱)과 개인 정보 보호 변경사항을 확인하여 플랫폼 변경사항이 앱에 영향을 줄 수 있는 분야에 관해 알아보세요.

보안 기능 향상

Android 10에는 여러 보안 기능이 도입되었으며 다음 섹션에서 요약합니다.

향상된 생체 인식 인증 대화상자

Android 10에서는 생체 인식 인증 지원에 다음과 같은 개선사항이 도입되었습니다.

  • 생체 인식 인증 기능을 확인합니다.
  • 사용자가 생체 인식 입력을 사용하여 인증할 수 없는 경우 기기 PIN, 패턴 또는 비밀번호를 사용하여 인증할 수 있는 대체 메커니즘입니다.
  • 사용자가 암시적 생체 인식 방식을 사용하여 인증한 후 사용자 확인을 요구하지 않도록 시스템에 알리는 힌트입니다. 예를 들어 사용자가 얼굴 인증을 사용하여 인증한 후에는 추가 확인이 필요하지 않다고 시스템에 알릴 수 있습니다.

APK에서 직접 삽입된 DEX 코드 실행

Android 10부터는 삽입된 DEX 코드를 앱의 APK 파일에서 직접 실행하도록 플랫폼에 지시할 수 있습니다. 이 옵션을 사용하면 공격자가 기기에서 로컬로 컴파일된 코드를 변조한 경우에 공격을 차단할 수 있습니다.

자세한 내용은 APK에서 직접 삽입된 DEX 코드 실행을 참고하세요.

TLS 1.3 지원

Android 10에는 TLS 1.3 지원이 추가되었습니다. TLS 1.3은 성능 이점과 향상된 보안을 포함하는 TLS 표준의 주요 버전입니다. Google의 벤치마크에 따르면 TLS 1.3을 사용하면 TLS 1.2에 비해 보안 연결을 최대 40% 더 빠르게 설정할 수 있습니다.

TLS 1.3 구현에 관한 자세한 내용은 모든 앱의 동작 변경사항 페이지 내 TLS 섹션을 참고하세요.

공개 Conscrypt API

Android 10부터 Conscrypt 보안 제공업체에는 TLS 기능을 위한 공개 API가 포함되어 있습니다.

android.net.ssl의 클래스 컬렉션에는 일반 javax.net.ssl API에서 사용할 수 없는 기능에 액세스하는 정적 메서드가 포함되어 있습니다. 이러한 클래스의 이름은 상응하는 javax.net.ssl 클래스의 복수형으로 추론할 수 있습니다. 예를 들어 javax.net.ssl.SSLSocket 인스턴스에서 작동하는 코드는 대신 SSLSockets의 메서드를 사용할 수 있습니다.

연결 기능

Android 10에는 네트워킹 및 연결과 관련한 몇 가지 개선 사항이 포함되어 있습니다.

Wi-Fi 네트워크 연결 API

Android 10은 P2P 연결 지원을 추가로 지원합니다. 이 기능을 사용하면 앱에서 WifiNetworkSpecifier를 사용하여 요청된 네트워크의 속성을 설명함으로써 기기가 연결된 액세스 포인트를 변경하라는 메시지를 사용자에게 표시할 수 있습니다. P2P 연결은 Chromecast 및 Google Home 하드웨어와 같은 보조 기기의 부트스트랩 구성과 같이 네트워크를 제공하지 않는 목적으로 사용됩니다.

자세한 내용은 P2P 연결을 위한 Wi-Fi 네트워크 요청 API를 참고하세요.

Wi-Fi 네트워크 제안 API

Android 10에는 앱이 사용자에게 Wi-Fi 액세스 포인트에 연결하라는 메시지를 표시하는 기능이 추가되었습니다. 연결할 네트워크에 관한 추천을 제공할 수 있습니다. 플랫폼은 궁극적으로 개발자의 앱과 다른 앱의 입력을 기반으로 수락할 액세스 포인트를 선택합니다.

이 기능에 관한 자세한 내용은 Wi-Fi 추천을 참고하세요.

Wi-Fi 고성능 및 짧은 지연 시간 모드 개선

Android 10에서는 기본 모뎀에 힌트를 제공하여 지연 시간을 최소화할 수 있습니다.

Android 10은 Wi-Fi 잠금 API를 확장하여 고성능 모드와 저지연 모드를 효과적으로 지원합니다. Wi-Fi 절전 모드는 고성능 및 저지연 모드에서 사용 중지되며, 모뎀 지원에 따라 저지연 모드에서 추가 지연 시간 최적화가 사용 설정될 수 있습니다.

저지연 모드는 잠금을 획득하는 애플리케이션이 포그라운드에서 실행 중이고 화면이 켜져 있는 경우에만 사용 설정됩니다. 저지연 모드는 실시간 모바일 게임 애플리케이션에 특히 유용합니다.

DNS 리졸버에서 전문 검색

Android 10에서는 일반 텍스트 조회와 DNS-over-TLS 모드를 모두 사용하는 특수 DNS 조회가 기본적으로 지원됩니다. 이전에는 플랫폼 DNS 리졸버가 A 및 AAAA 레코드만 지원하여 이름과 연결된 IP 주소만 조회할 수 있었지만 다른 레코드 유형은 지원하지 않았습니다. DnsResolver API는 일반적인 비동기식의 결정 방법을 제공하며 이를 사용하여 SRV, NAPTR 및 기타 레코드 유형을 조회할 수 있습니다. 응답을 파싱하는 것은 앱에서 실행합니다.

NDK 기반 앱의 경우 android_res_nsend를 참고하세요.

Wi-Fi 간편 연결

Android 10에서는 간편 연결을 사용하여 Wi-Fi 사용자 인증 정보를 피어 기기에 프로비저닝할 수 있습니다. 이는 지원 중단된 WPS를 대체합니다. 앱은 ACTION_PROCESS_WIFI_EASY_CONNECT_URI 인텐트를 사용하여 간편 연결을 설정 및 프로비저닝 흐름에 통합할 수 있습니다.

이 기능에 관한 자세한 내용은 Wi-Fi Easy Connect를 참고하세요.

Wi-Fi Direct connection API

WifiP2pConfig 및 WifiP2pManager API 클래스는 Android 10에서 업데이트되어 미리 정해진 정보를 사용하여 Wi-Fi Direct에 빠르게 연결하는 기능을 지원합니다. 이 정보는 블루투스 또는 NFC와 같은 사이드 채널을 통해 공유됩니다.

다음 코드 샘플은 사전 결정된 정보를 사용하여 그룹을 만드는 방법을 보여줍니다.

Kotlin

val manager = getSystemService(Context.WIFI_P2P_SERVICE) as WifiP2pManager
val channel = manager.initialize(this, mainLooper, null)

// prefer 5G band for this group
val config = WifiP2pConfig.Builder()
    .setNetworkName("networkName")
    .setPassphrase("passphrase")
    .enablePersistentMode(false)
    .setGroupOperatingBand(WifiP2pConfig.GROUP_OWNER_BAND_5GHZ)
    .build()

// create a non-persistent group on 5GHz
manager.createGroup(channel, config, null)

자바

WifiP2pManager manager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE);
Channel channel = manager.initialize(this, getMainLooper(), null);

// prefer 5G band for this group
WifiP2pConfig config = new WifiP2pConfig.Builder()
.setNetworkName("networkName")
.setPassphrase("passphrase")
.enablePersistentMode(false)
.setGroupOperatingBand(WifiP2pConfig.GROUP_OWNER_BAND_5GHZ)
.build();

// create a non-persistent group on 5GHz
manager.createGroup(channel, config, null);

사용자 인증 정보를 사용하여 그룹에 가입하려면 manager.createGroup()를 다음으로 바꿉니다.

Kotlin

manager.connect(channel, config, null)

자바

manager.connect(channel, config, null);

블루투스 LE 연결 지향 채널(CoC)

Android 10에서는 앱이 BLE CoC 연결을 사용하여 두 BLE 기기 간에 더 큰 데이터 스트림을 전송할 수 있습니다. 이 인터페이스는 블루투스 및 연결 메커니즘을 추상화하여 구현을 간소화합니다.

통신 기능

Android 10에는 통신과 관련한 몇 가지 개선 사항이 포함되어 있습니다.

통화 품질 개선

Android 10에는 이 기능을 지원하는 기기에서 네트워크를 오가는 품질을 포함하여 진행 중인 IP 멀티미디어 하위 시스템 (IMS) 통화의 품질에 관한 정보를 수집하는 기능이 추가되었습니다.

통화 선택 및 발신번호 표시

Android 10은 사용자의 주소록에 없는 전화를 잠재적인 스팸 전화로 식별하고 사용자를 대신하여 스팸 전화를 자동으로 거부하는 수단을 앱에 제공합니다. 이러한 차단된 통화에 관한 정보는 통화 기록에 차단된 통화로 기록되어 사용자가 부재중 전화를 확인할 때 더 높은 투명성을 제공합니다. 이 API를 사용하면 사용자로부터 READ_CALL_LOG 권한을 얻지 않아도 통화 선별 및 발신번호 표시 기능을 제공할 수 있습니다.

통화 리디렉션 서비스 API

Android 10에서는 통화 인텐트를 처리하는 방법이 변경되었습니다. NEW_OUTGOING_CALL 브로드캐스트는 지원 중단되었으며 CallRedirectionService API로 대체되었습니다. CallRedirectionService API는 Android 플랫폼에서 발신 전화를 수정할 수 있는 인터페이스를 제공합니다. 예를 들어 서드 파티 앱은 통화를 취소하고 VoIP를 통해 다시 라우팅할 수 있습니다.

외부 저장소에 파일을 만드는 기능 개선 사항

Android 10에서는 범위 지정 저장소를 도입하는 것 외에도 외부 저장소와 관련된 다음과 같은 기능을 추가합니다.

  • IS_PENDING 플래그를 사용하여 앱이 디스크에 기록되는 미디어 파일에 독점적으로 액세스하도록 할 수 있습니다.
  • 파일을 저장해야 하는 구체적인 위치를 알고 있다면 새로 작성된 파일을 저장할 위치와 관련된 힌트를 시스템에 제공할 수 있습니다.
  • 각 외부 저장 장치에는 고유한 볼륨 이름이 있습니다.

미디어 및 그래픽

Android 10에는 다음과 같은 새로운 미디어 및 그래픽 기능과 API가 도입되었습니다.

오디오 입력 공유

Android 10에는 두 개의 앱이 동시에 오디오 입력을 공유할 수 있는 기능이 추가되었습니다. 자세한 내용은 오디오 입력 공유를 참조하세요.

오디오 재생 캡처

Android 10은 앱에 다른 앱의 오디오 재생을 캡처하는 기능을 제공합니다. 자세한 내용은 재생 캡처를 참조하세요.

MediaStyle 알림의 탐색 막대

Android 10부터 MediaStyle 알림에 탐색 막대가 표시됩니다. 탐색 막대는 PlaybackState.getPosition()의 재생 진행률을 표시하며, 경우에 따라 탐색 막대를 사용하여 재생 중인 프로그램의 위치를 탐색할 수 있습니다. 탐색 막대의 모양과 동작은 다음 규칙에 의해 제어됩니다.

  • 활성 MediaSession가 있고 재생 시간(MediaMetadata.METADATA_KEY_DURATION로 지정됨)이 0보다 크면 탐색 막대가 표시됩니다. 즉, 라이브 스트림 및 라디오 방송과 같이 길이가 정해지지 않은 스트림에는 막대가 표시되지 않습니다.
  • 세션에서 ACTION_SEEK_TO를 구현하는 경우 사용자는 탐색 막대를 드래그하여 재생 위치를 제어할 수 있습니다.

네이티브 MIDI API

Android Native MIDI API(AMidi)는 애플리케이션 개발자에게 C/C++ 코드로 MIDI 데이터를 주고받는 기능을 제공하여 C/C++ 오디오/제어 로직과 더 긴밀하게 통합하고 JNI의 필요성을 최소화합니다.

자세한 내용은 Android 네이티브 MIDI API를 참조하세요.

MediaCodecInfo 개선 사항

Android 10은 코덱에 관한 자세한 정보를 표시하는 메서드를 MediaCodecInfo에 추가합니다.

자세한 내용은 미디어 코덱을 참조하세요.

Thermal API

기기가 너무 뜨거워지면 CPU 또는 GPU를 제한할 수 있으며, 이로 인해 앱과 게임에 예기치 않은 영향을 미칠 수 있습니다. 복잡한 그래픽, 과도한 계산 또는 지속적인 네트워크 활동을 사용하는 앱은 문제가 발생할 가능성이 더 높으며, 이는 칩셋 및 코어 주파수, 통합 수준, 기기 패키징 및 폼 팩터에 따라 기기마다 다를 수 있습니다.

Android 10에서 앱과 게임은 열 API를 사용하여 기기의 변경사항을 모니터링하고 전력 사용량을 낮게 유지하여 정상 온도를 복원하는 조치를 취할 수 있습니다. 앱은 PowerManager에 리스너를 등록합니다. 이를 통해 시스템은 가벼움, 보통, 심각, 매우 심각, 긴급, 종료에 이르는 지속적인 열 상태를 보고합니다.

기기에서 열 스트레스를 보고하면 앱과 게임은 진행 중인 활동을 중단하여 다양한 방식으로 전력 사용량을 줄일 수 있습니다. 예를 들어 스트리밍 앱은 해상도/비트 전송률 또는 네트워크 트래픽을 줄일 수 있고, 카메라 앱은 플래시 또는 집중적인 이미지 보정을 사용 중지할 수 있으며, 게임은 프레임 속도 또는 다각형 테셀레이션을 줄일 수 있고, 미디어 앱은 스피커 볼륨을 줄일 수 있으며, 지도 앱은 GPS를 사용 중지할 수 있습니다.

열 API에는 새로운 기기 HAL 레이어가 필요합니다. 이 레이어는 현재 Android 10을 실행하는 Pixel 기기에서 지원되며, Google은 기기 제조업체 파트너와 협력하여 생태계에 광범위한 지원을 최대한 빨리 제공하기 위해 노력하고 있습니다.

카메라 및 이미지

Android 10에는 다음과 같은 새로운 카메라와 이미지 관련 기능이 도입되었습니다.

흑백 카메라 지원

흑백 카메라 기능은 Android 9(API 레벨 28)에서 처음으로 도입되었습니다. Android 10에는 흑백 카메라 지원에 관한 몇 가지 향상된 기능이 추가되었습니다.

  • 메모리 효율 향상을 위한 Y8 스트림 형식 지원
  • 흑백 RAW DNG 캡처 지원
  • 일반 흑백 카메라와 근적외선 카메라를 구분하기 위해 MONO 및 NIR CFA 열거를 도입했습니다.

이 기능을 사용하여 네이티브 흑백 이미지를 캡처할 수 있습니다. 논리 다중 카메라 기기는 흑백 카메라를 물리적 하위 카메라로 사용하여 저조도 이미지 품질을 개선할 수 있습니다.

다이내믹 포커스 형식

Android 10부터 카메라는 동적 심도 형식 (DDF)이라는 새로운 스키마를 사용하여 이미지의 심도 데이터를 별도의 파일에 저장할 수 있습니다. 앱은 JPG 이미지와 심도 메타데이터를 모두 요청할 수 있으며, 이 정보를 사용하여 원본 이미지 데이터를 수정하지 않고도 후처리에서 원하는 블러를 적용할 수 있습니다.

이 형식의 사양을 읽으려면 다이내믹 포커스 형식을 참고하세요.

고효율 이미지 파일 형식

고효율 이미지 파일 (HEIF) 형식은 다른 파일 형식에 비해 더 높은 품질의 인코딩과 더 작은 파일 크기를 제공하는 표준 이미지 및 동영상 형식입니다.

파일 형식에 관한 자세한 내용은 HEIC를 참고하세요.

다중 카메라 개선 사항

Android 10에서는 Android 9 (API 수준 28)에 도입된 기능인 여러 카메라를 단일 논리 카메라로 통합하는 기능이 개선되었습니다. Camera2 API에 다음이 추가되었습니다.

접근성 서비스 API

Android 10에는 다음과 같은 새로운 접근성 서비스 기능과 API가 도입되었습니다.

AccessibilityNodeInfo 입력 키 플래그

Android 10부터는 isTextEntryKey()를 호출하여 지정된 AccessibilityNodeInfo가 키보드 또는 키패드의 일부인 텍스트 입력 키를 나타내는지 확인할 수 있습니다.

접근성 대화상자 음성 피드백

사용자가 접근성 서비스를 시작하기 위해 접근성 바로가기를 실행해야 하는 경우 Android 10에서는 서비스에서 요청하면 대화상자에 TTS(텍스트 음성 변환) 프롬프트가 함께 표시될 수 있습니다.

제스처 탐색이 사용 설정된 경우의 접근성 단축키

Android 10에서 동작 탐색 기능이 사용 설정되면 접근성 버튼이 표시되지 않거나 선택할 수 없습니다. 접근성 서비스 메뉴에 액세스하려면 사용자는 다음 동작 중 하나를 실행해야 합니다.

  • 두 손가락을 사용하여 위로 스와이프
  • 두 손가락을 사용하여 위로 스와이프 후 유지

물리적 키보드의 접근성 바로가기

Android 10에서는 사용자가 실제 키보드에서 Control+Alt+Z를 눌러 접근성 바로가기를 트리거할 수 있습니다.

소프트 키보드 컨트롤러 향상

Android 10에서는 기기가 하드 키보드가 연결된 것을 감지한 경우에도 접근성 서비스가 소프트 키보드를 표시하도록 요청할 수 있습니다. 사용자는 이 동작을 재정의할 수 있습니다.

사용자 정의 접근성 시간 제한

Android 10에서는 getRecommendedTimeoutMillis() API를 도입합니다. 이 메서드는 대화형 및 비대화형 UI 요소에 대한 사용자 정의 제한 시간을 지원합니다. 반환 값은 사용자 환경설정과 접근성 서비스 API의 영향을 모두 받습니다.

자동 완성 향상

Android 10에서는 자동 완성 서비스가 다음과 같이 향상되었습니다.

호환성 관련 자동 완성 요청

FillRequest.FLAG_COMPATIBILITY_MODE_REQUEST 플래그를 사용하여 자동 완성 요청이 호환성 모드를 통해 생성되었는지 확인할 수 있습니다.

사용자 이름과 비밀번호 동시에 저장

SaveInfo.FLAG_DELAY_SAVE 플래그를 사용하여 애플리케이션이 여러 활동을 통해 사용자 이름, 비밀번호 및 기타 필드를 표시하는 경우를 지원할 수 있습니다.

저장 UI와 사용자 상호작용

대화상자에 작업 리스너를 설정하고 해당 비밀번호 원격 뷰의 공개 상태를 변경하여 저장 대화상자에서 비밀번호 필드를 표시하고 숨길 수 있습니다.

데이터세트 업데이트 지원

자동 완성은 기존 비밀번호를 업데이트할 수 있습니다. 예를 들어 사용자가 이미 비밀번호를 저장한 상태에서 새 비밀번호를 저장하면 자동 완성은 새 비밀번호를 저장하는 대신 기존 비밀번호를 업데이트하라는 메시지를 사용자에게 표시합니다.

필드 분류 향상

Android 10에서는 필드 분류 API가 다음과 같이 향상되었습니다.

UserData.Builder 생성자

UserData.Builder 생성자가 Builder 패턴에 더 잘 맞도록 변경되었습니다.

여러 유형의 카테고리 ID에 대한 값 매핑 허용

Android 10에서 UserData.Builder를 사용할 때 이제 값을 여러 유형의 카테고리 ID에 매핑할 수 있습니다. 이전 버전에서는 값이 두 번 이상 추가되면 예외가 발생했습니다.

신용카드 번호 지원 향상

이제 필드 분류에서 4자리 숫자를 신용카드 번호의 마지막 4자리 숫자로 감지할 수 있습니다.

앱별 필드 분류 지원

Android 10에는 세션 기간 동안 앱별 사용자 데이터를 설정할 수 있는 FillResponse.setUserData()가 추가되었습니다. 이렇게 하면 자동 완성 서비스가 앱별 콘텐츠가 있는 필드의 유형을 감지하는 데 도움이 됩니다.

UI 및 시스템 제어

Android 10에서는 사용자 인터페이스가 다음과 같이 향상되었습니다.

JVMTI PopFrame 한도 지원

Android 10에서는 Android JVMTI 구현에 can_pop_frames 기능 지원을 추가합니다. 디버깅 시 이 기능을 사용하면 중단점에서 일시중지하고 로컬, 전역 또는 함수 구현을 조정한 후 함수를 다시 실행할 수 있습니다. 자세한 내용은 Oracle의 Pop Frame 참조 페이지를 참고하세요.

Surface Control API

Android 10은 시스템 컴포지터(SurfaceFlinger)에 대한 하위 수준 액세스를 위해 SurfaceControl API를 제공합니다. 대부분의 사용자에게는 SurfaceView가 컴포지터를 활용하는 올바른 방법입니다. SurfaceControl API는 다음과 같은 경우에 유용할 수 있습니다.

  • 여러 표면 동기화
  • 크로스 프로세스 표면 임베딩
  • 하위 수준 전체 기간 관리

SurfaceControl API는 SDK 및 NDK 바인딩에서 모두 사용할 수 있습니다. NDK 구현에는 컴포지터와 버퍼를 수동으로 교환하는 API가 포함되어 있습니다. 이는 BufferQueue의 제한사항에 부딪힌 사용자에게 대안을 제공합니다.

WebView 중단 렌더러 감지

Android 10에서는 WebViewRenderProcessClient 추상 클래스를 도입합니다. 앱은 이 클래스를 사용하여 WebView가 응답하지 않는지 감지할 수 있습니다. 이 클래스를 사용하려면 다음 안내를 따르세요.

  1. 자체 서브클래스를 정의하고 onRenderProcessResponsive() 및 onRenderProcessUnresponsive() 메서드를 구현합니다.
  2. WebViewRenderProcessClient 인스턴스를 하나 이상의 WebView 객체에 연결합니다.
  3. WebView가 응답하지 않으면 시스템은 클라이언트의 onRenderProcessUnresponsive() 메서드를 호출하여 WebView 및 WebViewRenderProcess를 전달합니다. (WebView가 단일 프로세스인 경우 WebViewRenderProcess 매개변수는 null입니다.) 앱은 렌더링 프로세스를 중지할지 묻는 대화상자를 사용자에게 표시하는 등의 적절한 조치를 취할 수 있습니다.

WebView가 응답하지 않으면 시스템은 onRenderProcessUnresponsive()를 주기적으로 호출하지만 (5초에 한 번 이하) 다른 작업은 실행하지 않습니다. WebView가 다시 응답하면 시스템은 onRenderProcessResponsive()를 한 번만 호출합니다.

설정 패널

Android 10에서는 앱이 앱 컨텍스트에서 사용자에게 설정을 표시할 수 있는 API인 설정 패널을 도입합니다. 이렇게 하면 사용자가 앱을 사용하기 위해 설정으로 이동하여 NFC 또는 모바일 데이터와 같은 항목을 변경할 필요가 없습니다.

그림 1. 기기가 네트워크에 연결되어 있지 않은 상태에서 사용자가 웹페이지를 열려고 합니다. Chrome에 인터넷 연결 설정 패널이 표시됩니다.

그림 2. 사용자는 Chrome 앱을 종료하지 않고도 Wi-Fi를 사용 설정하고 네트워크를 선택할 수 있습니다.

예를 들어 사용자가 기기가 비행기 모드인 상태에서 웹브라우저를 연다고 가정해 보겠습니다. Android 10 이전에는 앱에서 사용자에게 설정을 열어 연결을 복원하도록 요청하는 일반 메시지만 표시할 수 있었습니다. Android 10에서는 브라우저 앱이 비행기 모드, Wi-Fi (근처 네트워크 포함), 모바일 데이터와 같은 주요 연결 설정을 보여주는 인라인 패널을 표시할 수 있습니다. 이 패널을 사용하면 사용자가 앱을 종료하지 않고도 연결을 복원할 수 있습니다.

설정 패널을 표시하려면 다음 Settings.Panel 작업 중 하나로 인텐트를 실행합니다.

Kotlin

val panelIntent = Intent(Settings.Panel.settings_panel_type)
startActivityForResult(panelIntent)

자바

Intent panelIntent = new Intent(Settings.Panel.settings_panel_type);
startActivityForResult(panelIntent);

settings_panel_type는 다음 중 하나일 수 있습니다.

ACTION_INTERNET_CONNECTIVITY
비행기 모드, Wi-Fi, 모바일 데이터와 같은 인터넷 연결과 관련된 설정을 표시합니다.
ACTION_WIFI
Wi-Fi 설정은 표시되지만 다른 연결 설정은 표시되지 않습니다. 이는 대용량 업로드 또는 다운로드를 실행하기 위해 Wi-Fi 연결이 필요한 앱에 유용합니다.
ACTION_NFC
근거리 무선통신(NFC)과 관련된 모든 설정을 표시합니다.
ACTION_VOLUME
모든 오디오 스트림의 볼륨 설정을 표시합니다.

공유 향상

Android 10에서는 공유 기능이 다양하게 개선되었습니다.

Sharing Shortcuts API

Sharing Shortcuts API는 Direct Share API를 대체합니다.

공유 바로가기 API를 사용하면 앱에서 요청 시 사후 대응적으로 결과를 검색하는 대신 직접 공유 타겟을 미리 게시할 수 있습니다. ShortcutManager의 작동 방식은 다음과 같습니다. 두 API는 유사하므로 두 기능을 더 쉽게 사용할 수 있도록 ShortcutInfo API를 확장했습니다. Sharing Shortcuts API를 사용하면 카테고리나 사용자를 공유 타겟에 직접 할당할 수 있습니다. 공유 타겟은 동일한 앱에서 업데이트하거나 앱을 제거할 때까지 시스템에 유지됩니다.

이전의 직접 공유 메커니즘은 계속 작동하지만 이를 사용하는 앱은 공유 바로가기 API를 사용하는 앱보다 우선순위가 낮습니다.

ShortcutInfo.Builder는 공유 타겟에 관한 추가 정보를 제공하는 메서드를 추가하고 개선합니다.

직접 공유 타겟

동적 바로가기를 직접 공유 타겟으로 게시할 수 있습니다. 직접 공유 타겟 게시를 참조하세요.

ShortcutManagerCompat는 이전 DirectShare API와의 하위 호환성을 제공하는 새로운 AndroidX API입니다. 이 방법은 공유 타겟을 게시하는 데 권장되는 방법입니다.

텍스트 미리보기

앱이 텍스트 콘텐츠를 공유할 때 Sharesheet UI에 콘텐츠의 미리보기를 표시할 수 있습니다(선택사항).

서식 있는 텍스트 미리보기 추가를 참조하세요.

자세히 알아보기

앱에서 데이터를 공유하는 방법에 관한 자세한 내용은 다른 앱으로 간단한 데이터 보내기 및 다른 앱에서 간단한 데이터 받기를 참고하세요.

어두운 테마

Android 10은 Android 시스템 UI와 기기에서 실행되는 앱 모두에 적용되는 어두운 테마를 제공합니다. 자세한 내용은 어두운 테마를 참고하세요.

포그라운드 서비스 유형

Android 10에는 여러 특정 서비스의 정의에 포함하는 foregroundServiceType XML 매니페스트 속성이 도입되었습니다. 여러 포그라운드 서비스 유형을 특정 서비스에 할당할 수 있지만, 이는 적절한 경우가 드뭅니다.

다음 표에는 다양한 포그라운드 서비스 유형과 특정 유형을 선언하는 것이 적절한 서비스가 나와 있습니다.

포그라운드 서비스 유형 이 유형을 선언해야 하는 서비스 사용 사례
connectedDevice 웨어러블 피트니스 트래커 모니터링
dataSync 네트워크에서 파일 다운로드
location 사용자가 시작한 작업 계속
mediaPlayback 오디오북, 팟캐스트 또는 음악 재생
mediaProjection 짧은 기간의 기기 디스플레이 동영상 녹화
phoneCall 진행 중인 전화 통화 처리

Kotlin

Android 10에는 Kotlin 개발을 위한 다음과 같은 업데이트가 포함되었습니다.

libcore API에 대한 Null 허용 여부 주석

Android 10에서는 libcore API용 SDK에서 null 허용 여부 주석의 적용 범위를 개선합니다. 이러한 주석을 사용하면 Android 스튜디오에서 Kotlin 또는 자바 null 허용 여부 분석을 사용하는 앱 개발자가 이러한 API와 상호작용할 때 null 허용 여부 정보를 가져올 수 있습니다.

일반적으로 Kotlin에서 null 허용 여부 계약 위반은 컴파일 오류를 일으킵니다. 기존 코드와의 호환성을 보장하기 위해 @RecentlyNullable 및 @RecentlyNonNull 주석만 추가됩니다. 즉, null 허용 여부 위반으로 인해 오류 대신 경고가 발생합니다.

또한 Android 9에 추가된 @RecentlyNullable 또는 @RecentlyNonNull 주석은 각각 @Nullable 및 @NonNull로 변경됩니다. 즉, Android 10 이상에서는 null 허용 여부 위반으로 인해 경고가 아닌 오류가 발생합니다.

주석 변경사항에 관한 자세한 내용은 Android 개발자 블로그의 Android Pie SDK가 이제 Kotlin에 더 친화적임을 참고하세요.

NDK

Android 10에는 다음과 같은 NDK 변경사항이 있습니다.

파일 설명어 소유권 디버깅 향상

Android 10에는 파일 설명자 소유권 문제를 더 쉽게 찾고 수정할 수 있는 fdsan이 추가되었습니다.

파일 설명자 소유권의 잘못된 처리와 관련된 버그는 use-after-close 및 double-close로 나타나는 경향이 있으며 메모리 할당 use-after-free 및 double-free 버그와 유사하지만 진단 및 수정이 훨씬 더 어려운 경향이 있습니다. fdsan은 파일 설명자 소유권을 적용하여 파일 설명자 관리 오류를 감지하거나 방지하려고 시도합니다.

이러한 문제와 관련된 비정상 종료에 관한 자세한 내용은 fdsan에서 감지한 오류를 참고하세요. fdsan에 관한 자세한 내용은 fdsan에 관한 Googlesource 페이지를 참고하세요.

ELF TLS

최소 API 수준 29의 NDK를 사용하여 빌드된 애플리케이션은 emutls 대신 ELF TLS를 사용할 수 있습니다. 스레드 로컬 변수를 처리하는 이 메서드를 지원하기 위해 동적 및 정적 링커 지원이 추가되었습니다.

API 수준 28 이하용으로 빌드된 앱의 경우 일부 emutls 문제를 해결하기 위해 libgcc/compiler-rt에 개선사항이 구현되었습니다.

자세한 내용은 NDK 개발자를 위한 Android 변경사항을 참고하세요.

런타임

Android 10에는 다음과 같은 런타임 변경사항이 포함되어 있습니다.

Mallinfo 기반 가비지 컬렉션 실행

작은 플랫폼 Java 객체가 C++ 힙의 거대한 객체를 참조하는 경우 Java 객체가 수집되고 예를 들어 완료된 경우에만 C++ 객체를 회수할 수 있습니다. 이전 출시에서는 플랫폼이 Java 객체와 연결된 여러 C++ 객체의 크기를 추정했습니다. 이 추정치는 항상 정확하지는 않았으며, 플랫폼이 가비지 컬렉션을 수행해야 할 때 수행하지 못해 메모리 사용량이 크게 증가하는 경우가 있었습니다.

Android 10에서 가비지 컬렉터 (GC)는 시스템 malloc()에서 할당한 힙의 총 크기를 추적하여 대규모 malloc() 할당이 항상 GC 트리거 계산에 포함되도록 합니다. 자바 실행과 함께 많은 수의 C++ 할당을 인터리브 처리하는 앱은 결과적으로 가비지 컬렉션 빈도가 증가할 수 있습니다. 다른 앱에서는 약간 감소될 수 있습니다.

테스트 및 디버깅

Android 10에는 다음과 같은 테스트 및 디버깅 관련 개선 사항이 포함되어 있습니다.

온디바이스 시스템 추적 기능 개선

Android 10부터 기기 내 시스템 트레이스를 실행할 때 트레이스의 크기와 기간에 관한 제한을 지정할 수 있습니다. 두 값 중 하나를 지정하면 시스템은 긴 트레이스를 실행하여 트레이스가 기록되는 동안 트레이스 버퍼를 대상 파일에 주기적으로 복사합니다. 지정한 크기 또는 기간 한도에 도달하면 trace가 완료됩니다.

이러한 추가 매개변수를 사용하여 표준 trace로 테스트하는 것과 다른 사용 사례를 테스트합니다. 예를 들어 앱이 오랫동안 실행된 후에만 발생하는 성능 버그를 진단할 수 있습니다. 이 경우 하루 종일 긴 트레이스를 기록한 다음 보고서에서 CPU 스케줄러, 디스크 활동, 앱 스레드, 기타 데이터를 분석하여 버그의 원인을 파악할 수 있습니다.

Android 10 이상에서는 성능 계측 및 트레이스를 위한 오픈소스 프로젝트인 Perfetto로 열 수 있는 형식으로 트레이스 파일이 저장됩니다. Perfetto 트레이스 파일을 Systrace 형식으로 변환할 수 있습니다.

TextClassifier 개선 사항

Android 10은 TextClassifier 인터페이스에서 추가 텍스트 분류 기능을 제공합니다.

언어 감지

detectLanguage() 메서드는 이전에 존재했던 분류 메서드와 유사하게 작동합니다. TextLanguage.Request 객체를 수신하고 TextLanguage 객체를 반환합니다.

TextLanguage 객체는 순서가 지정된 쌍의 목록으로 구성됩니다. 각 쌍에는 언어와 분류에 해당하는 신뢰도 점수가 포함됩니다.

권장 대화 작업

suggestConversationActions() 메서드는 기존 분류 메서드와 유사하게 작동합니다. ConversationActions.Request 객체를 수신하고 ConversationActions 객체를 반환합니다.

ConversationActions 객체는 ConversationAction 객체의 목록으로 구성됩니다. 각 ConversationAction 객체에는 잠재적인 추천 작업과 신뢰도 점수가 포함됩니다.

알림의 스마트 답장/작업

Android 9에서는 알림 내에 추천 답장을 표시하는 기능이 도입되었습니다. Android 10에서는 추천 인텐트 기반 작업을 포함하는 기능을 통해 이를 확장합니다. 또한 플랫폼은 이러한 추천을 자동으로 생성할 수 있습니다. 앱은 자체 추천을 제공하거나 시스템 생성 추천을 선택 해제할 수 있습니다.

이러한 답장을 생성하는 데 사용되는 API는 TextClassifier의 일부이며 Android 10에서 개발자에게 직접 노출되었습니다. 자세한 내용은 TextClassifier 개선사항 섹션을 참고하세요.

앱에서 자체 추천을 제공하는 경우 플랫폼은 자동 추천을 생성하지 않습니다. 앱의 알림에 추천 답장이나 작업을 표시하지 않으려면 setAllowGeneratedReplies() 및 setAllowSystemGeneratedContextualActions()를 사용하여 시스템에서 생성된 답장 및 작업을 선택 해제하면 됩니다.