목록안드로이드 (77)
우찬쓰 개발블로그
라이브러리들 버전 정리좀 하려다가 어느순간 부터 :app:dependencies가 제대로 동작하지 않았다. 에러는 다음과 같았는데 * What went wrong:An exception occurred applying plugin request [id: 'com.android.library']> Failed to apply plugin 'com.android.internal.library'. > The configurator service has already configured the build analyzer service. To add execution time warnings, add them directly to the BuildAnalyzerService.* Try:> Run with --..
CardView안에 RecyclerView를 넣은 레이아웃 구조의 형태에서 CardView에만 클릭이벤트를 넣었는데도 RecyclerView의 아이템의 해당하는 영역에 클릭을하면 CardView에서 클릭이벤트가 발생하지 않는다. 적당한 xml 옵션이 없는거 같아서 (clickable, focusable 만으로는 해결이 안되는거 같음,,) 그냥 RecyclerView의 상위 ViewGroup을 하나 만들고 이 ViewGroup에서 TouchEvent를 인터셉트 하는게 빠른거 같았다. 기본적으로 터치 이벤트는 아래의 플로우로 하위 뷰까지 전달된다.클릭이벤트도 결국 아래 플로우를 응용한 구조이기 때문에 중간에 onInterceptTouchEvent를 true로 주면 그 아래까지 터치 이벤트가 전달이 되지 않기..
Pull Request 에 Sonar 를 붙여서 새로운 코드의 Test Coverage가 60%가 넘지않으면 fail이 뜨도록 하는 Sonar 설정을 깃헙에 붙여서 쓰고있었다. 잘 쓰고 있던 와중에, 이상한 현상이 하나 발견되었는데, 내 로컬에서는 분명이 문제없게 돌아가는 테스트코드가 Pull Request Sonar를 깃 액션으로 돌리면, 특정 테스트코드의 ViewModel 생성부에 constructor에 Repository하나를 넣지않았다고 계속 컴파일 에러를 뱉는 것이었다. 그래서 pullRequest.yml에 빌드옵션도 넣어보고 캐시도 날려보고 별짓을 다했다. 거쳤던 사고회로 1. 깃 러너캐시가 꼬였나? 2. 내 로컬의 캐시가 꼬여서 안되야할 코드가 돌아갔나?(? 사실 돌아보면 말도안됨) 3. 소..
1년에 한번 정도씩 까먹을때쯤 관련 이슈가 일어나서 그냥 정리해두기로.. LaunchMode Standard (default) - 항상 새로 생성. [push A] A [push B] A - B [push A] A - B - A [push A] A - B - A - A SingleTop - 최상단에 이미 그 Activity가 있을경우 그대로 사용. - 새로 호출시 onCreate 대신 onNewIntent가 호출됨. [push A] #SingleTop A [push B] A - B [push A] #SingleTop A - B - A [push A] #SingleTop A - B - A SingleTask - 같은 taskAffinity의 어떠한 Task stack 내에 이미 그 Activity를 가지고..
적당한 그림을 항상 못찾아서.. 저장용 refer https://medium.com/androiddevelopers/the-android-lifecycle-cheat-sheet-part-iii-fragments-afc87d4f37fd The Android Lifecycle cheat sheet — part III : Fragments In this series: * Part I: Activities — single activity lifecycle * Part II: Multiple activities — navigation and back stack * Part III… medium.com
ViewModel의 테스트 코드를 짜다가 ViewModel.launch에 delay가 있을경우, 시간차 문제로 테스트 코드가 도달하지 못하는 문제를 마주했다. advanceUntilIdle() 를 사용하면 해결될줄 알았건만 애석하게도 테스트코드는 계속 delay()의 다음으로 도달하지 못했다. 곰곰히 생각해보니 결국 Coroutine의 Context 와 관련된 문제일것 같아서 내 코드를 훑어보니, 아무생각없이 @Before에 넣어둔 아래 코드가 문제였다. Dispatchers.setMain(Dispatchers.Unconfined) StandardTestDispatcher() 로 교체 Dispatchers.setMain(StandardTestDispatcher()) 이후 advanceUntilIdle()..
TV보면서 코드짜다가 이것때문에 3시간을 날렸다.. 진짜 멍청하게도 이것때문에 Chat GPT한테까지 물고 늘어지고 있었다.. 해답은 굉장히 가까운 곳에 있었다. 문제는 webViewClient를 세팅 하기전에 loadUrl()을 했던것.. (내가 왜 이런짓을..) 어쨋든 문제는 해결했다 어휴..
최근에 디자인팀으로 부터 받은 디자인에 다음과 같은 요구사항이 들어왔다. 1. Thumb를 움직이면 부드럽게 움직일것 2. Progress에 해당하는 부분을 터치하면 Thumb가 해당부분까지 부드럽게 애니메이션 되어서 갈것 3. Progress에 해당하지 않는 어중간한 곳에 Thumb를 놓으면, 가까운 Progress까지 부드럽게 이동할것. Android 기본으로 제공되는 SeekBar로는 구현되기 어려운 동작들이라서 잔머리 쓰지않고 직접 구현해보기로 했다. View를 상속받아서 처음부터 끝까지 모든 동작을 직접 구현했다. 재미있게도 예전에 libGDX로 개인적으로 게임 만들었던게 도움이 많이 되었다. (역시 개발경험은 버릴게없다.) 무튼 최종적으로 구현된 모습은 다음과 같다. 만드는데 재미있었던건 함정..
너무 가끔찾다보니 자꾸 잊어먹어서 저장용..
* 엉클 밥 블로그 포스팅을 공부겸 직접 번역해본 글입니다. 원본 블로그 링크 (오역은 댓글로 알려주세요!) Clean Coder Blog The Clean Architecture 13 August 2012 Over the last several years we’ve seen a whole range of ideas regarding the architecture of systems. These include: Though these architectures all vary somewhat in their details, they are very similar. They all have blog.cleancoder.com 지난 몇년동안 우리는 시스템 아키텍처에 대한 많은 범위의 아이디어를 보아왔습니다. ..