카테고리
-
Glide → Coil 전환 후 썸네일이 커졌다 — wrap_content ImageView가 원본 크기로 로드되는 이유카테고리 없음 2026. 8. 14. 21:57
이미지 로더를 Glide에서 Coil로 바꿨습니다. 로드하는 코드는 하나도 안 건드렸고, 래퍼 한 겹 아래에서 엔진만 갈아끼웠습니다.그런데 목록 썸네일이 커지고 아래 텍스트가 잘린다는 제보가 들어왔습니다. 그것도 특정 기기, 특정 상품에서만요. 플래그를 끄면 멀쩡해집니다. 바뀐 게 엔진 하나뿐이니 범인은 정해져 있는 셈이었습니다.원인은 이렇습니다. 크기를 안 정해주고 이미지를 로드할 때 wrap_content ImageView를 얼마나 크게 디코딩할지 정하는 규칙이, 두 엔진에서 정반대입니다. Coil 버그도 아니고 문서에 적혀 있는 설계입니다.확인한 버전은 Glide 4.16.0, Coil 3.0.4입니다.세 가지가 겹쳐야 터지는 문제시작하기 전에 하나 짚고 갈게요. 뷰를 키운 건 이미지 로더가 아니라..
-
Jetpack Compose 1.9 다시 읽기 — 그림자, 가시성 추적, 그리고 프리페치가 남긴 함정Android📱 2026. 8. 10. 15:35
Compose 1.9(August '25 릴리스)는 나온 지 1년쯤 된 버전입니다. 그런데 이 릴리스에서 들어온 API 중 지금 프로덕션 코드에서 여전히 잘못 쓰이고 있는 것이 있어서, 늦었지만 정리해 둡니다.BOM 기준:implementation(platform("androidx.compose:compose-bom:2025.08.00"))핵심 변경은 6가지입니다. 그림자 모디파이어, 가시성 추적, OutputTransformation 스타일링, LazyLayout 안정화 + 프리페치, 2D 스크롤, 크래시 스택트레이스 진단.1. 드디어 box-shadow — dropShadow / innerShadow그동안 Compose에서 그림자를 그리는 방법은 Modifier.shadow() 하나였습니다. 문제는 ..
-
Android Direct Share 제대로 이해하기 — Sharing Shortcuts API 정리Android📱 2026. 8. 4. 15:46
안드로이드에서 무언가를 공유할 때 뜨는 Sharesheet(공유 시트). 보통은 "앱을 고르고 → 그 앱에서 다시 대화 상대를 찾는" 두 단계를 거칩니다. Direct Share는 이 두 단계를 없애고, 자주 쓰는 대화 상대를 공유 시트 상단에 바로 띄워 한 번에 공유를 끝내주는 기능입니다. 이 글에서는 Direct Share의 현재 구현 방식인 Sharing Shortcuts API를 정리합니다.먼저: API 변천사 (이게 핵심)Direct Share는 구현 방식이 버전에 따라 크게 바뀌었습니다. 지금 어떤 API를 써야 하는지 헷갈린다면 이 표만 기억하면 됩니다.버전방식상태Android 6 (API 23)ChooserTargetService — 요청 시 on-demand 반환느림, deprecated..
-
a2ui: AI 에이전트가 처음 보는 Android UI를 그리는 법Android📱 2026. 8. 3. 19:18
AI 에이전트는 추론도 하고 도구도 호출하고 대화도 잘합니다. 그런데 네이티브 화면은 못 그립니다. 앱이 어떤 컴포넌트를 가졌는지 모르기 때문이죠. 구글 Android 팀이 오픈소스로 개발 중인 a2ui(Agent to User Interface)는 바로 이 간극을 "공유 계약"으로 메우려는 AndroidX 모듈입니다. 이 글에서 그 설계 아이디어를 정리합니다.먼저 짚고 갈 점: a2ui는 2026년 7월 기준 미출시·비stable·개발 중(work in progress)입니다. Compose 렌더러와 메시지 orchestration은 아직 없어서, 오늘 앱에 의존해 쓸 수 있는 artifact가 아닙니다. 다만 프로토콜과 데이터 모델은 이미 존재해 개념을 미리 볼 수 있습니다.풀려는 문제에이전트가 화면..
-
Jetpack Compose Side Effects 파헤치기 — RememberObserver로 이해하는 effect 핸들러Android📱 2026. 8. 1. 12:16
Jetpack Compose에서 LaunchedEffect, DisposableEffect, SideEffect를 그냥 "레시피"처럼 외워서 쓰고 계신가요? 사실 이 네 가지 effect 핸들러의 동작은 대부분 단 하나의 인터페이스, RememberObserver 위에 얹혀 있습니다. 이 글에서는 Compose 런타임 내부를 열어 effect가 "실제로" 어떻게 동작하는지 정리합니다.왜 effect가 필요한가Composition은 선언적이고 반복 실행됩니다. recomposition이 일어날 때마다 composable 본문이 다시 실행될 수 있죠. 그래서 아래 코드는 문제가 됩니다.@Composablefun UserScreen(userId: String, vm: UserViewModel) { vm...
-
ComposeView가 언제 죽는지 아세요? — ViewCompositionStrategy 파헤치기Android📱 2026. 7. 10. 20:38
ComposeView가 언제 죽는지 아세요? — ViewCompositionStrategy 파헤치기기존 View 기반 앱에 Compose를 조금씩 얹다 보면 반드시 ComposeView를 만나게 됩니다. XML 레이아웃 한복판에 ComposeView를 하나 놓고 setContent { } 안에서 Composable을 그리는 거죠.대부분은 잘 됩니다. 그런데 Fragment에서 쓰다 보면 어느 순간 이상한 크래시나 상태 꼬임을 만나게 되는데, 그 범인이 바로 오늘의 주인공 ViewCompositionStrategy 입니다.컴포지션에도 "생명주기"가 있다Compose를 쓰면 화면 뒤에 Composition(컴포지션)이라는 게 생깁니다. setContent로 만든 UI 트리의 상태를 들고 있는 실체죠. 이 컴..
-
Kotlin 2.4.0 신기능 소개Kotlin🖥 2026. 7. 8. 20:21
What's New in Kotlin 2.4.0Kotlin 2.4.0은 2026년 6월에 릴리스됐습니다.가장 큰 흐름: 컨텍스트 파라미터 정식화, UUID API 안정화, 그리고 K1 컴파일러 완전 제거.🔑 한눈에 보는 핵심영역핵심 변경언어Context parameters Stable, explicit backing fields Stable, 컬렉션 리터럴(실험적)표준 라이브러리kotlin.uuid.Uuid Stable, isSorted() 계열 추가Kotlin/JVMJava 26 바이트코드 지원, 메타데이터에 애노테이션 기본 기록Kotlin/NativeCMS GC 기본 활성화, Swift export Alpha, LLVM 21Kotlin/Wasm증분 컴파일 Stable, WebAssembly Comp..
-
Navigation 3 설명회Android📱 2026. 7. 6. 19:20
Jetpack Navigation 3 (Nav3) 완벽 정리Navigation 3는 Jetpack Compose 전용으로 처음부터 다시 설계된 내비게이션 라이브러리입니다.2025년 11월에 정식(stable) 으로 승격됐고, 이 글 기준 최신 버전은 1.1.4 입니다. 1. 왜 Nav3인가?Navigation 2 (navigation-compose) Navigation 3 (Nav3)백스택 소유라이브러리가 관리 (불투명)개발자가 소유 (List)상태 모델NavController 내부 상태Compose State 기반경로 표현문자열 route / 타입 세이프 routeNavKey 객체 (직렬화 가능)백스택 조작navigate(), popBackStack()backStack.add(), backStack.r..