최적화 3 AI & 지능형 에이전트 4 프라이버시 & 보안 5 미디어 & 시스템 통합 6 멀티 디바이스 생태계 Compose-First & Migration Skills 앱을 가볍게 만드는 두 방향 · 빌드 타임(R8)과 런타임(Memory Limiter) Agentic Era & Gemini Nano 4 Privacy Pickers & Credential Manager Media3 & Background Restrictions Wear OS 7 · Large Screens · XR
Status View Toolkit: Maintenance Mode "the Views system is now in maintenance mode" RecyclerView 1.4.0 (2025.12) * 유지보수 Fragment 1.8.9 (2026.07) Stable ConstraintLayout 2.2.1 (2025.02) * 유지보수 ViewPager2 1.1.0 (2024.05) Stable DataBinding AGP 내장 (별도 버전 없음) 치명적 수정만 지원 "it will only receive updates for highly critical fixes" 신규 기능 추가 없음 더 이상의 기능 제안은 받지 않으며 버그 수정만 진행 최신 Stable 버전 기준 (2026.07) 주요 androidx 컴포넌트의 유지보수 단계 전환 현황 Google I/O Extended 출처 developer.android.com/jetpack/androidx/versions developer.android.com/develop/ui/compose/first
이유 : 코드로 보기 1 재사용 단위 한 번 정의해서 여러 곳에 공유 2 속성 상속 typography·color는 자식으로 받음 // 어디서든 재사용 Column(style = card) Row(style = card) Column(style = { fontSize(16.sp) // 상속됨 }) { Text("A") // 물려받음 Text("B") // 물려받음 } 3 4 // 한 번 정의 val card = Style { background(Blue) } 역할 분리 외형은 Style, 동작은 Modifier Box(Modifier .styleable { background(Blue) } .clickable { } // 동작 ) Google I/O Extended 디자인 시스템 우리 컴포넌트에 style 파라미터 노출 @Composable fun BrandCard(style: Style) { Column(Modifier.styleable(style)) } developer.android.com/develop/ui/compose/styles/styles-vs-modifiers
everything that is a modifier can be replicated with a Style" Style Modifier 외형 · 스타일 색 · 타이포 · 패딩 등 재사용 가능한 겉모습 + 동작 · 레이아웃 · 드로잉 클릭 · 크기 · 위치 등 그대로 Modifier가 담당 공식 벤치마크 (basic_box_border_change) 77% ↓ 59% ↓ 객체 할당 실행 시간 I/O 2026 · Compose 1.1 (BOM 26.04) Google I/O Extended 아직 @Experimental 전용 세션 영상 ▶ youtube.com/watch?v=e-wIF3cmjms
→ Compose 자동 변환 설치 및 커스텀 가이드 "Compose로 마이그레이션하다가, 어디서 제일 고생하셨어요?" • 터미널에 아래 명령어를 실행하여 마이그레이션 스킬을 설치합니다. • 나만의 커스텀 스킬은 프로젝트 내 .skills/ 디렉토리에 관리합니다. Google 공식 Android Skill 제공 기존의 번거로운 XML 레이아웃 코드를 최신 Jetpack Compose 코드로 안전하고 빠르게 자동 변환합니다. 도입 근거 "workflows where evaluations show LLMs underperform" # 터미널에 아래 명령어를 입력하여 실행 $ android skills add --skill=jetpack-compose Google I/O Extended developer.android.com/tools/agents/android-skills • github.com/android/skills
XML View to Jetpack Compose 공식 그대로 Kurly 커스텀 "a structured, 10-step methodology" · UI 변환만 담당. 아키텍처는 우리가 지킨다. 1 2 3 4 5 마이그레이션 대상 선정 6 최적의 XML 후보 식별 프로젝트·레이아웃 분석 7 구조·계층·구현 감사 계획 수립 아키텍처 방향을 MVVM 유지로 고정 기준 UI 캡처 기존 사내 스크린샷 스킬로 대체 Compose 의존성·컴파일러 설정 build.gradle 확인·sync 핵심 Google I/O 커스텀 8 대체 9 10 Compose 테마 설정 Kurly 브랜드 테마 매핑 (부분 커스텀) XML → Compose 변환 ViewModel 흐름 유지, UDF 강제 전환 차단 커스텀 마이그레이션 검증 baseline과 Preview 비교 · UI 테스트 사용처 교체 interop API로 Compose 연결 XML 코드 제거 미참조 확인 후 레거시 삭제 공식 스킬은 UI 변환만 하지만 권장 패턴이 MVI/UDF로 기울어, 계획/변환 단계에서 아키텍처가 같이 변환됩니다. → Step 3·7은 MVVM 유지로 커스텀, Step 4는 사내 스크린샷 스킬로 대체. 변환 속도↑ · 불필요한 리팩토링 차단 하도록 커스텀 Extended developer.android.com/agents/skills/jetpack-compose/migration
같음 = 스킬만 봐도 핵심 변경을 쉽게 처리할 수 있다 → 1. 개발 환경 & UI Action Item r8-analyzer → 2. 성능 & 빌드 1 appfunctions → 3. AI & 에이전트 2 jetpack-compose intent-security 팀 룰로 고정 → 4. 프라이버시 & 보안 Google I/O Extended → 6. 멀티 디바이스 마이그레이션엔 Skill 적용 공식 그대로 X · 우리 아키텍처로 커스텀 .skills/ 에 팀 버전 커밋 3 wear-compose-m3 신규 화면은 Compose로 시작 우리도 절반쯤 진행 중 이 방식으로 실제 전환 중 .android.com/tools/agents/android-skills • github.com/android/skills
탐지 API 핵심 포인트 ApplicationExitInfo 사용 이 종료(Memory Limiter)는 일반적인 크래시와 달리 스택 트레이스(Stack Trace)가 남지 않습니다. 따라서 반드시 ApplicationExitInfo를 통해서만 실제 종료 여부를 정확히 판정하고 크래시 리포터에 기록해야 합니다. 시스템에서 제공하는 최근 앱 종료 원인 기록을 조회하여 메모리 한도 초과 여부를 탐지합니다. code_slides.kt val am = getSystemService(ActivityManager::class.java) for (info in am.getHistoricalProcessExitReasons(packageName, 0, 0)) { if (info.reason == ApplicationExitInfo.REASON_OTHER && info.description?.contains("MemoryLimiter:AnonSwap") == true) { // 메모리 한도 초과로 종료됨. 크래시 리포터에 기록 } } Google I/O Extended 출처 developer.android.com/blog/posts/prioritizing-memory-efficiency-essential-steps-for-android-17
3가지 종료 시점 기준 역할 구분 앱 종료 종료 직전 종료 후 (다음 실행) 나중에 ① ProfilingManager ② ApplicationExitInfo ③ Play Console 언제 : 종료되기 직전 언제 : 종료 후 다음 실행 언제 : 예정 무엇 : 힙 덤프를 자동 저장 (TRIGGER_TYPE_ANOMALY) 무엇 : 종료 이유 조회 "MemoryLimiter:AnonSwap" 확인 무엇 : 필드 메모리 지표를 콘솔에 노출 용도 : 메모리가 넘친 원인 분석 용도 : 리미터 종료 확정 현재 준비 중 유일하게 확실한 방법 Google I/O Extended 출처 developer.android.com/blog/posts/prioritizing-memory-efficiency-essential-steps-for-android-17
& 시뮬레이션 🛡 방어 팁 (Defensive Tip) adb 명령어로 메모리 제한 동작을 시뮬레이션합니다. terminal # 메모리 한도를 조정하거나 무시해서 동작을 시뮬레이션 $ adb shell am memory-limiter ignore <uid|all|none> Google I/O Extended onTrimMemory() 구현 시스템 메모리가 부족할 때 앱이 스스로 불필요한 자원을 반납하여 OOM 종료를 능동적으로 방지합니다. 핵심 콜백 : • TRIM_MEMORY_UI_HIDDEN UI가 더 이상 사용자에게 보이지 않을 때 비트맵 캐시 등을 정리 • TRIM_MEMORY_BACKGROUND 백그라운드 프로세스로 전환 시 캐시 자원을 자진 반납 출처 developer.android.com/about/versions/17/behavior-changes-all#app-memory-limits
힙 덤프 🔍 Profiler 힙 덤프 분석 💡 이미지 메모리 분석 & 체크리스트 [cite: 17] Profiler를 통해 메모리에 중복 로드된 Bitmap 객체와 크기를 직관적으로 확인하고 최적화할 수 있습니다. ⚠ 메모리 점유의 주범 • 대부분의 모바일 메모리 문제는 Bitmap에서 발생합니다. • 100KB 압축 이미지도 디코딩 시 픽셀 크기와 색 depth로 수 MB RAM을 차지합니다. [cite: 17] ✅ 최적화 체크리스트 • 추천 라이브러리: Coil (Kotlin/Compose), Glide (Java) • 다운샘플링: 실제 뷰 크기에 맞게 조절하여 디코딩 • RGB_565: 투명이 불필요하면 ARGB_8888의 절반 메모리 • 중복 비트맵 제거: Profiler 힙 덤프 경고 확인 ⚠ Google I/O Extended 출처 developer.android.com/static/blog/assets/pic3_IO_26_113_TSV_dup_bitmaps_cropped_0b5bed0efb_Z1vcMMk.webp
& Full Mode 최적화 R8의 keep 규칙 정리만으로도 대규모 최적화가 가능합니다. full R8(full mode) 활성화 시 한층 공격적인 최적화를 수행합니다. (AGP 기본값, fullMode=false 지우면 활성화) 📈 실제 도입 효과 (Monzo 적용 사례) • ANR 35% 감소 (응답 없음 비율 대폭 개선) • 콜드 스타트 속도 30% 향상 • 앱 최종 설치 크기 9% 절감 📊 분석 및 리포트 확인 • 3대 성능 지표 점수화: Shrinking, Optimization, Obfuscation 비율 분석 $ ./gradlew :app:analyzeReleaseR8Config Google I/O Extended 출처 developer.android.com/static/blog/assets/pic2_r8_config_analyzer_87a3feafc8_ZUSazT.webp developer.android.com/topic/performance/app-optimization/r8-configuration-analyzer developer.android.com/blog/posts/monzo-boosts-performance-metrics-by-up-to-35-with-a-simple-r8-update
⚠ R8 full mode 주의점 (리플렉션) 💻 build.gradle 설정 공격적인 최적화를 수행하는 full mode 환경을 build.gradle 파일에 활성화하고 최적화 규칙을 올바르게 적용합니다. 🚨 주요 부작용 (Side Effects) • 공격적 최적화 → 리플렉션 깨짐 (ClassNotFoundException, NoSuchMethodException 발생 가능) code_slides.kt (build.gradle) • Signature 미보존으로 인한 Gson 역직렬화 실패 isMinifyEnabled = true (Gson 2.11+는 자체 번들로 해결 가능) isShrinkResources = true • 기본 생성자 미보존 (newInstance()용 keep 규칙 필요) • 접근 제어자 변경 (private → public) // proguard-android-optimize.txt 사용 // (legacy proguard-android.txt 아님) (visiability 의존코드 주의) ✅ 권장 대응 방안 (Recommendations) • full mode 활성화 후 반드시 전체 회귀 테스트 진행 • 사용 중인 외부 라이브러리 최신 버전 업데이트 유지 Google I/O Extended 출처 developer.android.com/topic/performance/app-optimization/full-mode
🛠 r8-analyzer (R8 Agent Skill) 역할 및 핵심 기능 Android Studio 에이전트나 AI 도구가 R8 설정 오류를 해결하고 keep 규칙을 정교화하도록 돕는 공식 스킬 설치 및 적용 $ android skills add --skill=r8-analyzer ⚠ 주의 사항 AI 제안은 반드시 기술 검증이 필요합니다. 📋 실천 과제 (Action Items) • R8 분석 점수 확보 및 기록 ./gradlew :app:analyzeReleaseR8Config 실행 후 대시보드 기록 • 메모리 감지 로직 추가 크래시 리포터에 "MemoryLimiter:AnonSwap" 감지 적용 • Android 17 동작 사전 검증 adb shell am memory-limiter 활용한 선행 테스트 • keep 규칙 정리 및 반영 r8-analyzer 제안 분석 후 검증을 거쳐 최종 반영 "Insights from AI-driven skills will require technical verification" Google I/O Extended 출처 github.com/android/skills/tree/main/performance/r8-analyzer
UI를 직접 조작하던 앱에서, 에이전트가 호출하는 앱으로 지금까지 앞으로 사용자가 UI를 단계별로 직접 조작 앱이 기능을 tool로 노출 "manual navigation with your UI" "orchestratable tools" 사용자는 자연어로 목표를 말하고, 에이전트가 앱 함수를 호출 "through agents and system-level interactions" Google I/O Extended developer.android.com/ai/appfunctions
우리 앱 기능이 Gemini의 tool이 됨 개념 = 온디바이스 MCP 제대로 붙이려면 AppFunctions, 코드 못 건드리면 Computer Control 에이전트 Gemini · 어시스턴트 ① AppFunctions ② Computer Control 능동 통합 앱이 기능을 tool로 정의해 노출 코드 변경 없이 UI 자동화 • 온디바이스 MCP 서버처럼 동작 • 에이전트가 그 tool을 직접 호출 • OEM 탑재 어시스턴트가 화면 조작 • 접근성 시맨틱에 의존 코드 작업 필요 · 통제력 높음 · 정밀 폴백 코드 작업 불필요 · 즉시 대응 · 간접 내앱 Google I/O Extended developer.android.com/ai/appfunctions · /ai/computer-control
기능이 에이전트의 tool로 노출되고 실행되는 4단계 1 2 3 4 선언 스키마 생성 조회 실행 함수에 @AppFunction 애노테이션 + KDoc • Jetpack이 스키마 생성 에이전트가 사용 가능한 함수를 쿼리 프롬프트에 맞는 함수를 파라미터와 함께 실행 • OS가 인덱싱 KDoc = tool 설명 구현은 어노테이션 한 줄 Gemini 연동은 아직 preview (AICore) · Android 16+ · EXECUTE_APP_FUNCTIONS 권한 Google I/O Extended developer.android.com/ai/appfunctions
4배 빠르게 BASE MODEL PERFORMANCE EFFICIENCY Gemma 4 4x 빠름 60% 절감 이전 세대 대비 최대 4배 속도 향상 기기 배터리 소모 최대 60% 절약 "up to 4x faster" "up to 60% less battery" 구글의 최신 오픈 모델 Gemma 4를 베이스로 설계된 차세대 온디바이스 AI 모델 Next-generation on-device Google I/O Extended 출처 developer.android.com/ai/gemini-nano developer.android.com/blog/posts/gemma-4-the-new-standard-for-local-agentic-intelligence-on-android
tool 후보 목록화 TASK 01 TASK 02 도메인 정리 AppFunction 에이전트에 노출할 기능을 도메인 단위로 체계적이고 직관적으로 분류하여 정리합니다. 잘 분리된 유스케이스 = AppFunction 후보 Google I/O Extended 출처 github.com/android/skills/tree/main/device-ai/appfunctions
접근성 시맨틱 정비 TASK 03 NEXT STEP 시맨틱 정비 프라이버시 & 보안 Computer Control 대비를 위한 정밀한 접근성 레이어 및 시맨틱 요소 정비 다음 장에서 다룰 고른 데이터만 안전하게 제공받는 프라이버시 핵심 설계 Google I/O Extended
AS-IS TO-BE (핵심) 전체 권한 요청 고른 것만 전달 미디어, 연락처 등 전체 라이브러리에 접근하기 위해 앱이 광범위한 권한을 직접 요청하고 승인받던 기존 방식 권한 요청 없이 시스템 표준 선택기(Picker)를 통해 사용자가 직접 선택한 특정 데이터만 앱에 안전하게 제공 Google I/O Extended 출처 developer.android.com/privacy
01Android 17 표준 UI 새로운 OS 수준의 표준 연락처 선택기를 제공하여 일관성 있고 직관적인 사용자 경험을 보장합니다. 02선택적 데이터 전달 불필요한 전체 권한 요청 없이, 사용자가 안전하게 지정하여 선택한 특정 연락처 정보만 앱에 공유합니다. Google I/O Extended 출처 developer.android.com/about/versions/17/features/contact-picker
POLICY BACKGROUND 01 연락처 권한 사용 기능 목록화 새로운 Contact Permissions 정책 현재 서비스 내에서 연락처를 사용하는 모든 기능 리스트업 (Android 17+ 타깃 앱 대상) CORE PRINCIPLE Picker로 구현 가능한 기능은 READ_CONTACTS 권한 금지 02 Contact Picker 대체 "연락처 하나 골라 공유·초대" 유형은 전용 Picker로 전환 03 READ_CONTACTS 예외 선언 Picker 로 핵심 기능을 제공하기 충분치 않은 경우에만 Play Console 사유 제출 Google I/O Extended 출처 support.google.com/googleplay/android-developer/answer/16935362
SMS OTP 수신 지연 수신 후 최대 3시간 지연 발생 가능으로 인해 사용자 인증 자동입력 흐름 깨짐 02 SMS Retriever (완전 자동) SMS 권한 획득 없이 앱 해시가 포함된 인증용 문자를 자동으로 즉시 수신 처리 03 SMS User Consent (원클릭 동의) 1회 동의 과정을 통해 단일 메시지 전달, 템플릿과 무관하게 자유로운 문자 형식 지원 Google I/O Extended 출처 developer.android.com/about/versions/17/behavior-changes-17 developer.android.com/identity/sms-retriever
01 BAL 개념 및 취약점 사용자 개입 없이 백그라운드 앱이 화면을 띄우는 기능으로, 피싱 및 화면 가로채기 공격에 악용될 수 있습니다. code_slides.kt // setPendingIntentBackgroundActivityStartMode : API 34+ // MODE_..._ALLOW_IF_VISIBLE : SDK 36(Android 16)+ val options = ActivityOptions.makeBasic() .setPendingIntentBackgroundActivityStartMode( // 예전: MODE_BACKGROUND_ACTIVITY_START_ALLOWED (deprecated) // 권장: 호출 앱이 화면에 보일 때만 허용 02 Android 17 변경 사항 기존의 무조건적인 백그라운드 실행 허용 모드가 deprecated 처리되며, 보안 강화를 위해 권한이 크게 제한됩니다. ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOW_IF_VISIBLE ) // send(...) : API 23+ pendingIntent.send(context, 0, intent, null, null, null, options.toBundle()) 03 대응 및 권장 구현 PendingIntent 발송 시 ActivityOptions 모드를 호출 앱이 화면에 보일 때만 허용하는 권장값으로 반드시 교체해야 합니다. Google I/O Extended 출처 developer.android.com/about/versions/17/behavior-changes-17
Local Network 권한 요구 02 CT (인증서 투명성) 기본 활성화 로컬 네트워크 상의 주변 기기들과 안전하게 통신하기 위한 보안 제약이 강화됩니다. TLS 인증서를 공개 로그에 등록 및 검증하도록 강제하여 인증서 위조를 원천 차단합니다. • • Google I/O LAN 기기(캐스팅, 스마트홈 디바이스 등)와 통신 시 필수 권한 요구 ACCESS_LOCAL_NETWORK 권한 획득 필요 Extended ⚠ 자체 인증서 및 피닝 사용 시 주의 사내망 자체 인증서나 SSL 피닝(Pinning) 적용 앱의 경우, 공개 로그 미등록으로 인해 연결이 유실될 수 있으므로 반드시 사전 점검이 필요합니다. 출처 developer.android.com/about/versions/17/behavior-changes-17
01 Embedded Photo Picker 권한 팝업 없이 사용자가 선택한 사진만 안전하게 앱에 전달합니다. 02 클라우드 라이브러리 연동 기기 로컬 사진뿐만 아니라 클라우드(Google Photos) 라이브러리까지 확장하여 접근할 수 있습니다. Google I/O Extended 출처 developer.android.com/blog/posts/the-embedded-photo-picker
01 개념 & 핵심 강점 앱 UI 안에 직접 넣는 사진 선택기로, 화면 전환 없이 내 화면 안에서 선택할 수 있습니다. • 연속 선택 (Continuous): 선택기를 닫지 않고 선택/선택 해제가 가능하며 앱 UI 상태와 실시간 동기화 • 안전한 무권한 렌더링: SurfaceView 기반 렌더링으로 보안성 및 권한 불필요 특징 유지 02 기기 요건 & 통합 Android 14 (API 34) + SDK Extensions 15 이상 대상. 미충족 기기는 Play 서비스를 통해 백포트 제공. • Compose (권장): EmbeddedPhotoPicker 컴포저블 제공 및 상태/콜백 제어 • Views 방식: EmbeddedPhotoPickerView 사용 및 세션 제어 03 맞춤설정 범위 FeatureInfo 객체를 통해 앱의 UX 및 디자인 아이덴티티에 완벽하게 결합할 수 있습니다. • 강조 색상 지정: setAccentColor() 사용 (기본은 시스템 다이내믹 컬러 적용) • 크기 및 필터링: 높이 제한, 최대 선택 개수 지정, 사전 선택 URI 및 MIME 타입 필터 지원 Google I/O Extended 출처 developer.android.com/training/data-storage/shared/photo-picker/embedded
+ Conditional Creation 01 로그인 통합 비밀번호, 패스키, 소셜 로그인을 하나의 API로 간편하게 통합하여 제공합니다. 02 Conditional Creation 기존 비밀번호 유저에게 로그인 흐름 방해 없이 패스키를 백그라운드에서 자동으로 생성합니다. Google I/O Extended 출처 developer.android.com/identity/sign-in/credential-manager
🟢 개선 • Contact Picker • Local network • Photo Picker • CT arrow_ • Credential Manager arrow_ • SMS OTP • BAL 모드 ⏱ 시한 ➡ 다음 단계 Play API 37 target 상향 전 (Play Console 확인) 미디어와 시스템 통합 Google I/O Extended
→ 편집·후처리 → 재생 → 캐스팅, 하나의 연결된 파이프라인 01촬영 (CameraX) Low Light Boost (저조도 실시간 보정) · CameraXViewfinder 02후처리 (Media3 AI Effects) Enhance · Magic Eraser · Studio Sound 03재생 (ExoPlayer) PreloadManager 즉시 재생 · Scrubbing 🎥 세션 영상 QR : youtu.be/Ch1EwR18Dqc Google I/O Extended 출처 youtu.be/Ch1EwR18Dqc developer.android.com/blog/posts/17-things-to-know-for-android-developers-at-google-i-o developer.android.com/media/camera/lowlight/low-light-boost-ae developer.android.com/blog/posts/brighten-your-real-time-camera-feeds-with-low-light-boost
재생 💡 핵심 개념 "미리 · 거리순 · 단계적" 준비로 전환 시 지연 시간 없음 🔄 근본 흐름 (DefaultPreloadManager) 01후보 등록 (add) 후보 영상들을 매니저에 사전 등록 02우선순위 산정 현재 재생 위치 기준 거리로 우선순위 계산 setCurrentPlayingIndex → invalidate 📈 도입 성과 (공식 사례) 03단계별 버퍼링 소스 준비 → 트랙 선택 → N초 구간 버퍼링 04미디어 소스 재사용 재생 시 새로 생성하지 않고 MediaSource를 꺼내서 즉각 사용 Google I/O Extended Facebook Playback Start 속도 개선 & Stall Rate 감소 BedSection 감소, WatchTime 증가 Instagram Join Latency(Action ~ 첫 프레임) 제거 → 시청 시간 & 인게이지먼트 향상 💡 FB는 현재 영상만, IG Reels는 앞뒤 인접 영상까지 프리로드 출처 developer.android.com/blog/posts/instagram-and-facebook-deliver-instant-playback-and-boost-user-engagement-with-media3-preload-manager
CameraXViewfinder ⚙ CodecDB Android 17 신규 폴더블 · 태블릿 기기의 카메라 프리뷰 화면에 자동으로 대응합니다. 기기 칩셋별 최적의 인코딩을 추천하여 비디오 내보내기(export) 품질의 편차를 줄입니다. ⏯ ExoPlayer Scrubbing Mode 🔄 Transformer & CastPlayer 미디어 탐색(seek) 과정에서 매우 부드러운 프레임 갱신과 정교한 탐색 환경을 보장합니다. 고성능 멀티 애셋(multi-asset) 편집 환경과 끊김 없는 고품질 캐스팅 전송 기능을 제공합니다. Google I/O Extended 출처 developer.android.com/media/camera/camerax/preview developer.android.com/blog/posts/17-things-to-know-for-android-developers-at-google-i-o developer.android.com/media/media3/exoplayer developer.android.com/media/media3/transformer
: 무엇이 제한되나 🚫 주요 제한 사항 ⚙ 허용 조건 & 예외 사항 사용자 의도 없이 백그라운드에서 오디오를 재생하거나, 오디오 포커스를 요청하거나, 볼륨을 변경하는 모든 동작이 차단됩니다. • 필수 조건 화면에 앱이 보이거나, 적절한 포그라운드 서비스가 활성화되어 있어야 합니다. • 구현 가이드 (API) mediaPlayback 타입 포그라운드 서비스(while-in-use 권한 필요) → 실무에서는 Media3 MediaSessionService 사용을 강력 권장 • 예외 시나리오 🎯 도입 목적 exact alarm 권한 + USAGE_ALARM 스트림 지정 시 제한 없이 정상 동작합니다. 오디오가 멈췄다가 몇 시간 뒤 갑자기 재생되는 등, 사용자 경험을 저해하는 버그성 백그라운드 동작을 원천적으로 예방합니다. Google I/O Extended 출처 developer.android.com/about/versions/17/changes/bg-audio
class PlaybackService : MediaSessionService() { private var session: MediaSession? = null 💡 백그라운드 재생 해결책 override fun onCreate() { super.onCreate() val player = ExoPlayer.Builder(this).build() session = MediaSession.Builder(this, player).build() } override fun onGetSession(...) = session 01. 미디어 재생 통합 관리 Media3의 MediaSessionService를 활용하여 안정적인 백그라운드 재생 환경을 구축합니다. 02. 생명주기 자동화 override fun onDestroy() { session?.run { player.release(); release() } session = null super.onDestroy() } 라이브러리가 복잡한 서비스 생명주기를 대신 처리하므로, OS 하드닝 정책의 영향을 거의 받지 않습니다. 03. 표준 기반의 방어 안드로이드 표준 라이브러리를 채택하는 것 자체가 가장 확실하고 안전한 방어 대책입니다. Google I/O Extended } // Manifest: <service android:foregroundServiceType="mediaPlayback" ...> // + FOREGROUND_SERVICE_MEDIA_PLAYBACK 권한 출처 developer.android.com/media/media3/session/background-playback developer.android.com/about/versions/17/changes/bg-audio
것들 📦 미디어 표준화 ⚡ 핵심 기능 개선 🛡 플랫폼 하드닝 방어 Media3 (ExoPlayer) Preload & Scrubbing OS 제약 원천 차단 영상 재생 라이브러리를 안드로이드 표준인 Media3(ExoPlayer)로 통합하여 파편화된 재생 엔진을 단일 파이프라인으로 구축합니다. PreloadManager를 활용한 영상 빠른 로딩과 정밀한 Scrubbing UI 탐색 기능을 탑재하여 재생 성능과 UX를 한층 끌어올립니다. 지속적으로 강화되는 OS 수준의 백그라운드 오디오 및 비디오 재생 제약 정책에 대해, 표준 라이브러리 기반으로 완벽 대응합니다. Google I/O Extended
기기 5.8억+ 대 지속적으로 성장하며 주류가 된 글로벌 대화면 디바이스 생태계 💰 압도적인 멀티 디바이스 유저 지출 폰 전용 유저 대비 평균 지출 9배 · 폴더블 최대 14배 · 대화면 약 5배에 달하는 높은 비즈니스 가치 (Google 내부 데이터 2026) 🏅 Play "Optimized for large screens" 신규 배지 adaptive 품질 기준 충족 시 전용 배지 마킹을 부여하여, 유저가 고품질 앱을 더욱 쉽고 빠르게 발견할 수 있도록 지원 💡 결론: adaptive로 개발하면 시장과 발견성 기회를 모두 선점합니다. Google I/O Extended 출처 developer.android.com/blog/posts/adaptive-development-for-the-expanding-android-ecosystem
📱 창 크기 적응 (Window Size Class) 하나의 Compose 앱이 다양한 화면 크기에 맞춰 동적으로 레이아웃 적응 🚀 I/O '26 신규 레이아웃 & API Grid / FlexBox 레이아웃, Navigation 3(Scene Decorators), MediaQuery API 지원 ⌨ 대화면 입력 제어 기술 화면 제어를 넘어 Compose 1.11의 마우스급 트랙패드 지원 및 포커스 링 도입 💻 테스트 환경 확장 (Googlebook) 신규 랩톱까지 무료 지원하며 Android Studio Canary 데스크톱 에뮬레이터 제공 Google I/O Extended 출처 developer.android.com/adaptive-apps
🎯 타깃 및 영향 범위 Android 17(API 37) 타깃 시 대화면에서 방향·비율 제한 무시 (opt-out 제거) ⚠ 미적용 시 발생하는 문제 UI 깨짐, 세로 고정 늘어남·잘림, 카메라 왜곡, 회전 시 상태 손실 💡 우회 방법 및 예외 사항 개발자 opt-out 불가. 사용자 opt-in 기기설정 예외는 게임/폰(sw <600dp)뿐 → adaptive 개발이 필수 🚫 무시되는 설정 속성 screenOrientation, resizableActivity, min/maxAspectRatio, setRequestOrientation() Google I/O Extended 출처 developer.android.com/about/versions/17/changes/ff-restrictions-ignored
성능 및 OS Android 17 기반 최적화 및 이전 세대(Wear OS 6) 대비 배터리 소모 최대 10% 절감 ⌚ 위젯 및 실시간 정보 업데이트 Wear Widgets 도입 (2x1·2x2 타일 확장) Live Updates (실시간 업데이트 폰→워치, Ongoing Activities 대체)로 즉각적인 정보 제공 🤖 Gemini 인공지능 & 에뮬레이터 일부 기기 대상 온디바이스 Gemini Nano v3 지원, 개발용 Canary 에뮬레이터 즉시 제공 및 하반기 출시 Google I/O Extended 출처 developer.android.com/blog/posts/what-s-new-in-wear-os-7
🛠 개발자 프리뷰 및 SDK Developer Preview 4 : SceneCore · ARCore for Jetpack XR 곧 Beta · Unreal/Godot 공식 지원 🕶 하드웨어 지원 Catalyst 프로그램 (XREAL Project Aura, 디스플레이/오디오 글래스 키트) 🚀 지금 해야 할 일 XR 개발은 이르지만, Compose · adaptive · 접근성이 곧 XR 준비 Google I/O Extended 출처 developer.android.com/blog/posts/updates-to-the-android-xr-sdk-introducing-developer-preview-4
First 02 성능 (Performance) 03 AI 기술 도입 View 유지보수 모드, Compose가 기본 · 마이그레이션은 우리 것으로 튜닝한 Skill R8 Analyzer로 최적화 점수 · Android 17 Memory Limiter는 ApplicationExitInfo로 탐지 앱이 에이전트에 기능 노출(App Functions) · 온디바이스 Gemini Nano 4 04 보안 강화 🔴 05 미디어 표준화 06 멀티 디바이스 🔴 권한 대신 Picker(Photo/Contact) · Android17 필수(SMS OTP·BAL·CT) Media3 표준화 = PreloadManager 개선 + 백그라운드 제약 방어 Adaptive by Default · 대화면 리사이저빌리티 필수 대응 결론 (Conclusion) Compose로 제대로 만들어두면 성능도, 보안 대응도, 여러 기기도 대응 가능 Google I/O Extended 내일의 할 일 (Next Steps) Android 17 대응 우리 앱에서 가장 시급한 🔴 필수 항목부터 즉시 준비