Android/Common

Android/Common

[Android] touchDelegate로 뷰 계층 제약 없이 터치 영역 확장하기

당신은 Android 개발자로서 사진에 보이는 UI를 구현해야 합니다. UI 요구사항 중 왼쪽 아이콘을 클릭 액션이 존재하는데 클릭 영역을 뷰 사이즈보다 크게 잡아야 합니다. 어떻게 구현하면 좋을까요? 비교적 연령대가 높은 유저가 사용하는 서비스를 개발하다 보니 위 요구사항을 구현할 일이 종종 있었습니다. 그때마다 빈 레이아웃을 만들어서 해당 레이아웃에 클릭 리스너를 설정하는 방식을 사용했었는데요. 깨끗한 코드를 작성하겠다는 양심을 버려가며 레거시 코드를 마구마구 만드는 기분이었습니다.. 그러다 최근 위 요구사항에 알맞게 사용할 수 있는 touchDelegate라는 기능을 알게 되어서 소개해보려고 합니다. TouchDelegate TouchDelegate는 뷰가 가지고 있는 경계 너머로까지 클릭 반경을 ..

Android/Common

[Android] InAppUpdate 기능 알아보기

InAppUpdate 인 앱 업데이트 기능은 앱 내에서 사용자의 업데이트를 유도하는 기능으로 2019년 Google IO에서 처음 소개되었습니다! 안드로이드 5.0(Api level 21) 이상부터 사용 가능하고 Play Core Library 버전도 1.5.0 이상을 사용해야 합니다. 의존성 추가 implement 'com.google.android.play:app-update-ktx:2.1.0' 업데이트 가능 여부 private val appUpdateManager: AppUpdateManager by lazy { AppUpdateManagerFactory.create(context) } val appUpdateInfoTask = appUpdateManager.appUpdateInfo appUpdat..

Android/Common

[Android] 앱 성능 개선 - 앱 시작 시간

안녕하세요. 이번 글에서는 '앱 시작 시간'에 대해서 알아보려고 합니다. 앱 시작 시간은 앱 성능 지표 중 하나인데요. 최근 면접에서 앱 시작 시간에 대한 질문에 대답을 못했어요 하하,, 이번 기회에 한번 같이 알아보면 좋을 것 같죠? 앱 시작 시간이란? 앱 시작 시간은 Android 성능 지표 중 하나로 앱을 로드하는 시간을 의미해요. 구글에서는 사용자의 경험을 위해 앱 시작 시간을 개선하라고 적극 권장하고 있는데요. Google Photo 앱에 시작 시간을 35 퍼 빠르도록 개선했다는 발표도 있었습니다 앱 시작 시간 유형 구글은 앱이 실행되기 전 상태에 따라서 앱 시작 시간 유형을 구분했습니다. Cold Start Cold Start는 앱이 처음부터 시작하는 것을 의미합니다. 기기가 부팅되고 맨 처음..

Android/Common

[Android] minSdk, compileSdk, targetSdk

android { ... compileSdk 33 defaultConfig { minSdkVersion 23 targetSdkVersion 33 } } 최근 minSdk, compileSdk, targetSdk 각 의미에 대해서 물어보는 질문에서 minSdk은 쉽게 대답했지만 compileSdk와 targetSdk의 차이점을 설명하지 못했던 슬픈 경험이 있어 이번 글을 준비하게 되었습니다. 이 글을 보시는 취준생분들이나 면접을 대비하시는 분들은 꼭 대답하실 수 있으면 좋겠네요 Android API Level 이번 블로그에서 알아보는 minSdk, compileSdk, targetSdk 속성의 값으로 Android API Level이 사용됩니다. 그래서 우선 Android API Level에 대해서 알아볼..

Android/Common

[Android] Radius 올바르게 적용하기

안녕하세요 점냥입니다 :) 오늘 소개할 Radius는 Android UI를 구현해 보신 경험이 어느 정도 있다면 익숙한 개념이라고 생각합니다. View를 원형 혹은 둥근 모서리를 가진 사각형으로 표현하고 싶을 때 사용하는 속성입니다. 그런데 이 Radius의 원리에 대해 알고 있으신가요? Radius는 뷰 각 모서리에서 굴절률을 표현하는 원의 반지름으로 사용됩니다. 위 사진은 100dp의 크기인 사각형에 radius를 25dp로 적용했을 때 모습인데요. 각 모서리에 주어진 반지름의 원을 그려 외곽 모서리를 각 원에 맞춰져 잘리면서 그려지게 됩니다. SDK 따라서 다르게 표현되는 Radius Android 개발을 하다가 낮은 버전에서 원형의 Shape가 고구마처럼 깨진 경험이 있으신가요? Radius의 원..

Android/Common

[Android] Fragment에서 데이터 외부로 전달시키는 방법 - ActivityViewModel

