본문 바로가기

분류 전체보기87

[Android] 진동 세기 조절이 안되는 문제 해결법 context.getSystemService(Context.VIBRATOR_MANAGER_SERVICE) as VibratorManagercontext.getSystemService(VIBRATOR_SERVICE) as Vibrator 우리가 안드로이드 스마트폰에 진동을 줄 때는 위와 같이 VibratorManager 나 Vibrator 인스턴스 객체를 만들고, 이것에 존재하는 vigrate Method 사용를 사용한다.이번에 회사에서 진동을 줘야하는 작업이 생겨서, 위의 코드를 사용했는데 한 가지 문제가 생겼다. 일부 기기에서는 진동의 세기를 내가 조정한 세기로 실행이 되는 반면에 어떤 기기들에서는 진동의 세기를 조절할 수 없다는 문제였다.가끔가다가 LG 와 같은 디바이스에서 이상한 버그들이 발생하므로.. 2024. 11. 3.
[Android] mockk 에서 reified inline function (Generic) 이 사용이 불가능 한 이유 이번에 회사 프로젝트를 진행하면서 UI Test Code 를 작업하는데 한 가지 문제가 생겼다. 우리는 UI Test 를 위해 작업할때 ViewModel 에 Inject 되고 있는 인스턴스들에 대한 MockUp 설정을 위해 Mockk 라이브러리를 사용하는데, Mockk 를 아무리 사용해도 DataStore 에서 값을 가져오는 UseCase 가 엉뚱한 값을 내뱉는다는 에러가 발생하는 것이다.에러의 발생 원인은 내가 꺼내려는 것이 Custom class 인 A class 이고, 이를 직접 명시해줬음에도 테스트 실행 시 자꾸 A class 를 String 으로 변환작업처리 후 꺼내려고 하는 것이 문제였다. 분명 실제 앱을 구동하였을때는 정상 작동하는 코드가, 왜 Test 실행시에만 이러는 것인지 알아내기 위해.. 2024. 10. 22.
[Jetpack Compose] Compose UI Action 으로 인한 Lambda 최소한으로 줄여보기 [MVI 패턴] Compose 를 쓰는 사람이라면 Compose 에서 State Hoisting (상태 끌어올리기) 이라는 기법이 존재한다는 것을 알고 있을 것이다.State Hoisting 을 통해 최소한의 부분에서 리컴포지션을 유발하도록 하고 함수의 재사용과 테스트 용이성을 증대시킬 수도 있다. 하지만 이러한 State Hoisting 으로 인해서 우리의 함수에는 엄청난 수의 Lambda 를 전달해주는 상황들이 벌어지고, 이로 인해 코드의 복잡성이 증대하게 되는데 이번 시간에는 이러한 문제를 해결하기 위한 방법을 작성해보려 한다.# 예시하나 간단한 로직을 만들어보자.뷰모델에서 MutableStateFlow 를 작성하고, 이를 컴포저블에서 구독한 뒤 버튼을 클릭했을때 뷰모델의 StateFlow 를 업데이트 해주는 로직.. 2024. 10. 21.
[Android] 프로젝트 내 사용되지 않는 코드 삭제할 때 쉽게 찾아내는 법 프로젝트를 진행하다 보면 리팩토링 기간이 필수적으로 찾아올 것이다.리팩토링 기간때는 코드 구성을 새롭게 하거나 기존 로직을 더욱 더 간편하고 깔끔하게 바꾸는 등의 작업을 진행하는 것이 대부분이지만 레거시 코드나 사용되지 않는 코드를 삭제하는 것도 리팩토링 작업중 하나이기도 하다. 하지만 자신이 진행한 프로젝트의 규모가 매우 방대하다면 현재 사용되지 않는 코드들을 찾기가 매우 어려울 것이다.이럴 때 다음과 같은 방법들을 사용하면 손쉽게 현재 사용되지 않는 코드들을 확인할 수 있다. # 사용되지 않는 코드 확인우선 안드로이드 스튜디오 내에서 Shift 를 두 번 눌러주자 그럼 위와 같은 창이 나오게 되는데, 여기서 Inspect Code 를 검색하고 그것을 더블클릭하여 실행해주자.  실행이 완료되면 위와 같.. 2024. 10. 15.
[Android] 테스트 환경에서androidx.test.internal.platform.app.ActivityInvoker.getIntentForActivity(java.lang.Class) 에러 해결 안드로이드 라이브러리들의 버전을 업데이트하고 나서 이상하게 자꾸 android.content.Intent androidx.test.internal.platform.app.ActivityInvoker.getIntentForActivity(java.lang.Class) 라는 에러가 발생하였다. 분명 junit 및 espresso 라이브러리들이 서로 호환되는 버전임에도 왜 이러한 일이 발생하나 확인해보니 이 두 개의 라이브러리 말고도 androidxRunner 도 버전을 올려줘야 했는데, 버전 업그레이드를 하지 않아 발생하는 오류였다.  위와 같이 최신 버전으로 맞춰주니 에러가 해결되었다. 2024. 10. 14.
[Android] Firebase java.lang.IllegalStateException: Default FirebaseApp is not initialized in this process 에러 해결법 프로젝트를 진행중에 Firebase 를 사용해야 하는 상황이 생겨 프로젝트를 등록하고 Json 파일을 앱에 등록, Root Project 의 Build.gradle.kts 에 플러그인을 추가 후 디펜던시 추가를 진행하였다. 그리고 앱을 실행하려는데 java.lang.IllegalStateException: Default FirebaseApp is not initialized in this process 라는 에러가 발생하였다. 이 에러가 발생할 때는 보통 Application class 에서 초기화를 진행하지 않거나, Json 파일을 찾을 수 없을때 이러한 에러가 발생하였던 것으로 기억하는데, 나의 경우 모두 다 잘 되어있었던 것이 문제 .. 사소하지만 이 에러 때문에 2시간을 낭비하는 도중 App Bu.. 2024. 10. 9.