개발/트러블슈팅

개발/트러블슈팅

[안드로이드] 채팅 기능 메시지 그룹화 로직 개선

* 진행중인 사이드 프로젝트를 인수인계 받기 전에 구현되어 있던 기능을 개선하다 생긴 사례에 대한 내용입니다. 현재 개발중인 이 앱에는 러너들을 위한 "유사 채팅 기능"이 존재한다.소켓 통신을 통한 실시간 채팅 기능은 아니며, 메시지 전송 시마다 리스트를 갱신하는 방식으로 구현되어 있었다. ✔️ 기능 개요최대 8명까지 참여가 가능하다.메시지의 진영은 (내가 보낸), (나머지 사람들이 보낸)으로 나누어진다.(카카오톡처럼)메시지는 텍스트, 이미지를 전송할 수 있다.✔️ 메시지 진영 구분클래스 간의 계층 구조를 만들고, ListAdapter에서 뷰홀더에 bind할 때 sealed class를 (내가 보낸) 메시지와 (나머지 사람들이 보낸) 메시지로 나눈 뒤(텍스트)와 (메시지)를 나누는 방식으로 구현되어 있었..

개발/트러블슈팅

[안드로이드] 릴리즈 빌드 시 난독화 설정 문제(카카오, 네이버 소셜 로그인)

진행중이던 사이드 프로젝트 내부 테스트를 위해 번들 빌드 후에 배포했는데, 소셜 로그인 관련 난독화 문제가 발생했다.대부분의 API나 라이브러리들 또한 난독화가 적용되어 있어서 디버깅이 쉽지는 않다.이전에도 비슷한 문제가 몇번 발생해서 기록해야지 다짐만하고 까먹어서 이번에는 적어본다. 모든 이슈들은 디버그 빌드에서는 발생하지 않던 문제이므로, 무조건 난독화 관련 문제일 것이라고 예상하고다른 블로그들을 참고해서 난독화 설정 파일만 계속 수정했으나, 해결되지 않았다.1. 카카오 로그인 UserApi.checkAccessToken로그만 보고 카카오 소셜 로그인 SDK 관련 난독화 문제일 줄 알았지만 로그와 내부 코드를 뜯어보니 내부에서 Retrofit2의 CallAdapter를 사용하고 있었고, 레트로핏 공식..

개발/트러블슈팅

[안드로이드] 안드로이드 스튜디오 PluginException

안드로이드 스튜디오 Giraffe patch3로 업데이트 후, 설정에서 experimental 기능인 new UI를 적용하다가 발생한 문제이다. 그 순간에 내 안드로이드 스튜디오는 Plugin들을 업데이트 중이였고,(Dracula, Material icon 등) 업데이트 중에 IDE가 재시작되면서 이 예외가 발생했다. 안드로이드 스튜디오를 근 3-4년간 사용하면서 윈도우 시스템 팝업으로 예외를 뿜어내는 경우는 처음이라, 계속 검색해봤지만 일반적으로 경험해보기 힘든 IDE 오류라서 해답을 찾기가 어려웠다. Plugin 업데이트 중설정 - new UI 적용안드로이드 스튜디오 재구동예외 발생 팝업 출력된 후 안드로이드 스튜디오 진입 불가 오류 메시지com.intellij.diagnostic.PluginExce..

개발/트러블슈팅

[안드로이드] Jetpack compose dependency 설정

xml과 같은 dsl은 숙련도가 아무리 올라도 복잡한 구조의 ui에 대해서는 개선의 한계가 있다. 볼수록 어질어질 그래서 gpl인 kotlin 기반의 compose를 사용하는 것이 훨씬 개발이나 유지보수 측면에서 큰 이점을 가지는 것 같다. 재사용적인 측면이 특히! 오늘은 Jetpack compose를 시작하는 사람들이 dependency 설정하는 데에 조금이나마 도움이 될 수 있는 gradle 설정에 대한 포스팅이다. jdk / gradle / androidx activity / compose compiler / material3 -> 이 5개가 오늘의 핵심 멤버이다. 1. jvmTarget / compileOptions는 jdk 버전이랑 맞추자! 예전에 jdk11버전을 사용하면서 jvm/compile..

개발/트러블슈팅

[안드로이드] FragmentContainerView NullPointerException 해결

