GMA Next Gen SDK 도입기 feat. 공식 문서 안믿기
·
Android
안녕하세요 아키입니다. 이번엔 Hilingual 프로젝트에 GMA Next Gen SDK를 도입하면서 겪은 일들을 정리해봤어요. 공식 문서를 따라가다 지뢰 밟은 이야기, Compose에 광고를 제대로 녹이기 위해 고민한 이야기, 그리고 혼자 해결 못 해서 Google 엔지니어한테 직접 제보한 이야기를 해보려 합니다. :)왜 하필 베타 SDK였나기존 GMA SDK는 수익화엔 필수였지만 메인 스레드에서 초기화되는 구조 때문에 앱 시작 시간에 영향을 줬어요. 광고 SDK 때문에 앱이 느려지는 건 좀 억울하잖아요?Next Gen SDK는 이걸 구조적으로 해결하려 했습니다. 핵심 변화 세 가지를 꼽자면초기화가 반드시 백그라운드 스레드에서 이뤄져야 하도록 강제해서 ANR을 원천 차단SDK 자체가 Kotlin으로 재..
도넛 홀 스킵핑과 상태 읽기 지연, 뭐가 다를까?
·
우아한테크코스/레벨1
들어가며얼마전에 레아가 리컴포지션 관련해서 아티클을 공유해주셨어요. 그래서 제가 알고있던 한가지 최적화 기법과 닮아있다고 생각이 들었고 의문이 들었어요. 🤔"도넛 홀 스킵핑이랑 Defer State Read가 결국 같은 말 아닌가?둘 다 '상태를 어디서 읽느냐'의 문제 아님???"직관적으로는 틀린 말이 아니라고 생각해요. 실제로 두 기법의 공통 철학은 "상태를 읽는 위치를 최대한 좁혀라" 이면서 "불필요한 재실행을 줄이는 것." 이라는 목표도 같아요.차이점은 동작하는 레이어가 다릅니다. 목표는 같지만 다른 계층에서 작동하는 두 개의 최적화에 대해서 이 글은 그 차이를 명확하게 짚는 것을 목표로 합니다. 👍🏻1. 전제조건 - Compose의 렌더링 파이프라인두 기법의 차이를 이해하려면 Compose가..
??님 Preview가 흐릿한데 왜그래요?
·
우아한테크코스/레벨1
안녕하세요 아키입니다. 오늘은 우테코 미션을 진행하다가 마주쳤던 Compose Preview 렌더링 이슈를 공유해보려 합니다.@Preview(device = Devices.DESKTOP)을 사용하면 텍스트와 경계선이 심하게 흐릿하게 렌더링되는 반면 device = Devices.TABLET으로 바꾸면 훨씬 선명하게 보이는 현상을 겪어본 적 있으신가요? 저는 아래와 같은 경우를 경험했어요.처음에는 또 프리뷰가 말썽이구나 했지만 원인은 코드가 아니라 Android Studio 렌더링 엔진의 스케일링 방식과 기기 프로파일별 DPI 설정의 차이에 있었습니다.원인 분석1. Devices.DESKTOP의 낮은 DPIAndroid Studio의 Compose Tooling에서 정의한 Devices.DESKTOP의 기..
레벨0 - 지연 초기화와 위임, 그리고 4주간의 마무리
·
우아한테크코스/레벨0
마지막 주를 시작하면서드디어 4주차입니다. 솔직히 마지막 주가 가장 실용적인 주차라고 생각했어요. lateinit이랑 by lazy는 안드로이드 프로젝트에서 거의 매일 쓰는 키워드인데 그냥 "Hilt 필드 주입에는 lateinit, 무거운 연산에는 by lazy" 정도로만 사용해왔습니다. 이번 주차도 디컴파일로 학습을 진행했어요.lateinit과 by lazy, 뭐가 다른가이 둘을 "lateinit은 var에만, by lazy는 val에만" 같은, 사용 상황으로만 구분하는 글은 많지만 바이트코드를 보면 두 개념이 얼마나 다른 방식으로 구현되는지 훨씬 명확하게 드러납니다.lateinit은 그냥 null임Compose 환경에서 lateinit이 가장 자주 등장하는 곳은 Hilt 필드 주입이에요. 생성자 주입..
Android 17 BETA, 공부 많이 된다
·
Android
Android 17 Beta 1이 2월 13일에 공개됐습니다. The First Beta of Android 17News and insights on the Android platform, developer tools, and events.android-developers.googleblog.com구글이 생각보다 빠르게 출시를 했는데요? 릴리즈 노트를 훑다가 한 줄이 눈에 걸렸습니다.removes the developer opt-out for orientation and resizability restrictions on large screen devices Android 16에서 이미 방향/크기 조절 제한이 도입됐고 당시에는 opt-out 방법을 함께 제공했습니다. 그걸 이번에 막겠다는 얘기입니다. 단..
레벨0 - 제네릭과 널, 그리고 3주간의 흐름
·
우아한테크코스/레벨0
세 번째 주를 시작하며계획중 가장 머리 아픈 계획이었던 3주차 입니다. 제네릭이랑 널 안전성. 특히 여태까지 안드로이드 개발을 하면서 공변성, 반공변성 같은 개념은 적당이 이해만 하고 넘겼었어요. 사실 직관적인 개념은 아니라고 생각합니다.😅 안드로이드 개발하면서 List이 List의 하위 타입이 아니라는 건 알았지만 왜 그런지는 제대로 이해하지는 않았어요. 그냥 "제네릭이 그렇게 작동한다"고만 받아들였던 것 같아요.이번 주는 그 "왜"를 파고들었습니다. 2주차에서 인터페이스와 추상 클래스의 차이를 바이트코드로 확인했던 것처럼 제네릭도 디컴파일해보면 뭔가 보일거라고 생각해서 확인했어요.나야, 제네릭일단 간단한 코드부터 시작했습니다.val strings: List = listOf("a", "b")val a..