본문 바로가기

반응형

Android

Android 앱에 디버깅 플랫폼 Flipper 적용 Flipper는 iOS, Android 및 React Native 앱을 디버깅하기 위한 플랫폼입니다. 데스크탑 인터페이스로 간단하게 앱을 시각화, 검사하고 제어할 수 있습니다. Flipper를 그대로 사용해도 좋지만, 필요에 따라 플러그인 API를 사용하여 확장할 수도 있습니다. 오늘은 Android 앱에 Flipper를 적용하는 법에 대해 알아보겠습니다. 실행 환경은 macOS입니다. 먼저 아래 링크에서 자신의데스크탑 OS에 맞는 프로그램을 다운로드 받습니다. https://fbflipper.com/ Flipper 실행 화면은 다음과 같습니다. 왼쪽 아래 Setup Doctor를 눌러 봅니다. 데스크탑 프로그램에서는 다음과 같은 설정을 해야 합니다: OpenSSL 설치 (https://wiki.open.. 더보기
flatMapConcat, flatMapMerge, flatMapLatest 차이 Flow 관련 로직을 구현하다가 flatMapConcat에서는 동작하지 않던 기능이 flatMapMerge, flatMapLatest로 변경하니 동작하는 경험을 하여 세 메소드의 차이를 알아보았습니다. Flattening flow: flatMapConcat, flatMapMerge and flatMapLatest Flattening flow: flatMapConcat, flatMapMerge and flatMapLatest Let's learn how can we flatMap flow with flatMapConcat, flatMapMerge, and flatMapLatest. kt.academy flatMap은 콜렉션에서 사용할 수 있는 유용한 기능입니다. 콜렉션에서는 map과 비슷하지만 변환 함수 .. 더보기
PagingData Unit Test 하기 앱 내에서는 PagingDataAdapter의 snapshot()을 호출하여 PagingData를 리스트로 반환할 수 있습니다. 다만, PagingDataAdapter는 View를 포함하고 있기 때문에 Unit Test 내에서 사용할 수 없습니다. Instrumented Test로 구현하자니... 느리기도 하고 같은 맥락을 가진 테스트가 여러 곳으로 파편화 되기 때문에 고민할 수 밖에 없었습니다. PagingDataAdapter의 내부 구현을 보면 다음과 같이 differ의 snapshot을 호출하는 것을 확인할 수 있습니다. differ는 AsyncPagingDataDiffer 인스턴스입니다. AsyncPagingDataDiffer를 그대로 사용하면 될까요? 가능은 합니다. 다만, AsyncPaging.. 더보기
Android Studio XML 파일 Split View로 열기 (IntelliJ IDEA Classic 단축키 기준) Git 탭에서 파일을 선택하고 F4를 누르면 파일을 수정할 수 있습니다. 요긴하게 쓰고 있는 기능이지만, XML 파일의 경우 Design 화면으로 열리고, 해당 화면으로 포커스가 이동하지도 않아 ctrl + shift + 좌우 방향키 단축키도 먹히지 않습니다. (Android Studio Chipmunk | 2021.2.1 Patch 1 기준) 위와 같은 문제를 해결하려면 Preferences > Editor > Design Tools에서 Other Resources (e.g. Layout, Menu, Navigation) 옵션을 Split으로 변경하고 저장합니다. 더보기
IntelliJ Reformat Code Import 최적화(Optimize Imports) 실행 안 될 때 평소 파일을 열었을 때 코드가 너무 길거나, 더럽거나, 보기 불편하거나, 남의 코드거나 하면 cmd + option + L 단축키를 이용하여 Reformat Code 명령을 실행하는 편입니다. 해당 명령을 실행하면 Optimize Imports도 함께 동작하며 abc 순서에 맞게 정리해주곤 합니다. 어느 날부턴가 Reformat Code 실행 시 Optimize Imports가 동작하지 않는 것을 확인하여 IntelliJ를 지웠다 재설치했지만 설정을 덮어쓰기 해서인지 여전히 동작하지 않았습니다. Reformat Code의 옵션은 Reformat File...의 옵션을 따라가는 것을 확인하여 기록 차 이 글을 남깁니다. cmd + option + shift + L을 눌러 Reformat File 실행 창을.. 더보기
[버그?] androidx Toolbar app:navigationIcon not working https://issuetracker.google.com/issues/121078028 Google Issue Tracker issuetracker.google.com androidx navigation과 androix toolbar를 결합하여 fragment 및 activity 네비게이션을 쉽고 간단하게 구현할 수 있는데요. 문제는 이렇게 조합하여 사용할 경우 home icon을 변경할 수 없습니다. 기본 제공 아이콘만 써야 함!! 다음과 같이 조합하여 사용하면 비슷한 효과를 낼 수 있습니다. 저는 레거시로 인해 android.widget.Toolbar를 사용했으므로 androidx toolbar에서도 같은 결과일지는 모르겠습니다! override fun onOptionsItemSelected(item.. 더보기
Dagger Hilt와 App Startup 조합 시 AndroidTest 불가능 TL; DR 2022-05-11, dagger 2.42, startup 1.20.0-alpha01 기준 불가능합니다. 문제 App Startup 적용 이후 AndroidTest(Instrumented Test)가 실행되지 않습니다. (debugger 무한 대기) Logcat을 보니 다음과 비슷한 오류가 찍힙니다. 2022-04-11 10:41:09.352 24409-24409/com.example.appstartupinstrumentationtest E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.appstartupinstrumentationtest, PID: 24409 java.lang.RuntimeException: Unable to get.. 더보기
kotest Project Config 다른 모듈과 공유 Unit Test를 하다보면 Dispatchers.Main을 사용하는 코루틴과 문제가 발생하는 경우가 잦다. kotest에서는 이를 다음과 같이 Project Config를 사용하여 해결한다. object KotestConfig : AbstractProjectConfig() { private val testDispatcher = UnconfinedTestDispatcher() override suspend fun beforeProject() { super.beforeProject() Dispatchers.setMain(testDispatcher) } override suspend fun afterProject() { super.afterProject() Dispatchers.resetMain() } } .. 더보기

반응형