안녕하세요 점냥입니다 :) 지난 포스팅에 이어서 이번에는 ViewModel을 사용해서 Fragment 내에서 데이터를 공유하는 방법에 대해서 알아보겠습니다. 이번 내용은 코드로서 보다는 개념 위주로 설명이 될 것 같아요! 우선 ViewModel이란 Android Jetpack 라이브러리 중 하나로 비즈니스 로직과 데이터들을 저장해 두는 Holder class인데요. MVVM이 대중화가 되고 Activity보다 수명이 긴 장점으로 데이터의 복원/ 저장이 보다 간편해 많이 사용하고 있는 Class입니다. ViewModel의 자세한 내용은 이곳에서 확인해주세요 ActivityViewModel로 Fragment 끼리 데이터 공유 @AndroidEntryPoint class SignUpCodeFragment : ..

Android/Common

[Android] Fragment에서 데이터 외부로 전달시키는 방법 - Callback

안녕하세요 점냥입니다 :) Fragment에서 클릭 이벤트 또는 특정 데이터를 외부로 전달하고자 하는 경우가 많아요. 이를 구현하기 위해 여러 가지 방법이 존재하는데요. 이번 포스팅에서는 Callback을 이용하여 데이터를 전달하는 방법을 소개해보려고 합니다. 잘못된 부분이나 더 좋은 방안이 있다면 댓글로 남겨주세요! Callback을 이용한 데이터 전달 Callback 패턴이 가장 쉽게 구현할 수 있는 방법인데요. Callback이란 다른 함수의 인자로써 넘겨진 후 특정 이벤트에 의해 호출되는 함수를 의미합니다. Android에서는 Listener라고도 부르며 주로 Interface를 구현한 객체를 넘기거나 최근에는 Lambda를 이용하는 모습이 자주 보여요. setter 함수로 콜백 전달하기 clas..

Android/Common

[Android] Very Long Vector Path 해결

안녕하세요 점냥입니다 :) 최근 Vector 이미지 파일에서 Lint 경고를 내보내는 케이스를 발견하게 되었어요. Deprecated 등 코드 레벨에서 발생하는 Lint의 경우보다 쉽게 Lint를 제거할 수 있었는데요. Vector는 path를 어떻게 수정해야 할지 감이 안 오더라고요. path를 마음대로 수정했다가는 원본 이미지와 전혀 다른 결과가 나올 수가 있으니까요. 그래서 한번 찾아보았습니다 :0 Vector Vector는 점과 선, 그리고 색상 정보 등을 포함한 집합을 의미해요. 점과 선에 대한 정보로 그린 이미지는 화면 해상도와 상관없이 동일한 결과를 제공해주기 때문에 Android에서는 21 버전부터 Vector를 사용하면서 이미지를 표현하는 것을 추천하고 있다고 하네요. 반대로 픽셀 방식의..

Android/Common

[Android] 디버그 앱, 출시 앱 분리하기

안녕하세요 점냥입니다 :) 회사 입사 초, 디버그 앱과 프러덕 앱이 분리되어 있지 않아 안드로이드 폰을 사용하고 있으신 직원분들의 불만 사항이 있었어요. 실제로 마켓을 통해 회사 서비스를 이용 중이던 직원분들은 매번 안드로이드 개발팀이 개발한 앱을 테스트하기 위해 출시 버전의 앱을 지우고 디버그 버전을 설치해야 번거로움이 있었어요. 이 문제는 출시 버전의 앱과 디버그 버전의 앱의 패키지가 같아서 독립적으로 앱을 가질 수 없었기 때문이에요. 디버그 앱, 출시 앱 패키지 다르게 하기 디버그 앱과 출시 앱을 동시에 설치할 수 있게 하는 방법은 아주 간단하게 두 버전의 앱의 패키지를 다르게 하면 됩니다. 그리고 Gradle은 이 기능을 buildType을 통해 아주 쉽게 제공해줍니다. 1. buildType으로..

Android/Common

[Android] Flow 흐름을 turbine으로 쉽게 테스트 코드 작성해보기

안녕하세요 점냥입니다 :) 개발에서 테스트의 중요성은 알고 있지만 개념이 어렵거나 테스트 환경 요인으로 인해 테스트 코드 작성의 어려움을 겪고 있어요. 특히 Unit Test는 로컬 JVM에서 실행되기 때문에 Android UI Thread을 관련된 비동기 코드를 테스트하는 것이 불가능하진 않지만 복잡하고 어렵더라고요. 여러분도 그러신가요? 그런데 최근 Flow 테스트 코드를 간결하게 작성할 수 있게 도와주는 Turbine이라는 라이브러리를 알게 되었어요. 안드로이드 공식문서에도 소개된 라이브러리로 공신력이 있고 최근 클론 코딩하고 있는 nowInAndroid 프로젝트에서도 사용한 테스트 라이브러리입니다. 그래서 이번 글은 Turbine 사용법에 대해서 간단히 알아보려고 해요 :) Turbine Turb..

점냥
'Android/Common' 카테고리의 글 목록