제품 소식

Android 17의 두 번째 베타

전문 길이: 6분
Matthew McCullough
Android 개발자 제품 관리 부문 부사장

오늘 Android 17의 두 번째 베타가 출시됩니다. 개인 정보 보호, 보안, 세련된 성능을 우선시하는 플랫폼을 구축하기 위한 노력이 계속되고 있습니다. 이번 업데이트에서는 스포이드 API, 개인 정보 보호 연락처 선택기 등 다양한 새로운 기능을 제공합니다. 고급 범위 지정, 교차 기기 핸드오프 API 등도 추가됩니다.

이번 출시에서는 2분기에 연간 주요 SDK 출시를 진행한 후 소규모 SDK 업데이트를 진행하는 등 출시 주기가 계속 변경됩니다.

사용자 환경 및 시스템 UI

대화창

풍선은 메시지 풍선 API와 별도로 새로운 플로팅 UI 환경을 제공하는 창 모드 기능입니다. 사용자는 런처에서 앱 아이콘을 길게 눌러 휴대전화, 폴더블 또는 태블릿에 앱 풍선을 만들 수 있습니다. 대형 화면에는 작업 표시줄의 일부로 풍선 바가 있어 사용자가 풍선을 정리하고, 풍선 사이를 이동하고, 풍선을 화면의 고정된 지점으로 이동할 수 있습니다.

Bubbles.gif

앱이 풍선으로 올바르게 작동하도록 멀티 윈도우 모드 지원 가이드라인을 따라야 합니다.

베타 2에서는 아직 대화창이 완전히 사용 설정되지 않았습니다. 향후 Android 17 빌드에서 이를 확인하세요.

EyeDropper API

새로운 시스템 수준 EyeDropper API를 사용하면 민감한 화면 캡처 권한 없이 디스플레이의 모든 픽셀에서 색상을 요청할 수 있습니다.

Eyedropper_Tester.webp
  val eyeDropperLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
  result -> if (result.resultCode == Activity.RESULT_OK) {
    val color = result.data?.getIntExtra(Intent.EXTRA_COLOR, Color.BLACK)
    // Use the picked color in your app
  }
}

fun launchColorPicker() {
  val intent = Intent(Intent.ACTION_OPEN_EYE_DROPPER)
  eyeDropperLauncher.launch(intent)
}

연락처 선택 도구

ACTION_PICK_CONTACTS를 통한 새로운 시스템 수준 연락처 선택 도구는 사용자가 요청한 특정 데이터 필드에만 임시 세션 기반 읽기 액세스 권한을 부여하여 광범위한 READ_CONTACTS 권한의 필요성을 줄입니다. 또한 기기의 개인 또는 직장 프로필에서 선택할 수 있습니다.

android-17-contact-picker.gif
  val contactPicker = rememberLauncherForActivityResult(StartActivityForResult()) {
    if (it.resultCode == RESULT_OK) {
        val uri = it.data?.data ?: return@rememberLauncherForActivityResult
        // Handle result logic
        processContactPickerResults(uri)
    }
}

val dataFields = arrayListOf(Email.CONTENT_ITEM_TYPE, Phone.CONTENT_ITEM_TYPE)
val intent = Intent(ACTION_PICK_CONTACTS).apply {
    putStringArrayListExtra(EXTRA_PICK_CONTACTS_REQUESTED_DATA_FIELDS, dataFields)
    putExtra(EXTRA_ALLOW_MULTIPLE, true)
    putExtra(EXTRA_PICK_CONTACTS_SELECTION_LIMIT, 5)
}

contactPicker.launch(intent)

터치패드와의 포인터 캡처 호환성 개선

이전에는 앱이 포인터를 캡처한 경우 터치패드가 마우스와 매우 다른 방식으로 이벤트를 보고하여 마우스에서 보고하는 상대적 움직임이 아닌 패드에 있는 손가락의 위치를 보고했습니다. 이로 인해 1인칭 게임에서 트랙패드를 제대로 지원하기가 매우 어려웠습니다. 이제 터치패드가 캡처되면 시스템에서 포인터 이동 및 스크롤 동작을 인식하고 마우스 이벤트와 마찬가지로 이를 보고합니다. 새 '절대' 모드에서 캡처를 명시적으로 요청하여 이전의 상세한 손가락 위치 데이터를 요청할 수 있습니다. 

  // To request the new default relative mode (mouse-like events)
// This is the same as requesting with View.POINTER_CAPTURE_MODE_RELATIVE
view.requestPointerCapture()

// To request the legacy absolute mode (raw touch coordinates)
view.requestPointerCapture(View.POINTER_CAPTURE_MODE_ABSOLUTE)

대화형 선택기 휴식 경계

Android의 ChooserSession에서 getInitialRestingBounds를 호출하면 앱이 애니메이션과 데이터 로드가 완료된 후 선택기가 차지하는 타겟 위치를 식별하여 UI를 더 잘 조정할 수 있습니다.

연결 및 교차 기기

교차 기기 앱 핸드오프

