본문 바로가기

[Android Studio] No cached version of com.android.tools.build:aapt2:3.6.1-6040484 available for offline mode 에러 대처하기 Unit testing 참고를 위해 Google blueprint 레퍼지토리를 클론해 싱크를 하고 있었는데 No cached version of com.android.tools.build:aapt2:3.6.1-6040484 available for offline mode ... 등의 오류와 함께 그래들 빌드에 실패하는 것이었다. gradle offline mode를 끄라는 글도 있었지만, 해당 옵션이 deprecate 된건지 gradle 옵션에서 찾을 수가 없었고, 다음으로 찾은 해결책은 프로젝트의 Project Structure를 조정하는 것이었다. 안드로이드 스튜디오의 해당 메뉴로 들어가 Project의 Gradle Plugin Version과 Gradle Version을 전부 최신으로 맞춰주었고, ..
[Jacoco] Jacoco와 gradle로 프로젝트 코드 커버리지 확인하기(Gradle 3.6 버전 이상의 경우) Unit test를 도입하게 되면서 같이 도출하고 싶어 했던 지표는 물론 프로젝트의 코드 커버리지였다. 전반적인 프로젝트가 얼마나 테스트 되었는지, 어디가 테스트가 부족한지를 쉽게 알 수 있는 코드 커버리지 도출은 필요한 것이고 직접 눈으로 보고 싶은 것이기도 했다. (배그 한판이 끝날 때마다 OPGG를 리프레시하는 심정이랄까) 0. 실행환경 - 최근 Android studio와 함께 업데이트 된 최신 Gradle Version 3.6.1 이 사용되었다. - 프로젝트의 언어는 Kotlin으로 짜여져있다. 1. 설정하기 app level의 gradle 코드에 아래 코드들을 추가한다. - 기본설정 // jacoco와 application plugin 추가 apply plugin: 'com.android.ap..
[Testing] 테스트 피라미드를 통해 테스팅의 세가지 범주 살펴보기 금번에 신규 업데이트를 준비하면서 이전부터 해보고 싶던 유닛 테스트를 도입해보고자 했고, 팀원들에게 적극 추천해보기로 했다. 우선 추천을 하기 전에 테스팅이 무엇인가, 왜 테스팅을 해야하는가에서 출발하기 위해 자료를 열심히 찾았고 찾아낸 테스트 피라미드를 기점으로 출발점을 가져가기로 했다. 안드로이드 공식 문서에서도 테스팅에 관해 다양한 항목을 통해 심층적으로 다루고 있으니, 이미 테스트 피라미드를 보신 분들은 구글 문서를 통해 더 깊게 배워보는 것이 좋겠다. https://developer.android.com/training/testing/?hl=ko Android에서 앱 테스트 | Android 개발자 | Android Developers Android에서 앱 테스트 Android Jetpack의 ..
[안드로이드] ViewPager의 페이지 별 요소를 참조할 때의 유의점 ViewPager에 개별 페이지를 구현하고자 할 때에는 기존 방식에서 이슈가 없었는데, 개별 페이지 내에서 조작해야 하는 요소가 들어가고 나니 문제가 생겼다. 페이지를 이동하면서 페이지들의 생명주기가 변하는 것, 그리고 참조값이 달라지기 때문인지 넣어준 버튼들과 터치 이벤트가 제대로 동작하지 않았다. 이를 해결해주기 위해서는 Adapter 내에서 instantiateItem을 override 해주어야 했다. override한 instantiateItem 내부에 참조하는 요소들을 지역변수로 할당해주니 페이지 별로 참조하고자 했던 요소들이 정상적으로 동작하는 걸 확인할 수 있었다. override fun instantiateItem(container: ViewGroup, position: Int): Any ..
[안드로이드] SeekBar의 Thumb 색상 실시간 변화주기, BlendModeColorFilter 사용하기 (feat. ColorFilter deprecated) 금번에 SeekBar의 Thumb에 새로운 인터랙션을 주게 되면서 기존에 적용해 둔 Listener에 ColorFilter를 먹이고자 했다. 하지만 ColorFilter를 먹이던 시절은 이미 오래 전이었고.. 현재는 deprecated 된 요소였던 것이다. 그러면 무엇을 써야하는 것인가? 검색을 통해 BlendModeColorFilter라는 클래스를 찾을 수 있었다. BlendModeColorFilter | Android 개발자 | Android Developers BlendModeColorFilter public final class BlendModeColorFilter extends ColorFilter A color filter that can be used to tint the source pix..
[안드로이드] 안드로이드 스튜디오 3.6 업데이트, ViewBinding 사용해보기 이번 2월 25일에 안드로이드 스튜디오 버전 3.6이 릴리즈 되면서, 안드로이드 스튜디오의 자잘한 UI/UX 변화와 함께 다양한 기능들이 추가되었다. 이번에 추가된 기능들 중에 먼저 눈에 들어왔던 뷰바인딩을 적용해 본 경험을 공유하고자 한다. https://developer.android.com/topic/libraries/view-binding?utm_medium=studio-assistant-stable&utm_source=android-studio-3-6 뷰 바인딩 | Android 개발자 | Android Developers 뷰 바인딩 기능을 사용하면 뷰와 상호작용하는 코드를 쉽게 작성할 수 있습니다. 모듈에서 사용 설정된 뷰 바인딩은 모듈에 있는 각 XML 레이아웃 파일의 바인딩 클래스를 생성합..
[안드로이드/MpAndroidChart] MpAndroidChart에서 Marker 커스텀하기 그래프의 바를 터치할 때 해당 데이터를 보여주는 Marker를 구현중에 있었는데, 공식 문서에 안내되어 있는 getOffset()을 Override하는 방식으로는 위치조정을 하는 것이 어려웠다. 구글링을 더 해보니 getXOffset, getYOffset을 override해 사용하는 경우가 많았으나, Kotlin 환경때문인지 몰라도 override 메소드가 보이지 않았다. 최종적으로 MarkerView의 draw 메소드를 override하여 보여주고자 하는 위치를 조정해 보여주는 걸로 구현을 마칠 수 있었다. * MPAndroidChart 3.1.0 버전에서 진행 * BarChart 사용 * Kotlin 베이스 < 구현 순서 > 1. BarChart 구성 완료 BarEntry, BarDataSet, Ba..
[안드로이드] Room 데이터베이스의 테이블 등을 업데이트 할 시, Migration 옵션을 필히 집어넣자. 기존 프로젝트의 로컬 DB 테이블에 컬럼을 삽입해야하는 요구사항이 생겼는데, 이를 진행하면서 필수적이었던 Migration 과정을 리뷰해두고자 한다. Room DB를 안드로이드에 설정할 때에는 @Database 어노테이션에 vesion number를 명시하는데, 신규 변경사항이 생길 경우 version number를 올려주어야 하는 것은 물론, 이전 버전에서 신규 버전으로 올라가면서 달라진 점들에 대해 어떻게 변경사항을 집어넣을 것인지 Migration이라는 클래스를 사용해 작성하여 적용해주어야 한다. 아래는 Google documentation이 예시로 들고있는 Migration Object이다. val MIGRATION_1_2 = object : Migration(1, 2) { override fun..