Android

· 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..
· 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("") }..
· Android
현재 프로젝트에 의존성 주입을 위해 Hilt를 사용하고 있다. Hilt는 Android에서 Dagger를 쉽게 사용할 수 있게 만들어주는 매퍼 라이브러리이다. 필자는 Hilt를 도입하면서, 제대로 알지 못하고 사용하여 많은 문제를 겪었다. 1. Hilt Scope 리뷰처럼, 필자는 코드의 유스케이스를 Hilt Scope Annotation을 처리하였다. 단순히 매번 호출할 때마다 인스턴스 생성하는 것을 방지하기 위함이였다. 리뷰를 통해 레퍼런스를 찾아보다, Hilt Scope를 잘못 사용하면 메모리 누수를 발생시키고 더 나아가 성능 저하까지 일으킨다는 내용이 많았다. 아무래도 생명주기와 연관있다 보니, GC에 수집되지 않는 부분이 가장 큰 것 같다. 2. Hilt Component ActivityComp..
· Android
현재 진행하고 있는 프로젝트에서, 기존 모놀리틱 구조를 다중 모듈 프로젝트로 마이그레이션 하였다. 마이그레이션을 하면서, 종속성을 관리하기 위해 VersionCatalog를, 플러그인을 관리하기 위해 Custom Convention Plugin을 도입하였다. 필자는 다른 레퍼런스를 확인하며 구현하였지만, 제대로 알고 쓰지 않는 것 같았다. 따라서 이번 포스팅을 통해 Custom Convention Plugin을 정리하고, 소개하고자 한다. Task 컴파일된 코드를 실행가능한 파일로 변환하는 작업을 빌드라고 한다. 안드로이드로 가정하면, 컴파일된 코틀린 파일을 aab, apk와 같은 실행가능한 파일로 만드는 작업을 의미한다. 이러한 작업은 우리가 정의한 Gradle 파일에서 Task 단위로 수행되며, Ta..
정자이노
'Android' 카테고리의 글 목록