새로운 Handoff API를 사용하면 Android 태블릿과 같은 다른 기기에서 재개할 애플리케이션 상태를 지정할 수 있습니다. 선택하면 시스템은 CompanionDeviceManager를 통해 상태를 동기화하고 사용자의 근처 기기 런처에 핸드오프 제안을 표시합니다. 이 기능은 원활한 작업 연속성을 제공하여 사용자가 Android 생태계 전반에서 워크플로를 중단한 지점에서 정확히 이어서 진행할 수 있도록 지원합니다. 중요한 점은 핸드오프가 네이티브 앱 간 전환과 앱-웹 대체를 모두 지원하여 수신 기기에 네이티브 앱이 설치되어 있지 않은 경우에도 최대한의 유연성을 제공하고 완전한 환경을 보장한다는 것입니다.

고급 범위 지정 API

다음과 같은 2가지 새로운 범위 지정 기술이 지원됩니다. 

  1. UWB DL-TDOA: 앱이 실내 탐색에 UWB를 사용할 수 있도록 지원합니다. 이 API 표면은 FIRA (Fine Ranging Consortium) 4.0 DL-TDOA 사양을 준수하며 개인 정보 보호 실내 탐색  (앵커에 의한 기기 추적 방지)을 지원합니다.
  2. 앱이 WFA (Wi-Fi Alliance)에서 채택한 새로운 범위 지정 사양을 사용할 수 있도록 지원하는 근접 기기 감지 이 기술은 기존 Wi-Fi Aware 기반 범위 지정 사양에 비해 안정성과 정확성이 개선되었습니다.

데이터 요금제 개선사항

이제 앱은 getStreamingAppMaxDownlinkKbps 및 getStreamingAppMaxUplinkKbps를 사용하여 스트리밍 애플리케이션에 할당된 이동통신사 최대 데이터 전송률을 검색하여 미디어 품질을 최적화할 수 있습니다.

핵심 기능, 개인 정보 보호, 성능

로컬 네트워크 액세스

Android 17에서는 무단 로컬 네트워크 액세스로부터 사용자를 보호하기 위해 ACCESS_LOCAL_NETWORK 런타임 권한을 도입합니다. 이는 기존 NEARBY_DEVICES 권한 그룹에 속하므로 이미 다른 NEARBY_DEVICES 권한을 부여한 사용자에게는 다시 메시지가 표시되지 않습니다. 이 권한을 선언하고 요청하면 앱이 스마트 홈 기기나 전송 수신기 등 로컬 영역 네트워크 (LAN)에 있는 기기를 검색하고 연결할 수 있습니다. 이렇게 하면 악성 앱이 무제한 로컬 네트워크 액세스를 활용하여 은밀한 사용자 추적 및 지문 생성을 수행하는 것을 방지할 수 있습니다. Android 17 이상을 타겟팅하는 앱에는 이제 LAN 기기와의 통신을 유지하는 두 가지 경로가 있습니다. 시스템에서 중재하고 개인 정보 보호를 유지하는 기기 선택기를 채택하여 권한 메시지를 건너뛰거나 런타임에 이 새로운 권한을 명시적으로 요청하여 로컬 네트워크 통신을 유지합니다.

시간대 오프셋 변경 브로드캐스트

이제 Android에서는 일광 절약 시간 전환과 같이 시스템의 시간대 오프셋이 변경될 때 트리거되는 안정적인 브로드캐스트 인텐트인 ACTION_TIMEZONE_OFFSET_CHANGED를 제공합니다. 이는 각각 Unix 타임스탬프가 변경될 때와 시간대 ID가 변경될 때 트리거되는 기존 브로드캐스트 인텐트 ACTION_TIME_CHANGED 및 ACTION_TIMEZONE_CHANGED를 보완합니다.

NPU 관리 및 우선순위 지정

NPU에 직접 액세스해야 하는 Android 17을 타겟팅하는 앱은 NPU 액세스가 차단되지 않도록 매니페스트에서 FEATURE_NEURAL_PROCESSING_UNIT을 선언해야 합니다. 여기에는 LiteRT NPU 위임자, 공급업체별 SDK, 지원 중단된 NNAPI를 사용하는 앱이 포함됩니다.

ICU 78 및 유니코드 17 지원

핵심 국제화 라이브러리가 ICU 78로 업데이트되어 새로운 스크립트, 문자, 그림 이모티콘 블록에 대한 지원이 확대되고 시간 객체를 직접 포맷할 수 있습니다.

SMS OTP 보호

Android는 OTP가 포함된 SMS 메시지에 대한 액세스를 자동으로 지연시켜 SMS OTP 보호를 확대하고 있습니다. 이전에는 SMS 리트리버 해시가 포함된 메시지 전송이 대부분의 앱에서 3시간 동안 지연되는 SMS 리트리버 형식에 주로 초점을 맞췄습니다. 하지만 기본 SMS 앱 등 특정 앱과 해시에 해당하는 앱은 이 지연에서 제외됩니다. 이번 업데이트를 통해 OTP가 포함된 모든 SMS 메시지로 보호 범위가 확대됩니다. 대부분의 앱에서 OTP가 포함된 SMS 메시지는 OTP 하이재킹을 방지하기 위해 3시간이 지난 후에만 액세스할 수 있습니다. SMS_RECEIVED_ACTION 브로드캐스트가 보류되고 SMS 제공업체 데이터베이스 쿼리가 필터링됩니다. 지연 후 이러한 앱에서 SMS 메시지를 사용할 수 있습니다. 

