Upgrade to Pro — share decks privately, control downloads, hide ads and more …

What’s new in Android 2025

Avatar for DavidKwon7 DavidKwon7
August 02, 2025
3

What’s new in Android 2025

2025.07.26
Google I/O Extended Incheon 2025

Avatar for DavidKwon7

DavidKwon7

August 02, 2025
Tweet

Transcript

  1. Google I/O Extended 25 Proprietary & Confidential Google io 매우

    간단 소개 동영상 소개 … 페이지 삭제도 ㄱㅊ Hot Trend in Android
  2. Google I/O Extended 25 Proprietary & Confidential 1.Compose 선언형 UI

    프레임워크로, 간결한 Kotlin 코드를 사용하여 Android 앱의 사용자 인터페이스를 빠르고 효율적으로 구축할 수 있게 해줍니다. 2.Multi-device 사용자가 단일 기기에 묶이지 않고 태블릿, 워치, 스마트 TV 등 다양한 안드로이드 기기 간에 유기적으로 연결되고 확장될 수 있게 돕습니다. 3.Gemini Google이 개발한 강력한 AI 모델로 온디바이스 AI 기능부터 복잡한 클라우드 기반 처리까지 Android 기기 전반에 걸쳐 지능적인 기능을 구현하고 사용자 경험을 혁신합니다. 4.KMP 하나의 Kotlin 코드베이스로 Android, iOS, 웹 등 다양한 플랫폼에서 재사용 가능한 코드를 작성하여 개발 효율성을 극대화하는 프레임워크입니다 . Hot Trend in Android
  3. Google I/O Extended 25 Proprietary & Confidential of top 1k

    apps in the Play Store use jetpack compose
  4. Google I/O Extended 25 Proprietary & Confidential • 사용자 정보를

    자동으로 입력해 주는 편리한 기능 • 사용자 이름, 비밀번호, 주소 등 시간 절약과 오타 방지 • 토글 버튼으로 on/off Autofill
  5. BOM 2025.05.01 TextField( modifier = Modifier.semantics { // id인 경우

    contentType = ContentType.Username // password인 경우 contentType = ContentType.Password } ) Autofill
  6. alpha BOM 2025.05.01 // id TextField( … modifier = Modifier.contentType(Username)

    ) // pw SecureTextField( … modifier = Modifier.contentType(Password) ) Autofill
  7. Google I/O Extended 25 Proprietary & Confidential 텍스트가 박스 크기에

    맞춰 자동으로 조정되는 기능 Autosize text
  8. BOM 2025.05.01 Box { Text( text = myTest, maxLines =

    1, autoSize = TextAutoSize.StepBased( minFontSize = 20.sp, maxFontSize = 40.sp, ) ) } Autosize Text
  9. BOM 2025.05.01 AutoSizeText( text = "Hello World", width = 100.dp

    ) AutoSizeText( text = "Hello World", width = 160.dp ) AutoSizeText( text = "Hello World", width = 200.dp ) Autosize Text
  10. BOM 2025.05.01 LookaheadScope { Box( Modifier .width(if(expanded) 180.dp else 110.dp)

    .offset(x = if (expanded) 0.dp else 100.dp) .animateBounds(lookaheadScope = this@LookaheadScope) .background(Color.LightGray, shape = RoundedCornerShape(12.dp)) .height(50.dp) ) { Text("Layout Content", Modifier.align(Alignment.Center)) } } Animate bounds
  11. Google I/O Extended 25 Proprietary & Confidential onLayoutRectChanged • 컴포저블의

    위치에 대한 가시성 구현. • 유사한 `onGloballyPositioned` 는 이미 위치 추적에 사용 중. 그렇지만 `onLayoutRectChanged`를 사용하면 좀 더 뛰어난 성능을 체험할 수 있음. • throttle, debounce 추가 가능 Visibility tracking
  12. Box( modifier .size(...) .offset(...) .border(...) .background(...) .onLayoutRectChanged { left =

    it.boundsInRoot.left.toString right = it.boundsInRoot.right.toString top = it.boundsInRoot.top.toString bottom = it.boundsInRoot.bottom.toString } // 혹은 throttle, debounce 추가 가능 .onLayoutRectChanged { throttleMillis = 200, debounceMillis = 10000 } ) BOM 2025.05.01 Visibility tracking
  13. Google I/O Extended 25 Proprietary & Confidential Compose alpha 버전에서는

    위의 저수준 API(onLayoutRectChanged)를 활용하여 고수준 API 생성. • visibilityChanged ◦ Composable의 가시성이 변경될 때마다 콜백을 제공 Visibility tracking
  14. alpha BOM 2025.05.01 LazyColumn { items(100) { var visible by

    remember { mutableStateOf(false) } val backgroundColor by animateColorAsState( if (visible) Color.Green else Color.Cyan ) Box( modifier = Modifier .onVisibilityChanged { visible = it } ) } } Visibility tracking
  15. Google I/O Extended 25 Proprietary & Confidential Compose alpha 버전에서는

    위의 저수준 API(onLayoutRectChanged)를 활용하여 고수준 API 생성. • onFirstVisible ◦ 사용자의 화면에 처음으로 완전히 보이게 될 때 딱 한 번 지정된 콜백 실행 Visibility tracking
  16. LazyColumn { items(100) { var impression by remember { mutableStateOf(0)

    } Box( modifier = Modifier .onFirstVisible { impression++ } .. ) { Text( modifier = Modifier.align(Alignment.Center), text = impression.toString()) } Spacer(Modifier.height(20.dp)) } } Visibility tracking alpha BOM 2025.05.01
  17. Google I/O Extended 25 Proprietary & Confidential • 기존 Navigation은

    Compose와 적합하지 않음 • 적용형 레이아웃 시스템 등장 • 백스택을 직접 관리 Navigation3
  18. Google I/O Extended 25 Proprietary & Confidential preview, playerView Compose

    기반으로 개발. 기초부터 개발하기 때문에 좀 더 시간이 걸릴 것으로 예상 Camera, Media
  19. Google I/O Extended 25 Proprietary & Confidential Camera, Media //

    Media3 implementation("androidx.media3:media3-ui-compose:1.7.1") // CameraX implementation("androidx.camera:camera-compose:1.5.0-beta01")
  20. /// auto-play video @Composable private fun VideoPlayer( player: Player?, //

    from media3 modifier: Modifier = Modifier ) { Box(modifier) { PlayerSurface(player) // from media3-ui-compose player?.let { MyPlayPauseButton(it, Modifier.align(BottomEnd).padding(16.dp)) } } } Media3
  21. /// play/pause Button @Composable fun MyPlayPauseButton(player: Player, modifier: Modifier =

    Modifier) { val state = rememberPlayPauseButtonState(player) // from media3-ui-compose OutlinedIconButton( onClick = state::onClick, enabled = state.isEnabled, modifier = modifier, ) { Icon( painterResource(if(state.showPlay) R.drawable.play else R.drawable.pause), stringResource(if(state.showPlay) R.string.play else R.string.pause) ) } } Media3
  22. @UnstableApi @Composable fun rememberPlayPauseButtonState(player: Player): PlayPauseButtonState { val playPauseButtonState =

    remember(player) { PlayPauseButtonState(player) } LaunchedEffect(player) { playPauseButtonState.observe() } return playPauseButtonState } Media3
  23. Google I/O Extended 25 Proprietary & Confidential • Room •

    DataStore • Collections • SavedState • View Model • Lifecycle • Paging KMP Stable version
  24. Google I/O Extended 25 Proprietary & Confidential • 간단하게 사용자의

    신분에 대한 정보를 인증할 때 사용 • 현재 한국에서는 Google Wallet 기능이 도입되지 않았기 때문에, 사용 불가능 Digital Credential
  25. val digitalCredentialOption = GetDigitalCredentialOption(/*server JSON*/) val getCredentialRequest = GetCredentialRequest(listOf(digitalCredentialOption) //

    Use Digital Credentials with your verification logic val getCredentialResponse = credentialManager.getCredential(context, getCredentialRequest) Digital Credential
  26. Google I/O Extended 25 Proprietary & Confidential 새 기기를 설정할

    때, 복잡한 설정 없이 App 계정을 복구할 수 있습니다. (Android 9이상) • 원활한 사용자 환경 • 사용자 참여도 증가 • 개발 비용 감소 Restore Credentials
  27. // Credentials request 객체 생성 val restoreCredentialOption = GetRestoreCredentialOption(/*Server JSON*/)

    val = getCredentialRequest = GetCredentialRequest(listOf(restoreCredentialOption)) // credentialManager 객체에서 createCredential() 메서드 호출합니다 val credentialManager = CredentialManager.create(context) // 생성된 이 복원 사용자 인증 정보는 webauthn 사용자 인증 정보 유형이며 복원키라고 합니다. val response = credentialManager.createCredential(context, createRestoreRequest) Restore Credential
  28. // 서버에서 인증 JSON 가져옵니다. val authenticationJson = fetchAuthenticationJson() //

    GetRestoreCredentialRequest 객체를 생성합니다. val options = GetRestoreCredentialOption(authenticationJson) val getRequest = GetCredentialRequest(listOf(options)) // restore key 두 가지 시나리오에서 가져올 수 있습니다. // 1. 기기에서 앱을 처음 실행할 때 복원 키를 가져옵니다. // 2. onRestore 콜백에서(앱이 백업 에이전트를 구현하는 경우) val response = credentialManager.getCredential(context, getRequest) Restore Credential
  29. // ClearCredentialStateRequest 객체를 생성합니다. val clearRequest = ClearCredentialStateRequest(TYPE_CLEAR_RESTORE_CREDENTIAL) // 사용자

    로그아웃 시 restore key를 지웁니다. val response = credentialManager.clearCredentialState(clearRequest) Restore Credential
  30. Google I/O Extended 25 Proprietary & Confidential • 앱이 사용자

    개인정보를 침해하지 않으면서 사용자 데이터에 접근할 수 있는 표준 마련이 목적 • Privacy Sandbox의 핵심은 device identifier에 대한 접근 권한을 제공하지 않고도 모바일 광고, 마케팅 측정 및 추적을 허용하도록 설계되었습니다. Privacy Sandbox
  31. Google I/O Extended 25 Proprietary & Confidential [Before] 광고 id:

    Google Play 서비스가 제공하는 재설정 가능한 고유 식별자입니다. 안드로이드 기기마다 할당되며, 사용자가 직접 재설정하거나 광고 개인설정 옵션을 끌 수 있습니다. 하지만 기본적으로는 활성화되어 있었고, 앱과 광고 SDK는 이 광고 ID를 통해 사용자를 추적하고 데이터를 연결했습니다. 광고 id 및 데이터 수집 : 광고 id / 기기정보(기기모델,OS버전, 화면해상도, ip주소 등 기본적인 기기정보), 앱 사용 데이터(현재 사용중인 앱 정보, 특정 활동(게임 레벨업, 상품 검색 및 구매), 위치 권한이 있다면 위치 정보 Privacy Sandbox
  32. Google I/O Extended 25 Proprietary & Confidential [문제점] • 광고의

    개인화 수준을 높였지만 프라이버시 침해 문제 발생 ◦ 광고 id를 통해 사용자의 다양한 개인 정보 침해 가능성 ◦ 사용자의 데이터가 어떻게 사용되는지 파악 불가능광고 ID 재설정이나 개인 맞춤 광고 거부 옵션이 있지만 사용자가 모르는 경우 빈번 Privacy Sandbox
  33. Google I/O Extended 25 Proprietary & Confidential [After] privacy sandbox를

    사용하면 Topics Api를 통해 기기 내부에서 사용자의 관심사 카테고리를 추출해서, 이 데이터를 광고 SDK에 전달합니다. 광고 SDK는 이러한 카테고리를 기반으로 하여 특정 사용자의 관심사 카테고리에 해당하는 광고를 보여줍니다. Privacy Sandbox
  34. Google I/O Extended 25 Proprietary & Confidential Android 16 compileSDK

    36 new API • 토글 하나로 Device Protection 기능 on/off 가능. • AAPM은 위험에 노출된 사용자를 위해 Android 기기의 보안을 강화하는 것을 목표로 하는 새로운 기능입니다. 기기 보호를 강화하도록 설계된 사전 결정된 구성 세트를 구현하는 단일 설정으로 작동합니다. Android Advanced Protection Mode
  35. Google I/O Extended 25 Proprietary & Confidential • 보안 ◦

    침입로깅 : 침해가 의심될 경우 기기에 대한 심층적인 보안 조사 및 분석을 수행할 수 있습니다. 보안 로그는 암호화를 통해 클라우드에 안전하게 저장되므로 보안 정보를 직접 관리할 수 있습니다. Android Advanced Protection Mode
  36. Google I/O Extended 25 Proprietary & Confidential • 장치 안전

    ◦ 도난 감지 잠금: 도난을 암시하는 의심스러운 활동이 감지되면 기기가 자동으로 잠깁니다. ◦ 오프라인 기기 잠금: 잠금 해제된 기기가 장시간 오프라인 상태일 경우 자동으로 잠깁니다. ◦ 비활성 재부팅: 기기가 72시간 동안 잠긴 경우 자동으로 다시 시작됩니다. ◦ USB 보호: 장치가 잠금 상태일 때 새로운 USB 연결에 대해서만 충전을 기본 설정하여 USB 포트를 악용하려는 물리적 공격을 차단합니다. Android Advanced Protection Mode
  37. Google I/O Extended 25 Proprietary & Confidential • 앱 ◦

    Google Play Protect: Android에 원치 않는 소프트웨어 차단 기능입니다. ◦ 알 수 없는 앱: 사전 설치된 앱 스토어에서만 다운로드할 수 있습니다. ◦ 메모리 태깅 확장(MTE): 기기에서 지원되는 앱의 경우 MTE가 자동으로 활성화됩니다. Android Advanced Protection Mode
  38. Google I/O Extended 25 Proprietary & Confidential • 네트워크 ◦

    2G 네트워크 보호: 기기가 더 이상 2G 네트워크에 연결되지 않습니다. ◦ 안전하지 않은 네트워크 자동 재연결 비활성화: 기기가 더 이상 안전하지 않은 것으로 알려진 Wi-Fi 네트워크에 자동으로 재연결되지 않습니다 Android Advanced Protection Mode
  39. Google I/O Extended 25 Proprietary & Confidential 안전하지 않은 웹사이트로부터

    보호하는 기능 스팸 전화로부터 보호 기능 Google 메시지에서 스팸 및 사기로부터 보호 기능 Android Advanced Protection Mode
  40. Google I/O Extended 25 Proprietary & Confidential 이러한 기능 중

    일부 또는 대부분을 알고 계실 수도 있습니다. 그 이유는 이러한 기능 중 상당수가 Android에 이미 존재하기 때문입니다. 고급 보호는 이러한 기능을 켜고 개별적으로 비활성화할 수 없도록 합니다. Android Advanced Protection Mode
  41. public class AdvancedProtectionManager() { // Check the current status public

    boolean isAdvancedProtectionEnabled(); // Be alerted when status changes public void registerAdvancedProtectionCallback(Executor executor, Callback callback); public void unregisterAdvancedProtectionCallback(Callback callback); } public class Callback() { // Called when advanced protection state changes void onAdvancedProtectionChanged(boolean enabled); } Android Advanced Protection Mode
  42. Google I/O Extended 25 Proprietary & Confidential Android 16 /

    One UI 7.0 지원 신원 확인을 요청하는 데 사용됩니다. 신원 확인은 장치가 신뢰할 수 있는 장소 외부에 있을 때 민감한 표면에 접근하기 위해 3등급 생체 인증이 필요한 기능입니다. 도난당한 스마트폰이라 할지라도 도둑이 PIN이나 비밀번호를 알고 있다고 해도 중요한 정보에 접근하거나 보안 기능을 무력화하는 것을 막기 위함입니다. Identity Check
  43. Google I/O Extended 25 Proprietary & Confidential API 36에 추가

    / One UI 7.0 지원 갤럭시 기기에 적용 One UI 7.0은 Android15 대상인데 왜 가능하지..? 검색해보니 Android 16 출시 전 미리 도입 Identity Check
  44. // Is Identity Check active? val isIdentityCheckActive = biometricManager.canAuthenticate(Authenticators.IDENTITY_CHECK) !=

    BiometricManager.BIOMETRIC_ERROR_IDENTITY_CHECK_NOT_ACTIVE if(isIdentityCheckActive) { // Add an extra auth prompt val prompt = BiometricPrompt.Builder() .setAllowedAuthenticators(Authenticators.IDENTITY_CHECK).build(); prompt.authenticate( … ) } Identity Check
  45. Google I/O Extended 25 Proprietary & Confidential Active User Growth

    over last 6 months Runa, Mi Fitness, Garmin (coming June 2025)
  46. Google I/O Extended 25 Proprietary & Confidential Health Connect API

    복잡성 감소 단일 API 세트를 사용하여 사용자의 건강/피트니스 데이터에 엑세스하여 효율성 증대 표준화된 데이터 스키마 다양한 앱과 기기에서 데이터를 읽고 쓰고 집계 중앙 집중식 개인 정보 보호 설정 수십억 사용자를 위한 더 나은 환경을 빌드하여 사용자가 데이터에 대한 엑세스 권한을 세분화하여 쉽게 제어 및 관리
  47. Google I/O Extended 25 Proprietary & Confidential Android 16 /

    compileSDK36 / new API 사용자가 자신의 의료 기록을 기기에 안전하게 저장하고, 통제 하에 의료 앱과 공유할 수 있게 하는 플랫폼 기능입니다. Medical Records APIs
  48. // availability 체크 val isBackgroundReadAvailable = healthConnectClient.features.getFeatureStatus( FEATURE_READ_HEALTH_DATA_IN_BACKGROUND) == HealthConnectFeatures.FEATURE_STATUS_AVAILABLE)

    // permission 체크 val isBackgroundReadPermitted = PERMISSION_READ_HEALTH_DATA_IN_BACKGROUND in healthConnectClient.permissionController.getGrantedPermissionons() // 최종 확인 val canBackgroundRead = isBackgroundReadAvailable && isBackgroundReadPermitted Medical Records APIs
  49. Google I/O Extended 25 Proprietary & Confidential Focus on Large

    Screens - Targeting SDK 36 on display 600dp + - Certain manifest tags ignored Adaptive Apps with Android 16
  50. Google I/O Extended 25 Proprietary & Confidential Adaptive Apps with

    Android 16 Screen Orientation Resizeable Activities Aspect Ratios
  51. Google I/O Extended 25 Proprietary & Confidential no more assumptions

    about orientations or aspect ratios on activity recreation
  52. Google I/O Extended 25 Proprietary & Confidential 1 SDK36 해당사항은

    SDK 36부터 해당합니다. 2 No Games 게임은 해당 설정에 예외입니다. 3 Big Screens 앞서 설명한 것과 같이 300dp 이상인 screen에서 적용이 됩니다. 4 User Option 사용자가 원하지 않는 경우 이를 사용하지 않을 수 있습니다. 5 Opt-Out 일시적으로 사용 중지할 수 있습니다.
  53. Google I/O Extended 25 Proprietary & Confidential 대부분 독립적인 Wear

    OS 앱(APK) 형태 kotlin 또는 Java 코드 기반
  54. Google I/O Extended 25 Proprietary & Confidential Watch Face Format(WFF)

    이라는 선언적 XML 형식의 파일로 정의됨 • 개발 난이도 하락 • 성능 최적화 Watch Face Studio Watch Face Push
  55. Google I/O Extended 25 Proprietary & Confidential ?? 클라우드만을 통해

    커스텀 화면 설정 가능 New Health Permissions Granularity
  56. Google I/O Extended 25 Proprietary & Confidential 시간에 민감한 작업에

    대해 나타낼 때 사용 가능 Live Update https://developer.android.com/develop/ui/views/notifications/liv e-update?hl=ko
  57. Google I/O Extended 25 Proprietary & Confidential Bringing Grab’s Live

    Activity to Android: Enhancing user experience through custom notifications ios는 이미 적용 중?
  58. val progressStyle = buildBaseNotification(this) .setId(id) .setContentTitle(“Initializing trip”) .setContentText(“Searching for driver”)

    .setSmallIcon(R.drawble.ic_notification_icon) .setStyle(Notification.Style.ProgressStyle() .setProgressIndeterminate(true)) .setShortCriticalText(...)) .build() notificationManager.notify(id, progressStyle.build()) Live Update
  59. Google I/O Extended 25 Proprietary & Confidential 현재 pixel tablet에서는

    hub mode를 사용할 수 있고, 추후에 mobile phone에도 적용 예정 Widget - hub mode
  60. Google I/O Extended 25 Proprietary & Confidential • 스마트 홈

    제어 • 엔터테인먼트 허브 • 정보 제공 • 핸즈 프리 모드 Widget - hub mode
  61. Google I/O Extended 25 Proprietary & Confidential • Widget을 통해

    App 외부에서도 편리하게 이용 가능 • Compose를 기반으로 App Widget 개발 Widget - Jetpack Glance https://github.com/android/platform-samples/blob/main/sample s/user-interface/appwidgets/screenshots/ActionListLayout.png
  62. Google I/O Extended 25 Proprietary & Confidential • Android12부터 도입

    • Widget Metrics API는 앱 위젯(App Widgets)이 다양한 기기와 화면 크기에서 더욱 유연하고 일관되게 표시되도록 돕는 중요한 개발자 도구 Widgets Metrics API
  63. Google I/O Extended 25 Proprietary & Confidential Impression, Interaction 관련

    기능을 추가하여 새로운 API 올해 출시 예정 Widgets Metrics API
  64. Google I/O Extended 25 Proprietary & Confidential • Android 16부터

    opt out 옵션 제공되지 않음. • 업데이트 할 때, 콘텐츠가 시스템 표시줄에 가려지지 않게 조절 필요 Edge to edge goo.gle/e2e-design
  65. Google I/O Extended 25 Proprietary & Confidential • predictive Back은

    이미 Compose Adaptive와 Navigation3에 통합 • 하단의 3개 버튼 탐색에도 Animation 사용 가능 Predictive Back
  66. Google I/O Extended 25 Proprietary & Confidential 특정 효과(effect)를 한번

    정의하면 cameraX와 Media3에서 함께 적용 가능 Media&Camera
  67. Google I/O Extended 25 Proprietary & Confidential Android 15 에서

    Auto exposure mode 도입했지만 Auto exposure mode 기능이 없는 기기에서는 사용 불가능. 그렇기에 Google Low Light Boost 도입. 사진을 컴퓨터적으로 계산 (computational photography)하고 ML 활용하여 카메라 밝기를 실시간 및 동적으로 조절 Google Low Light Boost
  68. Google I/O Extended 25 Proprietary & Confidential Media3의 PreloadManager는 특히

    짧은 형식의 비디오 피드나 사용자가 미디어 아이템을 빠르게 전환할 가능성이 있는 앱(예: 틱톡, 릴스 등)에서 재생 시작 지연 시간(startup latency)을 최소화하는 데 필수적입니다. Preload Manager
  69. // Setup PreloadManager val targetPreloadControl = TargetPreloadControl() val preloadBuilder =

    DefaultPreloadManager.Builder(context, targetPreloadControl) // Create a preloadManger val preloadManager = preloadBuilder.build() val player = prelaodBuilder.buildExoPlayer() // Customize duration to preload, by default as per ranking data class TargetPreloadControl : TargetPreloadStatusControl<Int> { override fun getTargetPreloadStatus(rankingData: Int): DefaultPreloadManager.Status { // Preload first 3 seconds of the video return DefaultPreloadManager.Status(STAGE_LOADED_FOR_DURATION_MS, 3000L) } } Preload Manager
  70. Google I/O Extended 25 Proprietary & Confidential Android 16에서는 새로운

    오디오 PCM Offload 모드를 도입하여 앱에서 오디오 재생 시 전력 소비를 줄여 재생 시간을 늘리는 기술 도입 예정 Native PCM Audio offload
  71. Google I/O Extended 25 Proprietary & Confidential • on-device AI

    모델 • 인터넷 연결 없이 기기 내에서 구동 가능 • 실시간 응답과 개인정보 보호 • 경량화된 Gemini 모델 Gemini Nano https://developer.android.com/ai/gemini-nano/ai-edge-sdk?hl=ko
  72. // Initialize summarizer val summarizerOptions = SummarizerOptions.builder(context) .setInputType(InputType.ARTICLE)) .setOutputType(OutputType.ONE_BULLET) .build()

    val summarizer = Summarization.getClient(summarizerOptions) // Handle feature downloads .. val article = "Today we are announcing a new set of GenAI APIs..." val summarizationRequest = SummarizationRequest.builder(article).build() val summarizationResult = summarizer.runInference(summarizationRequest) val summary = summarizationResult.get().summary Gemini Nano
  73. Google I/O Extended 25 Proprietary & Confidential • 클라우드 기반

    실행 • 인터넷 연결 필수 • 확장성 및 관리 용이성 Gemini Live
  74. // Initialize the vertex AI service and create a 'LiveModel'

    instance val model = Firebase.vertexAI.liveModel( modelName = "gemini-2.0-flash-live-preview-04-09", generationConfig = liveGenerationConfig { responseModality = ResponseModality.AUDIO } ) val session = model.connect() // You can also create your own recorder and handle the stream session.startAudioCnversation() Gemini Live