본문 바로가기

Develop33

[Android] Baseline Profile로 성능 개선하기 앱 성능을 개선해보고 싶다는 생각이 들어 찾아보던 도중 Baseline Profile이 있어 이를 적용해보고자 했다.Baseline Profile의 의미와 적용 과정에서의 트러블 슈팅을 담았다. Baseline ProfileBaseline Profile을 사용하면 포함된 코드 경로의 해석과 JIT(Just In Time) 컴파일 단계를 피하여 최초 실행 후 코드 실행 속도가 약 30% 향상된다.사용자가 느끼는 이점으로는 앱 시작 시간 최적화, 상호작용으로 인한 버벅거림 줄임, 전반적인 런타임 시간 개선 등이 있다. Baseline Profile을 적용하지 않더라도 플레이스토어에서 Cloud Profile을 사용하기는 한다.다만, Cloud Profile은 업데이트 후 배포되기까지 수 시간에서 수일이 걸리.. 2025. 2. 18.
[KMP] Hilt → Koin 마이그레이션 최근 드로이드나이츠 앱을 KMP로 마이그레이션 하는 프로젝트를 진행 중이다. 이때 KMP에서는 안드로이드 전용 라이브러리를 그대로 사용할 수 없기 때문에, 기존 Android 코드로로 작성된 부분을 KMP에서도 호환 가능한 라이브러리로 교체해야 한다. 이번 글에서는 그 과정 중 하나로, 의존성 주입 라이브러리를 Hilt에서 Koin으로 마이그레이션 한 과정을 공유해보려고 한다. Koin우선 Koin 이란, 모든 Kotlin 애플리케이션(ex. 멀티플랫폼, Android, 백엔드)에 종속성 주입을 쉽고 효율적으로 통합하는 방법을 제공하는 DI 라이브러리이다. 그 외의 특징들로는 아래와 같다.읽기 쉽고, 사용하기 쉬우며, 어떤 종류의 애플리케이션이든 작성할 수 있는 Kotlin DSL이다.Android 생태.. 2025. 2. 14.
[Android] ProcessPhoenix 오픈소스 뜯어보기 안드로이드에서 앱을 재시작 해야 할 때 ProcessPhoenix를 사용하면 간편하게 프로세스를 종료하고 다시 앱을 실행할 수 있다.나는 이러한 사실만 알고 있었고, 아래처럼 코드를 작성했을 때 문제가 없어 보였다.Handler(Looper.getMainLooper()).post {   Toast.makeText(context, TOKEN_EXPIRED_ERROR, Toast.LENGTH_LONG).show() // 토큰 만료 토스트 메세지   ProcessPhoenix.triggerRebirth(context) // 앱 재실행 코드} 위 코드는 토큰 만료 시 사용한 코드인데 정작 토큰이 만료됐을 때 토스트 메세지만 뜨고 IllegalStateException이 발생하며 앱이 비정상 종료가 되어버린 것이.. 2025. 2. 2.
[Android] SnackBar 디자인시스템 구현기 (Material 뜯어보기) 지난 포스팅에 있었던 BottomSheet에 이어, SnackBar도 디자인시스템을 구현하면서 공부했던 것을 기록하고자 한다.스낵바도 바텀시트와 동일하게 컴포즈로 작성이 되어 있으며 Material3 라이브러리를 사용하지 않는다. 사실 스낵바 관련 포스팅은 여러 번 올렸었다.📍스와이프 이벤트 처리: https://comyou.tistory.com/130📍LineBreak 속성: https://comyou.tistory.com/131📍단어 단위 개행: https://comyou.tistory.com/136  그래서 이번 글에서는 Material 속성에 기반한 구현방식에 집중해서 작성할 것이다. SnackBarHostStateSnackBarHostState는 스낵바의 상태를 관리하는 클래스이다.Mate.. 2025. 1. 30.
[Android] BottomSheet 디자인시스템 구현기 (Material 뜯어보기) BottomSheet를 디자인시스템으로 구현하면서 Material의 동작 방식을 공부했던 것에 대해 기록하고자 한다.해당 디자인시스템은 컴포즈로 작성이 되어 있으며 Material3 라이브러리를 사용하지 않는다. BottomSheetType우선, Maeterial과는 상관 없는 바텀시트의 디자인이다. 내가 만드려는 디자인시스템의 바텀시트 타입은 두 가지였다. 버튼이 한 개 있는 OneButton 타입버튼이 두 개 있는 TwoButton 타입 각 타입에 대한 각 버튼의 텍스트를 무조건 작성해 줘야 되기 때문에 Sealed Class로 묶어 작성했다.sealed class BottomSheetType { data class OneButton( val buttonText: String .. 2025. 1. 29.
[Android] Compose Compiler Metrics로 성능 측정하기 RecompositionJetpack Compose로 안드로이드를 개발하다보면 Recomposition을 경험하게 된다.Recomposition이란, 상태가 변경될 때마다 Composable을 다시 그리는 현상을 의미한다. 만약 컴포즈가 stable한 상태가 아니라면 컴포즈는 불필요한 Recomposition을 자주 발생시킨다.이를 방지하고자 나는 현재 상태가 stable인지 혹은 unstable인지 알 수 있는 방법을 찾아보았다.그러다 Compose Compiler Metrics를 알게 되어 이에 대해 설명해보고자 한다.Compose Compiler Metrics컴포즈 컴파일러는 composable 함수를 컴파일할 때 function(함수)과 type(타입)에 대해 몇몇 태그를 작성한다.이 태그를 통해.. 2024. 12. 27.
[Android] 단어 단위의 개행하기 (Compose) 지난번 나는 Jetpack Compose로 단어 단위의 개행을 하기 위해 LineBreak 속성에 대해 알아보았었다.정리한 내용: https://comyou.tistory.com/131 [Android] LineBreak 속성 알아보기Compose의 Text에 있는 LineBreak 속성에 대해 알아보자! Text( text = "터닝에서 내 계획에 딱 맞는 대학생 인턴 찾기를 도와드릴게요", style = TerningTheme.typography.title1, modifier = Modifier .padding(bottom = 36.dp) .bacomyou.tistory.com 그러나, LineBreak의 경우, 한국어는 제대로 반영이 되지 않았다.LineBreak의 Simple, Paragraph .. 2024. 11. 22.
[Android] LineBreak 속성 알아보기 Jetpack Compose의 Text에 있는 LineBreak 속성에 대해 알아보자! Text( text = "터닝에서 내 계획에 딱 맞는 대학생 인턴 찾기를 도와드릴게요", style = TerningTheme.typography.title1, modifier = Modifier .padding(bottom = 36.dp) .background(Color.LightGray),) 위처럼 작성 시 나오는 기본 화면은 아래와 같다. 기본적으로 텍스트가 한 글자씩 잘려 줄바꿈 되는 것을 볼 수 있다. 하지만 나는 내가 원하는대로 개행을 하고 싶었고, 이를 위해 Text의 속성 중 하나인 LineBreak에 대해 알아보았다.LineBreak와 관련된 공식문서도 같이 첨.. 2024. 11. 8.
[Android] 스와이프 이벤트 AnchoredDraggable로 처리하기 (Compose) 디자인 시스템을 개발하던 중, 내가 구현한 스와이프 기능에 대해 소개해보고자 한다.AnchoredDraggable스와이프 기능이 들어가는 컴포넌트는 스낵바이다.화면에 띄워진 스낵바를 아래로 스와이프 했을 때 사라지도록 해야 하는 것이다. 처음에 나는 Modifier에서 제공하는 swipeable 속성을 사용하고 싶었다.하지만 이는 Deprecated 되었다고 한다ㅜㅜ그래서 찾아보니, swipeable을 대신해줄 AnchoredDraggable라는 속성이 있어서 이를 활용해주고자 했다. 아래는 AnchoredDraggable에 대해 설명하는 공식문서 링크이다!https://developer.android.com/develop/ui/compose/touch-input/pointer-input/migrate.. 2024. 10. 31.
[Android] 엠플리튜드(Amplitude) 안드로이드에 설치하기 에서 앱을 릴리즈 한 후, 유저의 경험을 바탕으로 앱을 업데이트 하기 위해 엠플리튜드(Amplitude)를 도입하기로 했다.그래서 안드로이드 프로젝트에 엠플리튜드를 설치하는 방법에 대해 설명하도록 하겠다. 엠플리튜드엠플리튜드란, 사용자의 행동 분석을 용이하게 해주는 도구이다.유저의 데이터가 쌓이면, 어느 버튼을 많이 누르는지, 앱의 리텐션은 얼마나 되는지 등을 분석할 수 있다. 그럼 지금부터 어떻게 설치하는 지 알아보자. 엠플리튜드 사용을 위해서 메니페스트에 권한을 추가해준다. 그리고 엠플리튜드 사용을 위한 라이브러리도 추가해준다.[versions]amplitude = "1.17.3"[libraries]amplitude = { group = "com.amplitude", name = "analytics-.. 2024. 10. 15.
[Android] 릴리즈 키 해시 뽑기 앱을 릴리즈 하면 릴리즈 키 해시 값을 별도로 넣어줘야 한다. 릴리즈 해시 키란, 앱을 배포하기 위해 생성한 릴리즈 인증서로부터 해시한 값이다.그래서 이번에 키 해시를 뽑는 방법을 간단하게 알아볼 것이다. release key hash터미널에서 키 해시 값을 뽑는 방법이다. 우선 아래 링크에서 openssl을 다운받는다.https://code.google.com/archive/p/openssl-for-windows/downloads Google Code Archive - Long-term storage for Google Code Project Hosting. code.google.com 그리고 아래 링크에서 jdk도 다운받는다.https://www.oracle.com/java/technologies/.. 2024. 8. 29.
[Android] aab 파일 만들기 릴리즈를 하기 위해서는 aab 파일을 만들어야 한다.그래서 aab 파일을 만드는 법에 대해서 간단히 알아보려고 한다. aab 파일먼저 build에 있는 Generate Signed App Bundle / APK로 가준다. 그 다음 Android app bundle을 누른 후 Next를 누른다.  그 다음에 create new를 눌러서 키의 비밀번호를 만들어준다.  마지막으로 relase를 선택해준다. 그리고 파일이 만들어진 위치에서 aab 파일을 확인하면 된다!! 2024. 8. 25.