WebOTP 형식 SMS 메시지에 대한 액세스 지연

앱에 SMS 메시지를 읽을 권한이 있지만 도메인 확인에 따라 OTP의 의도된 수신자가 아닌 경우 WebOTP 형식 SMS 메시지는 3시간이 지나야 액세스할 수 있습니다. 이번 변경사항은 메시지에 언급된 도메인과 연결된 앱만 프로그래매틱 방식으로 인증 코드를 읽을 수 있도록 하여 사용자 보안을 개선하기 위해 마련되었습니다. 이 변경사항은 타겟 API 수준과 관계없이 모든 앱에 적용됩니다.

OTP를 사용한 표준 SMS 메시지 액세스 지연

WebOTP 또는 SMS Retriever 형식을 사용하지 않는 OTP가 포함된 SMS 메시지의 경우 대부분의 앱에서 3시간이 지나야 OTP SMS에 액세스할 수 있습니다. 이 변경사항은 Android 17 (API 수준 37) 이상을 타겟팅하는 앱에만 적용됩니다.

기본 SMS, 어시스턴트 앱, 연결된 기기 지원 앱과 같은 특정 앱은 이 지연에서 제외됩니다.

OTP 추출을 위해 SMS 메시지 읽기에 의존하는 모든 앱은 계속 작동하도록 SMS Retriever 또는 SMS User Consent API를 사용하도록 전환해야 합니다.

Android 17 일정

이번 베타에서 3월을 목표로 하는 플랫폼 안정성 마일스톤으로 빠르게 이동할 예정입니다. 이 주요 시점에서 최종 SDK/NDK API가 제공됩니다. 이때부터 앱은 SDK 37을 타겟팅하고 Google Play에 게시하여 Android 17의 정식 출시 전 몇 달 동안 테스트를 완료하고 사용자 의견을 수집할 수 있습니다.

Android Release Timeline.png

한 해 동안의 출시

Android 17은 분기별 출시를 통해 계속 업데이트될 예정입니다. 2분기에 출시될 예정인 버전에서만 계획된 앱 주요 변경사항이 도입됩니다. 4분기에 추가 API와 기능이 포함된 소규모 SDK 출시가 예정되어 있습니다.

Android 출시 일정_2.png

Android 17 시작하기

지원되는 Pixel 기기를 등록하여 이 업데이트와 향후 Android 베타 업데이트를 무선으로 받을 수 있습니다. Pixel 기기가 없다면 Android 스튜디오에서 Android Emulator와 함께 64비트 시스템 이미지를 사용하면 됩니다.

현재 Android 베타 프로그램에 참여하고 있다면 베타 2 무선 업데이트가 제공됩니다.

Android 26Q1 베타를 사용 중이며 26Q1의 최종 안정화 버전을 사용하고 베타를 종료하려면 26Q2 베타 2의 무선 업데이트를 무시하고 26Q1이 출시될 때까지 기다려야 합니다.

의견을 기다리고 있으니 의견 페이지에서 문제를 신고하고 기능 요청을 제출해 주세요. 의견을 빨리 보낼수록 최종 출시에 더 많이 반영할 수 있습니다.

Android 17을 사용해 최적의 환경에서 개발하려면 Android 스튜디오 (Panda)의 최신 미리보기를 사용하는 것이 좋습니다. 설정을 완료한 후에는 다음 작업을 수행해야 합니다.

  • 새 SDK에 대해 컴파일하고 CI 환경에서 테스트하고 의견 페이지의 추적기에서 문제를 신고하세요.
  • 현재 앱의 호환성을 테스트하고, 앱이 Android 17의 변경사항에 영향을 받는지 확인하고, Android 17을 실행하는 기기나 에뮬레이터에 앱을 설치하여 광범위하게 테스트합니다.

Android 17 출시 주기 내내 미리보기/베타 시스템 이미지와 SDK를 정기적으로 업데이트할 예정입니다. 베타 빌드를 설치하면 향후 업데이트가 자동으로 제공됩니다. 

이후 프리뷰 및 베타의 경우 무선으로 업데이트됩니다.

자세한 내용은 Android 17 개발자 사이트를 참고하세요.

대화 참여

올해 말 플랫폼 안정성과 Android 17 일반 안정화 버전 출시를 앞두고 있는 지금도 여러분의 의견은 가장 소중한 자산입니다. Canary 채널의 얼리 어답터이든 베타 2에서 테스트하는 앱 개발자이든 커뮤니티에 가입하고 의견을 제출해 주세요. Google은 여러분의 의견을 기다립니다.

작성자:

계속 읽기