defaultNavHost 설정, navGraph 설정, NavHostFragment, NavController 모두 잘 작성된 코드인데도 종종 아래 오류와 같이 NavHostFragment NullPointerException이 발생하는 경우가 있습니다. java.lang.RuntimeException: Unable to start activity ComponentInfo{com.sample.yolo/com.sample.presentation.view.MainActivity}: java.lang.NullPointerException: null cannot be cast to non-null type androidx.navigation.fragment.NavHostFragment 아래 오류 코드를 보면 ..

개발/트러블슈팅

[안드로이드] is not abstract and does not implement abstract member public abstract fun getActionId() 오류

> Task :presentation:compileDebugKotlin FAILED e: file:///C:/Users/Minkyu/AndroidStudioProjects/Ratel/android/presentation/build/generated/source/navigation-args/debug/com/project/presentation/view/ListFragmentDirections.kt:9:16 Class 'ActionListFragmentToMemoFragment' is not abstract and does not implement abstract member public abstract fun getActionId(): Int defined in androidx.navigation.Nav..

개발/트러블슈팅

[안드로이드] Could not resolve com.android.tools.build:gradle:7.4.2 오류

멀티모듈에다 여러 써드파티 라이브러리들까지 뭉탱이로 넣은 프로젝트 설정은 너무 힘들다.. 오늘만 열개 정도는 해결한 것 같은데, 난 보통 이런 오류를 마주할 때마다 무지성 수정을 하는 경우가 많다. 특히 하루에 열댓개씩 터져나오는 경우에는 스트레스 때문에 더더욱.. 정확히 요점을 짚어내기 보다는 조금 읽고 이 부분이 문젠가? 수정 -> 아니네 여긴가? 수정 -> 반복.. 이런식이다. 하지만 아무리 갑갑해도 에러 메시지를 꼼꼼히 읽고 가려운 부분을 정확하게 긁어줘야 금방 해결할 수 있다. 아래 에러 메시지는 그 중에서 제일 해결이 오래 걸린 오류이다. A problem occurred configuring root project 'MyApp'. > Could not resolve all files for ..

개발/트러블슈팅

[안드로이드] Circular dependency 오류

* Exception is: org.gradle.api.CircularReferenceException: Circular dependency between the following tasks: :app:processDebugResources \--- :presentation:processDebugResources \--- :app:processDebugResources (*) 클린 아키텍처를 적용한 멀티모듈 프로젝트에서 발생한 에러 메시지이다. 계층 간 분리를 위해 모듈을 나눈 뒤 고수준에서 저수준으로 의존성을 추가해주었고, 안드로이드 진입점과 의존성 주입을 위해 app 모듈이 data/domain/presentation 계층을 모두 참조하도록 설정했다. 하지만 프로젝트 설정 과정에서 presentati..

개발/트러블슈팅

[안드로이드] by viewModels() 종속성 추가

0. ktxAndroid Jetpack과 기타 Android 라이브러리에 포함된 Kotlin 확장 프로그램 세트이다. Jetpack, Android , 기타 API 등과 Kotlin을 사용하기 위해 사용한다. 1. by viewModels() 코틀린의 by는 위임(deligate) 패턴을 구현하는데에 사용되는 키워드이다. 그로 인해 ViewModelProvider를 사용하지 않아도 by viewModels 함수를 사용하여 viewModel을 지연 생성할 수 있다. 2. 종속성 추가 viewmodel 관련 ktx 종속성을 추가했는데도 by viewModels 함수가 제공되지 않아 당황한 사람들이 있을 것이다. viewmodel의 초기화를 위한 함수들은 Activity/Fragment에 포함되어 있어 그런 ..

개발/트러블슈팅

[안드로이드] ViewModelProvider gradle 오류

오늘 "아키텍처를 알아야 앱 개발이 보인다" 라는 책을 공부하던 중, 한가지 이슈에 직면했다. ViewModel 파트 실습중이였는데, gradle 설정을 완료하였음에도 ViewModel 생성을 위한 ViewModelProvider 클래스가 생성되지 않는 이슈였다. 수정을 거쳐도 이미 deprecated된 ViewModelProviders가 나오거나 아예 엉뚱한 HasDefaultViewModelProvideFactory 였나? 뭔가 하는 이상한 클래스가 나왔다. 아래 코드는 developers에서 제공하는 최신 버전의 gradle이다. dependencies { def lifecycle_version = "2.6.0-alpha01" def arch_version = "2.1.0" // ViewModel ..

최선의 최선
'개발/트러블슈팅' 카테고리의 글 목록