Share
Embed
Transcript
114 slides
-
Google I/O Extended 25 Proprietary & Confidential Google io 매우
간단 소개 동영상 소개 … 페이지 삭제도 ㄱㅊ Hot Trend in Android -
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 -
Google I/O Extended 25 Proprietary & Confidential of top 1k
apps in the Play Store use jetpack compose -
Google I/O Extended 25 Proprietary & Confidential • 사용자 정보를
자동으로 입력해 주는 편리한 기능 • 사용자 이름, 비밀번호, 주소 등 시간 절약과 오타 방지 • 토글 버튼으로 on/off Autofill -
BOM 2025.05.01 TextField( modifier = Modifier.semantics { // id인 경우
contentType = ContentType.Username // password인 경우 contentType = ContentType.Password } ) Autofill -
alpha BOM 2025.05.01 // id TextField( … modifier = Modifier.contentType(Username)
) // pw SecureTextField( … modifier = Modifier.contentType(Password) ) Autofill -
Google I/O Extended 25 Proprietary & Confidential 텍스트가 박스 크기에
맞춰 자동으로 조정되는 기능 Autosize text -
BOM 2025.05.01 Box { Text( text = myTest, maxLines =
1, autoSize = TextAutoSize.StepBased( minFontSize = 20.sp, maxFontSize = 40.sp, ) ) } Autosize Text -
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 -
Google I/O Extended 25 Proprietary & Confidential 위치와 컨테이너의 크기를
자동으로 애니메이션화 Animate bounds -
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 -
Google I/O Extended 25 Proprietary & Confidential onLayoutRectChanged • 컴포저블의
위치에 대한 가시성 구현. • 유사한 `onGloballyPositioned` 는 이미 위치 추적에 사용 중. 그렇지만 `onLayoutRectChanged`를 사용하면 좀 더 뛰어난 성능을 체험할 수 있음. • throttle, debounce 추가 가능 Visibility tracking -
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 -
Google I/O Extended 25 Proprietary & Confidential Compose alpha 버전에서는
위의 저수준 API(onLayoutRectChanged)를 활용하여 고수준 API 생성. • visibilityChanged ◦ Composable의 가시성이 변경될 때마다 콜백을 제공 Visibility tracking -
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 -
Google I/O Extended 25 Proprietary & Confidential Compose alpha 버전에서는
위의 저수준 API(onLayoutRectChanged)를 활용하여 고수준 API 생성. • onFirstVisible ◦ 사용자의 화면에 처음으로 완전히 보이게 될 때 딱 한 번 지정된 콜백 실행 Visibility tracking -
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 -
Experimental annotation 감소 @ExperimentalComposeUiApi @ExperimentalTextApi @ExperimentalTextApi @ExperimentalComposeApi @ExperimentalAnimationApi @ExperimentalAnimationGraphicsApi @ExperimentalAnimationSpecApi
@ExperimentalTransitionApi @ExperimentalFoundationApi @ExperimentalMaterialApi -
Google I/O Extended 25 Proprietary & Confidential • 기존 Navigation은
Compose와 적합하지 않음 • 적용형 레이아웃 시스템 등장 • 백스택을 직접 관리 Navigation3 -
Google I/O Extended 25 Proprietary & Confidential preview, playerView Compose
기반으로 개발. 기초부터 개발하기 때문에 좀 더 시간이 걸릴 것으로 예상 Camera, Media -
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") -
/// 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 -
/// 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 -
@UnstableApi @Composable fun rememberPlayPauseButtonState(player: Player): PlayPauseButtonState { val playPauseButtonState =
remember(player) { PlayPauseButtonState(player) } LaunchedEffect(player) { playPauseButtonState.observe() } return playPauseButtonState } Media3 -
Google I/O Extended 25 Proprietary & Confidential new KMP libraries
published last year -
Google I/O Extended 25 Proprietary & Confidential • Room •
DataStore • Collections • SavedState • View Model • Lifecycle • Paging KMP Stable version -
Google I/O Extended 25 Proprietary & Confidential • 간단하게 사용자의
신분에 대한 정보를 인증할 때 사용 • 현재 한국에서는 Google Wallet 기능이 도입되지 않았기 때문에, 사용 불가능 Digital Credential -
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 -
Google I/O Extended 25 Proprietary & Confidential 새 기기를 설정할
때, 복잡한 설정 없이 App 계정을 복구할 수 있습니다. (Android 9이상) • 원활한 사용자 환경 • 사용자 참여도 증가 • 개발 비용 감소 Restore Credentials -
// 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 -
// 서버에서 인증 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 -
// ClearCredentialStateRequest 객체를 생성합니다. val clearRequest = ClearCredentialStateRequest(TYPE_CLEAR_RESTORE_CREDENTIAL) // 사용자
로그아웃 시 restore key를 지웁니다. val response = credentialManager.clearCredentialState(clearRequest) Restore Credential -
Google I/O Extended 25 Proprietary & Confidential • 앱이 사용자
개인정보를 침해하지 않으면서 사용자 데이터에 접근할 수 있는 표준 마련이 목적 • Privacy Sandbox의 핵심은 device identifier에 대한 접근 권한을 제공하지 않고도 모바일 광고, 마케팅 측정 및 추적을 허용하도록 설계되었습니다. Privacy Sandbox -
Google I/O Extended 25 Proprietary & Confidential [Before] 광고 id:
Google Play 서비스가 제공하는 재설정 가능한 고유 식별자입니다. 안드로이드 기기마다 할당되며, 사용자가 직접 재설정하거나 광고 개인설정 옵션을 끌 수 있습니다. 하지만 기본적으로는 활성화되어 있었고, 앱과 광고 SDK는 이 광고 ID를 통해 사용자를 추적하고 데이터를 연결했습니다. 광고 id 및 데이터 수집 : 광고 id / 기기정보(기기모델,OS버전, 화면해상도, ip주소 등 기본적인 기기정보), 앱 사용 데이터(현재 사용중인 앱 정보, 특정 활동(게임 레벨업, 상품 검색 및 구매), 위치 권한이 있다면 위치 정보 Privacy Sandbox -
Google I/O Extended 25 Proprietary & Confidential [문제점] • 광고의
개인화 수준을 높였지만 프라이버시 침해 문제 발생 ◦ 광고 id를 통해 사용자의 다양한 개인 정보 침해 가능성 ◦ 사용자의 데이터가 어떻게 사용되는지 파악 불가능광고 ID 재설정이나 개인 맞춤 광고 거부 옵션이 있지만 사용자가 모르는 경우 빈번 Privacy Sandbox -
Google I/O Extended 25 Proprietary & Confidential [After] privacy sandbox를
사용하면 Topics Api를 통해 기기 내부에서 사용자의 관심사 카테고리를 추출해서, 이 데이터를 광고 SDK에 전달합니다. 광고 SDK는 이러한 카테고리를 기반으로 하여 특정 사용자의 관심사 카테고리에 해당하는 광고를 보여줍니다. Privacy Sandbox -
Google I/O Extended 25 Proprietary & Confidential Android 16 compileSDK
36 new API • 토글 하나로 Device Protection 기능 on/off 가능. • AAPM은 위험에 노출된 사용자를 위해 Android 기기의 보안을 강화하는 것을 목표로 하는 새로운 기능입니다. 기기 보호를 강화하도록 설계된 사전 결정된 구성 세트를 구현하는 단일 설정으로 작동합니다. Android Advanced Protection Mode -
Google I/O Extended 25 Proprietary & Confidential • 보안 ◦
침입로깅 : 침해가 의심될 경우 기기에 대한 심층적인 보안 조사 및 분석을 수행할 수 있습니다. 보안 로그는 암호화를 통해 클라우드에 안전하게 저장되므로 보안 정보를 직접 관리할 수 있습니다. Android Advanced Protection Mode -
Google I/O Extended 25 Proprietary & Confidential • 장치 안전
◦ 도난 감지 잠금: 도난을 암시하는 의심스러운 활동이 감지되면 기기가 자동으로 잠깁니다. ◦ 오프라인 기기 잠금: 잠금 해제된 기기가 장시간 오프라인 상태일 경우 자동으로 잠깁니다. ◦ 비활성 재부팅: 기기가 72시간 동안 잠긴 경우 자동으로 다시 시작됩니다. ◦ USB 보호: 장치가 잠금 상태일 때 새로운 USB 연결에 대해서만 충전을 기본 설정하여 USB 포트를 악용하려는 물리적 공격을 차단합니다. Android Advanced Protection Mode -
Google I/O Extended 25 Proprietary & Confidential • 앱 ◦
Google Play Protect: Android에 원치 않는 소프트웨어 차단 기능입니다. ◦ 알 수 없는 앱: 사전 설치된 앱 스토어에서만 다운로드할 수 있습니다. ◦ 메모리 태깅 확장(MTE): 기기에서 지원되는 앱의 경우 MTE가 자동으로 활성화됩니다. Android Advanced Protection Mode -
Google I/O Extended 25 Proprietary & Confidential • 네트워크 ◦
2G 네트워크 보호: 기기가 더 이상 2G 네트워크에 연결되지 않습니다. ◦ 안전하지 않은 네트워크 자동 재연결 비활성화: 기기가 더 이상 안전하지 않은 것으로 알려진 Wi-Fi 네트워크에 자동으로 재연결되지 않습니다 Android Advanced Protection Mode -
Google I/O Extended 25 Proprietary & Confidential 안전하지 않은 웹사이트로부터
보호하는 기능 스팸 전화로부터 보호 기능 Google 메시지에서 스팸 및 사기로부터 보호 기능 Android Advanced Protection Mode -
Google I/O Extended 25 Proprietary & Confidential 이러한 기능 중
일부 또는 대부분을 알고 계실 수도 있습니다. 그 이유는 이러한 기능 중 상당수가 Android에 이미 존재하기 때문입니다. 고급 보호는 이러한 기능을 켜고 개별적으로 비활성화할 수 없도록 합니다. Android Advanced Protection Mode -
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 -
Google I/O Extended 25 Proprietary & Confidential Android 16 /
One UI 7.0 지원 신원 확인을 요청하는 데 사용됩니다. 신원 확인은 장치가 신뢰할 수 있는 장소 외부에 있을 때 민감한 표면에 접근하기 위해 3등급 생체 인증이 필요한 기능입니다. 도난당한 스마트폰이라 할지라도 도둑이 PIN이나 비밀번호를 알고 있다고 해도 중요한 정보에 접근하거나 보안 기능을 무력화하는 것을 막기 위함입니다. Identity Check -
Google I/O Extended 25 Proprietary & Confidential API 36에 추가
/ One UI 7.0 지원 갤럭시 기기에 적용 One UI 7.0은 Android15 대상인데 왜 가능하지..? 검색해보니 Android 16 출시 전 미리 도입 Identity Check -
// 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 -
Google I/O Extended 25 Proprietary & Confidential Incheon Health Connect
Sharing Health Data -
Google I/O Extended 25 Proprietary & Confidential Active User Growth
over last 6 months Runa, Mi Fitness, Garmin (coming June 2025) -
Google I/O Extended 25 Proprietary & Confidential Health Connect API
복잡성 감소 단일 API 세트를 사용하여 사용자의 건강/피트니스 데이터에 엑세스하여 효율성 증대 표준화된 데이터 스키마 다양한 앱과 기기에서 데이터를 읽고 쓰고 집계 중앙 집중식 개인 정보 보호 설정 수십억 사용자를 위한 더 나은 환경을 빌드하여 사용자가 데이터에 대한 엑세스 권한을 세분화하여 쉽게 제어 및 관리 -
Google I/O Extended 25 Proprietary & Confidential Android 16 /
compileSDK36 / new API 사용자가 자신의 의료 기록을 기기에 안전하게 저장하고, 통제 하에 의료 앱과 공유할 수 있게 하는 플랫폼 기능입니다. Medical Records APIs -
// 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 -
Google I/O Extended 25 Proprietary & Confidential Incheon Adaptive Apps
with Android 16 Across devices -
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 -
Google I/O Extended 25 Proprietary & Confidential Adaptive Apps with
Android 16 Screen Orientation Resizeable Activities Aspect Ratios -
Google I/O Extended 25 Proprietary & Confidential no more assumptions
about orientations or aspect ratios on activity recreation -
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 일시적으로 사용 중지할 수 있습니다. -
Google I/O Extended 25 Proprietary & Confidential 평소 워치 페이스(화면)을
업데이트 하려면 어떻게 했나요? -
Google I/O Extended 25 Proprietary & Confidential 대부분 독립적인 Wear
OS 앱(APK) 형태 kotlin 또는 Java 코드 기반 -
Google I/O Extended 25 Proprietary & Confidential Watch Face Format(WFF)
이라는 선언적 XML 형식의 파일로 정의됨 • 개발 난이도 하락 • 성능 최적화 Watch Face Studio Watch Face Push -
Google I/O Extended 25 Proprietary & Confidential ?? 클라우드만을 통해
커스텀 화면 설정 가능 New Health Permissions Granularity -
Google I/O Extended 25 Proprietary & Confidential 시간에 민감한 작업에
대해 나타낼 때 사용 가능 Live Update https://developer.android.com/develop/ui/views/notifications/liv e-update?hl=ko -
Google I/O Extended 25 Proprietary & Confidential Bringing Grab’s Live
Activity to Android: Enhancing user experience through custom notifications ios는 이미 적용 중? -
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 -
Google I/O Extended 25 Proprietary & Confidential 현재 pixel tablet에서는
hub mode를 사용할 수 있고, 추후에 mobile phone에도 적용 예정 Widget - hub mode -
Google I/O Extended 25 Proprietary & Confidential • 스마트 홈
제어 • 엔터테인먼트 허브 • 정보 제공 • 핸즈 프리 모드 Widget - hub mode -
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 -
Google I/O Extended 25 Proprietary & Confidential • Android12부터 도입
• Widget Metrics API는 앱 위젯(App Widgets)이 다양한 기기와 화면 크기에서 더욱 유연하고 일관되게 표시되도록 돕는 중요한 개발자 도구 Widgets Metrics API -
Google I/O Extended 25 Proprietary & Confidential Impression, Interaction 관련
기능을 추가하여 새로운 API 올해 출시 예정 Widgets Metrics API -
Google I/O Extended 25 Proprietary & Confidential • Android 16부터
opt out 옵션 제공되지 않음. • 업데이트 할 때, 콘텐츠가 시스템 표시줄에 가려지지 않게 조절 필요 Edge to edge goo.gle/e2e-design -
Google I/O Extended 25 Proprietary & Confidential • predictive Back은
이미 Compose Adaptive와 Navigation3에 통합 • 하단의 3개 버튼 탐색에도 Animation 사용 가능 Predictive Back -
Google I/O Extended 25 Proprietary & Confidential 특정 효과(effect)를 한번
정의하면 cameraX와 Media3에서 함께 적용 가능 Media&Camera -
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 -
Google I/O Extended 25 Proprietary & Confidential Media3의 PreloadManager는 특히
짧은 형식의 비디오 피드나 사용자가 미디어 아이템을 빠르게 전환할 가능성이 있는 앱(예: 틱톡, 릴스 등)에서 재생 시작 지연 시간(startup latency)을 최소화하는 데 필수적입니다. Preload Manager -
// 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 -
Google I/O Extended 25 Proprietary & Confidential Android 16에서는 새로운
오디오 PCM Offload 모드를 도입하여 앱에서 오디오 재생 시 전력 소비를 줄여 재생 시간을 늘리는 기술 도입 예정 Native PCM Audio offload -
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 -
// 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 -
Google I/O Extended 25 Proprietary & Confidential • 클라우드 기반
실행 • 인터넷 연결 필수 • 확장성 및 관리 용이성 Gemini Live -
// 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