Android 17이 오늘 베타 3으로 공식적으로 플랫폼 안정성에 도달했습니다. 즉, API 노출 영역이 잠겼습니다. 최종 호환성 테스트를 실행하고 Android 17을 타겟팅하는 앱을 Play 스토어에 푸시할 수 있습니다. 또한 베타 3에는 더 나은 보안의 고도로 통합된 애플리케이션을 빌드하는 데 도움이 되는 다양한 새로운 기능이 도입되었습니다.
앱, 라이브러리, 도구, 게임 엔진을 준비하세요.
SDK, 라이브러리, 도구 또는 게임 엔진을 개발하는 경우 다운스트림 앱 및 게임 개발자가 호환성 문제로 인해 차단되지 않도록 하고 최신 SDK 기능을 타겟팅할 수 있도록 지금 필요한 업데이트를 준비하는 것이 더욱 중요합니다. Android 17을 완전히 지원하려면 업데이트가 필요한지 다운스트림 개발자에게 알리세요.
테스트에는 Android 17 베타 3을 실행하는 기기 또는 에뮬레이터에 Google Play 또는 기타 수단을 사용하여 프로덕션 앱 또는 라이브러리나 엔진을 사용하는 테스트 앱을 설치하는 작업이 포함됩니다. 앱의 모든 흐름을 살펴보고 기능 또는 UI 문제가 없는지 확인하세요. 동작 변경사항을 검토하여 테스트에 초점을 맞추세요. 각 Android 출시에는 개인 정보 보호, 보안, 전반적인 사용자 환경을 개선하는 플랫폼 변경사항이 포함되어 있으며 이러한 변경사항은 앱에 영향을 미칠 수 있습니다. 다음은 중점적으로 살펴봐야 할 몇 가지 변경사항입니다.
- 대형 화면의 크기 조절: Android 17을 타겟팅하면 더 이상 대형 화면에서 방향, 크기 조절, 가로세로 비율 제약조건을 유지하지 않도록 선택할 수 없습니다.
- 동적 코드 로드: 앱이 Android 17 이상을 타겟팅하는 경우 DEX 및 JAR 파일에 대해 Android 14에서 도입된 더 안전한 동적 코드 로드 (DCL) 보호가 이제 네이티브 라이브러리로 확장됩니다. System.load()를 사용하여 로드된 모든 네이티브 파일은 읽기 전용으로 표시해야 합니다. 그러지 않으면 시스템에서 UnsatisfiedLinkError가 발생합니다.
- 기본적으로 CT 사용 설정: 인증서 투명성 (CT)이 기본적으로 사용 설정됩니다. (Android 16에서는 CT를 사용할 수 있지만 앱이 선택해야 했습니다.)
- 로컬 네트워크 보호: Android 17 이상을 타겟팅하는 앱은 기본적으로 로컬 네트워크 액세스가 차단됩니다. 가능하면 개인 정보 보호 선택 도구를 사용하도록 전환하고 광범위하고 지속적인 액세스를 위해 새로운 ACCESS_LOCAL_NETWORK를 사용하세요.
미디어 및 카메라 개선사항
사진 선택 도구 맞춤설정 옵션
이제 Android에서 사진 선택 도구의 시각적 프레젠테이션을 맞춤설정하여 앱의 사용자 인터페이스를 더 잘 보완할 수 있습니다. 새로운 PhotoPickerUiCustomizationParams API를 활용하면 그리드 뷰 가로세로 비율을 표준 1:1 정사각형에서 9:16 세로 디스플레이로 수정할 수 있습니다. 이 유연성은 ACTION_PICK_IMAGES 인텐트와 삽입된 사진 선택 도구 모두로 확장되어 사용자가 미디어와 상호작용할 때 일관된 미적 감각을 유지할 수 있습니다.
이는 개인 정보 보호 Android 사진 선택 도구를 앱 환경에 원활하게 통합하기 위한 Google의 노력의 일환입니다. 가장 네이티브한 환경을 위해 사진 선택 도구를 앱에 직접 삽입하는 방법을 자세히 알아보세요.
val params = PhotoPickerUiCustomizationParams.Builder() .setAspectRatio(PhotoPickerUiCustomizationParams.ASPECT_RATIO_PORTRAIT_9_16) .build() val intent = Intent(MediaStore.ACTION_PICK_IMAGES).apply { putExtra(MediaStore.EXTRA_PICK_IMAGES_UI_CUSTOMIZATION_PARAMS, params) } startActivityForResult(intent, REQUEST_CODE)
RAW14 이미지 형식 지원: Android 17에서는 새로운 ImageFormat.RAW14 상수를 통해 고급 디지털 사진의 사실상 업계 표준인 RAW14 이미지 형식 지원을 도입합니다. RAW14는 4개의 연속된 픽셀이 7바이트로 압축되는 밀집된 레이아웃을 사용하는 단일 채널, 픽셀당 14비트 형식입니다.
공급업체 정의 카메라 확장 프로그램: Android 17에서는 공급업체 정의 확장 프로그램을 추가하여 하드웨어 파트너가 맞춤 카메라 확장 프로그램 모드를 정의하고 구현하여 '초해상도' 또는 최첨단 AI 기반 개선사항과 같은 최신 카메라 기능에 액세스할 수 있도록 합니다. isExtensionSupported(int) API를 사용하여 이러한 모드를 쿼리할 수 있습니다.
카메라 기기 유형 API: 새로운 Android 17 API를 사용하면 기본 기기 유형을 쿼리하여 카메라가 내장 하드웨어인지, 외부 USB 웹캠인지, 가상 카메라인지 확인할 수 있습니다.
블루투스 LE 오디오 보청기 지원
이제 Android에는 블루투스 저전력 (BLE) 오디오 보청기를 위한 특정 기기 카테고리가 포함되어 있습니다. AudioDeviceInfo.TYPE_BLE_HEARING_AID 상수가 추가됨에 따라 이제 앱에서 보청기를 일반 헤드셋과 구분할 수 있습니다.
val audioManager = getSystemService(Context.AUDIO_SERVICE) as AudioManager
val devices = audioManager.getDevices(AudioManager.GET_DEVICES_OUTPUTS)
val isHearingAidConnected = devices.any { it.type == AudioDeviceInfo.TYPE_BLE_HEARING_AID }보청기를 위한 세분화된 오디오 라우팅
Android 17에서는 사용자가 특정 시스템 사운드가 재생되는 위치를 독립적으로 관리할 수 있습니다. 연결된 보청기 또는 기기의 내장 스피커로 알림, 벨소리, 알람을 라우팅하도록 선택할 수 있습니다.
확장된 HE-AAC 소프트웨어 인코더
Android 17에서는 시스템에서 제공하는 확장된 HE-AAC 소프트웨어 인코더를 도입합니다. 이 인코더는 통합 음성 및 오디오 코딩을 사용하여 낮은 비트 전송률과 높은 비트 전송률을 모두 지원합니다. MediaCodec API를 통해 이 인코더에 액세스하거나 c2.android.xheaac.encoder 이름을 사용하거나 audio/mp4a-latm MIME 유형을 쿼리할 수 있습니다.
val encoder = MediaCodec.createByCodecName("c2.android.xheaac.encoder")
val format = MediaFormat.createAudioFormat(MediaFormat.MIMETYPE_AUDIO_AAC, 48000, 1)
format.setInteger(MediaFormat.KEY_BIT_RATE, 24000)
format.setInteger(MediaFormat.KEY_AAC_PROFILE, MediaCodecInfo.CodecProfileLevel.AACObjectXHE)
encoder.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE)성능 및 배터리 개선사항
유휴 상태 알람을 위한 리스너 지원으로 웨이크 잠금 감소
Android 17에서는 PendingIntent 대신 OnAlarmListener를 허용하는 AlarmManager.setExactAndAllowWhileIdle의 새로운 변형을 도입합니다. 이 새로운 콜백 기반 메커니즘은 현재 지속적인 웨이크 잠금에 의존하여 소켓 연결을 유지하는 메시지 앱과 같은 주기적인 작업을 실행하는 앱에 적합합니다.
val alarmManager = getSystemService(AlarmManager::class.java)
val listener = AlarmManager.OnAlarmListener {
// Do work here
}
alarmManager.setExactAndAllowWhileIdle(
AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime() + 60000,
listener,
null
)개인 정보 보호 업데이트
시스템 제공 위치 버튼
Android에서는 Android Jetpack 라이브러리를 사용하여 앱의 레이아웃에 직접 삽입할 수 있는 시스템 렌더링 위치 버튼을 도입합니다. 사용자가 이 시스템 버튼을 탭하면 앱에 현재 세션에만 정확한 위치 액세스 권한이 부여됩니다. 이를 구현하려면 USE_LOCATION_BUTTON 권한을 선언해야 합니다.
터치 및 물리적 키보드를 위한 개별 비밀번호 공개 상태 설정
이 기능은 기존 '비밀번호 표시' 시스템 설정을 두 가지 고유한 사용자 환경설정으로 분할합니다. 하나는 터치 기반 입력용이고 다른 하나는 물리적 (하드웨어) 키보드 입력용입니다. 이제 물리적 키보드를 통해 입력된 문자는 기본적으로 즉시 숨겨집니다.
val isPhysical = event.source and InputDevice.SOURCE_KEYBOARD == InputDevice.SOURCE_KEYBOARD val shouldShow = android.text.ShowSecretsSetting.shouldShowPassword(context, isPhysical)
보안
강제 읽기 전용 동적 코드 로드
코드 삽입 공격에 대한 보안을 개선하기 위해 Android에서는 이제 동적으로 로드된 네이티브 라이브러리가 읽기 전용이어야 한다고 적용합니다. 앱이 Android 17 이상을 타겟팅하는 경우 System.load()를 사용하여 로드된 모든 네이티브 파일은 미리 읽기 전용으로 표시해야 합니다.
val libraryFile = File(context.filesDir, "my_native_lib.so") // Mark the file as read-only before loading to comply with Android 17+ security requirements libraryFile.setReadOnly() System.load(libraryFile.absolutePath)
양자 내성 암호화 (PQC) 하이브리드 APK 서명
양자 컴퓨팅의 미래 발전에 대비하기 위해 Android에서는 새로운 v3.2 APK 서명 체계를 통해 양자 내성 암호화 (PQC) 지원을 도입합니다. 이 체계는 하이브리드 접근 방식을 활용하여 기존 서명과 ML-DSA 서명을 결합합니다.
사용자 환경 및 시스템 UI
외부 디스플레이의 위젯 지원 개선
이 기능은 DP 또는 SP 단위를 사용하여 픽셀 밀도가 다른 연결된 디스플레이 또는 외부 디스플레이에 앱 위젯이 표시될 때 시각적 일관성을 개선합니다.
val options = appWidgetManager.getAppWidgetOptions(appWidgetId) val displayId = options.getInt(AppWidgetManager.OPTION_APPWIDGET_DISPLAY_ID) val remoteViews = RemoteViews(context.packageName, R.layout.widget_layout) remoteViews.setViewPadding( R.id.container, 16f, 8f, 16f, 8f, TypedValue.COMPLEX_UNIT_DIP )
홈 화면의 숨겨진 앱 라벨
이제 Android에서는 홈 화면 작업공간에서 앱 이름 (라벨)을 숨기는 사용자 설정을 제공합니다. 앱 아이콘이 고유하고 인식 가능한지 확인합니다.
데스크톱 대화형 PIP 모드
기존 PIP 모드와 달리 이러한 고정된 창은 데스크톱 모드에서 다른 애플리케이션 창 위에 항상 표시되는 동안 대화형으로 유지됩니다.
val appTask: ActivityManager.AppTask = activity.getSystemService(ActivityManager::class.java).appTasks[0] appTask.requestWindowingLayer( ActivityManager.AppTask.WINDOWING_LAYER_PINNED, context.mainExecutor, object : OutcomeReceiver<Int, Exception> { override fun onResult(result: Int) { if (result == ActivityManager.AppTask.WINDOWING_LAYER_REQUEST_GRANTED) { // Task successfully moved to pinned layer } } override fun onError(error: Exception) {} } )
새롭게 디자인된 화면 녹화 툴바
핵심 기능
VPN 앱 제외 설정
새로운 ACTION_VPN_APP_EXCLUSION_SETTINGS 인텐트를 사용하면 앱에서 사용자가 VPN 터널을 우회할 애플리케이션을 선택할 수 있는 시스템 관리 설정 화면을 실행할 수 있습니다.
val intent = Intent(Settings.ACTION_VPN_APP_EXCLUSION_SETTINGS) if (intent.resolveActivity(packageManager) != null) { startActivity(intent) }
OpenJDK 25 및 21 API 업데이트
이 업데이트는 최신 유니코드 지원 및 TLS의 명명된 그룹에 대한 향상된 SSL 지원을 비롯해 OpenJDK 21 및 OpenJDK 25의 광범위한 기능과 개선사항을 제공합니다.
Android 17 시작하기
지원되는 Pixel 기기를 등록하거나 Android Emulator에서 64비트 시스템 이미지를 사용할 수 있습니다.
- 새 SDK에서 컴파일하고 의견 페이지에서 문제를 신고합니다.
- 현재 앱의 호환성을 테스트하고 앱이 Android 17의 변경사항에 영향을 받는지 알아봅니다.
자세한 내용은 Android 17 개발자 사이트를 참고하세요.
계속 읽기
-
제품 소식
오늘 Google은 복잡한 추론 및 자율 도구 호출 기능으로 설계된 최신 최첨단 오픈 모델인 Gemma 4로 Android 개발을 개선합니다.
Matthew McCullough • 2분 읽기
-
제품 소식
Android 생태계의 핵심은 사용자 신뢰에 대한 공동의 노력입니다. 모바일 환경이 발전함에 따라 민감한 정보를 보호하는 Google의 접근 방식도 발전하고 있습니다.
Robert Clifford • 3분 읽기
-
제품 소식
Google은 양질의 Android 앱을 더 빠르고 쉽게 빌드할 수 있도록 지원하고자 하며, 생산성을 높이는 한 가지 방법은 AI를 손쉽게 사용할 수 있도록 하는 것입니다.
Matthew McCullough • 2분 읽기
소식 받아 보기
Android 개발 관련 최신 정보를 이메일로 받아 보세요. 매주