전체 글

안드로이드 공부 중인 컴붕이 블로그입니다.
· Android
이번 WAPP를 출시하기 위해, Google Play Console에 등록을 하고, 심사를 기다렸다. 그러나,, 와피 1.0.0v의 앱 심사 결과는 알 수 없는 ANR 문제로 거절당했다. 당연히 거절은 당할 수 있다고 생각했는데, 어떤 화면에서, 어떤 로직에서 발생했는지 확인할 수 없어 너무 답답했다. (나와 동료 개발자분 뿐만아니라, 다른 많은 분께서도 릴리즈 앱 테스트를 도와주셨는데, ANR 문제는 그동안 겪은 적도 없기 때문이다.) 이런 상황을 해결하기 위해 동료분과 논의하며, 일단 의심이 가는 로직을 소거하고, Analytics Event를 통해 기록을 남기는 것으로 결정했다. NowInAndroid의 Firebase Analytics을 기반으로 하여 구현하였습니다. 무엇을 기록해야 할까 ? 앱 ..
· Android
와피 프로젝트의 기능 개발을 마무리하며, 드디어 앱을 배포할 시기가 다가왔다 ! 처음 프로젝트를 시작할 때 CI 환경을 직접 구축하고, 관련된 블로그 글을 올린지 6개월이 지났다. 이번에는 Github Actions를 활용하여 APK를 빌드하고, APK Signing 그리고 Firebase App Distribution까지 자동으로 수행하는 프로세스를 구축하고자 한다. 아래에서는 자동 앱 배포 프로세스에 대한 방법과 구현하며 마주친 문제와 해결방법에 대해 소개한다. (Github Actions와 CI 관련된 내용은 이전 내용을 참고하세요 !) Android CI/CD : Github Action을 통해 CI/CD 구축하기 Android CI/CD : Github Action을 통해, Discord + J..
· 프로젝트
이번에 UMC에서 주관하는 "모여봐요 해커톤"에 참가하게 되었다. 해커톤을 진행하며 많은 트러블을 겪었는데, 그 중 가장 기억에 남는 multipart/form-data 이슈에 대해 소개하고, 또 공부한 내용을 기록하고자 한다. (마지막에 해커톤 후기도 포함되어 있다.) 기존 나의 multipart/form-data 지식 ? 이미지와 같은 큰 사이즈의 요청을 보낼 때 사용하는 하나의 프로토콜? 정도로 알고 있었고, multipart/form-data 전송 방식 및 키워드에 대한 지식은 전혀 없었다. 구글링을 통해 Retrofit2 @Multipart를 활용하여 단순히 이미지를 전송하는 방식만 알고 있었다. (사실 단일 이미지 전송만을 위해서만 주로 사용했고, 사용 빈도가 높지 않아 지식의 필요성을 못 느..
· Android
SideEffect는 Composable 함수 외부에서 발생하는 변화이며, Composable 함수는 Recomposition에 대한 특성과 Composable 함수의 알 수 없는 생명주기 때문에 지양해야 한다고 소개했다. 이러한 SideEffect를 처리하기 위해 SideEffect Handler를 소개하였고, 이번에도 이어서 SideEffect, produceState(collectAsState, collectAsStateWithLifecycle), derivedStateOf, snapshotFlow에 대해서 순서대로 소개한다. SideEffect 여기서 소개하는 SideEffect는 SideEffect Handler중 하나로, 부수효과 SideEffect와 다르다. SideEffect는 Compos..
· Android
SideEffect SideEffect란, Composable 함수 외부에서 발생하는 앱 상태의 변화를 의미한다. Compose에서 SideEffect는 지양하고 있다. 왜냐하면, 외부에서 Composable 함수의 생명주기를 알 수 없으며, Recomposition에 대한 속성 떄문이다. 간단한 예시를 통해 SideEffect를 알아보자 ! class MainActivity : ComponentActivity() { private var i = 0 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { var text by remember { mutableStateOf("") }..
· Kotlin
필자는 서버나, 외부 DB가 필요한 Android 프로젝트에 Firebase를 사용하고 있다. Firebase sdk의 경우 Java 코드로 구현되어 있으며, callback을 통해 비동기를 지원하는 것이 특징이다. 필자는 이러한 callback을 SuspendCoroutines를 통해 처리하고 있으며, 해당 SuspendCoroutines에 대해 공부한 내용을 포스팅하려고 한다. Callback이란 무엇일까? callback이란 비동기를 구현하기 위한 하나의 방법으로, 어떤 시점에 도달하였거나, 이벤트가 발생하였을 때 실행되는 코드를 의미한다. 가장 쉽게 Android에서 onCreate(), onResume()의 경우 모두 callback 함수라고 볼 수 있다. 이러한 callback을 통해, 특정 ..
정자이노
EveryAndroid