본문 바로가기

안드로이드36

RecyclerView IndexOutOfException : invalid item position 매일 앱의 버그를 모니터링하기 위해 Firebase Crashlytics을 확인한다. 최근 들어 목록을 출력하는 페이지에서 'IndexOutOfException' 이 발생하는 오류가 자주 리포팅되었다. IndexOutOfException : inconsistency detected, invalid item position 막상 오류가 발생한 곳을 찾아서, 디버그를 실행해보면 정상적으로 목록이 출력되고 데이터도 오류 없이 전달됨을 확인할 수 있었다. 문제는 카테고리를 변경해서, 새로운 목록을 갱신해서 출력하는 과정에서 비정상적인 오류로 App Crash 증상을 확인할 수 있었다. 구글링을 통해, 확인해보니 RecyclerView에 ArrayList를 사용할 경우에 단순히 ArrayList.clear()을 .. 2021. 10. 29.
getPackageManager().getLaunchIntentForPackage return null 기존에 회사 앱 서비스에서 이미지를 '카카오톡' 앱으로 바로 공유하는 기능이 있었다. 최근에 targetSDKVersion=30 으로 상향하면서 공유 과정에서 문제가 생겼다. 문제가 발생하는 부분은 바로 아래 코드 Intent intentKakaoTalk = getPackageManager().getLaunchIntentForPackage("com.kakao.talk"); 안드로이드 Develop 공식 사이트의 내용을 참고해보자면, Android 11 이상을 타켓팅하는 앱의 경우 다른 앱과 상호작용(ex. 이미지, 텍스트 공유)이 필요할 때는 AndroidManifest.xml에 요소를 추가해야 한다. 개인정보의 중요성이 높아지면서, 구글에서도 App간 데이터가 전달되는 것에 있어서도 약간의 제한을 두는.. 2021. 10. 22.
[Android 11] ActivityNotFoundException와 패키지 가시성 Firebase 버그 리포트에서 'android.content.ActivityNotFoundException' 이 확인되었다. 발생 코드를 확인해보니, 링크를 브라우저 앱으로 실행하는 곳이었다. 기존에는 정상적으로 서비스가 되던 부분이었는데.. 갑자기 왜 ? Intent i = new Intent(Intent.ACTION_VIEW); i.setData(Uri.parse("https://www.naver.com")); startActivity(i); 구글링 하다보니 Android 11부터 '패키지 가시성'이라는 속성이 추가되었다고 한다. * 패키지 가시성이란? 사용자가 기기에 설치한 앱에 대한 가시성을 의미 즉, Android 11(API 레벨30) 이상부터는 기기에 설치된 필터링된 앱 목록만 확인이 가능.. 2021. 10. 15.
안드로이드 단위테스트란? 안드로이드 앱 개발을 진행하다보면 테스트가 필요한 경우가 빈번하다. 일반적으로 테스트를 할 때, 애뮬레이터나 실제 디바이스를 통해서 직접 테스트를 진행하는 경우가 많다. 특히, 오류/버그가 발생하는 경우는 작은 단위로 디버그/테스트를 진행하면서 문제를 해결해 나간다. 안드로이드 앱은 UI(액티비티) 단위로 이벤트가 발생하므로, JUnit을 이용 일반적으로 프로젝트 생성 시, 2가지 테스트 유형이 정의된다. ① 로컬단위테스트(test) : 안드로이드 프레임워크와 관련없이 검증이 가능한 테스트 : module-name/src/test/java ex) ExampleUnitTest.java : 로컬 환경에서 유닛 테스트를 진행할 때 사용 ② 계측테스트(androidTest) : 안드로이드 프레임워크에 종속성이 .. 2021. 8. 9.
To use Coroutine features, you must add `ktx` artifact from Room as a dependency To use Coroutine features, you must add `ktx` artifact from Room as a dependency 안드로이드 Room을 이용해서 ViewModel, DataBinding을 학습하던 중, Build 과정에서 위와 같은 에러를 확인했습니다. 기존의 build.gradle에는 implementation "androidx.room:room-runtime:$room_version" 만 추가하여 사용하였습니다. error 문장을 확인해보면 you must add 'ktx' artifact from Room as a dependency. 라는 말이 있습니다. 직역하자면, Room과 연관된 ktx를 추가해야 한다고 하는군요. Room | Android 개발자 | Andro.. 2021. 6. 25.
Glide를 활용한 WebView 이미지 로드 속도 높이기 최근에 회사 프로젝트를 진행하면서 한 가지 이슈에 봉착했었습니다. * 이슈 : WebView 내에서 여러 이미지를 Load 할 때 지연되거나 일부 절반만 불러오는 현상. 웹 브라우저에서는 동일한 URL을 호출했을 때, 빠른 속도로 이미지가 Load 되고 형광펜 후처리까지 정상적이었습니다. 해당 증상은 Android/iOS 모두 동일했습니다. 모바일에서 제공하는 WebView의 성능이 여러 이미지를 한꺼번에 Load할 정도로 우수하지 않다는 사실을 인지했습니다. 구글링하던 중, Glide 라이브러리를 이용해서 WebView에 이미지 로딩성능을 높이는 방법을 확인했습니다. 1. Glide 라이브러리 추가 implementation ‘com.github.bumptech.glide:glide:4.11.0’ an.. 2021. 6. 15.
LiveData와 MutableLiveData 차이점 ▷ LiveData : LiveData는 Data 변경을 관찰할 수 있는 Data Holder 클래스입니다. 일반적인 Observable과는 달리, 안드로이드 생명주기(LifeCycle)를 알고 있습니다. Activity, Fragment, Service와 같은 안드로이드 Component LifeCycle를 인식하고 그에 따라 LiveData는 활성상태(Active)일때만 데이터를 Update합니다. * 활성상태 : STARTED / RESUMED 를 의미 - LiveData 특징 ● Observer 패턴에 따라 데이터 변경이 일어날 때마다 Observer 객체에 알려줍니다. 매번 UI를 업데이트 하는 코드 작성할 필요없이 데이터 상태와 UI를 일치시켜줍니다. ● 메모리 누수가 없습니다. Observe.. 2021. 5. 19.
[MMS 서비스] 문자 이미지 첨부, 최대 용량은? 최근에 회사의 앱 서비스를 운용하다가, 고객의 문의사항이 접수되었다. 이슈사항은 "앱에서는 원본 해상도 이미지가 잘 보여지는데, 이를 문자로 전송하면 화질이 깨진다"는 것이다. 재현을 해보았을 때, 2가지 문제점이 발견되었다. 첫째. MMS 이미지 첨부과정에서 해상도가 자동으로 낮아진다. 둘째. 안드로이드 기종에서 문제가 발생했다. 아이폰의 iMessage에서는 이미지 해상도가 나쁘지 않았다. 최근에 출시한 스마트폰의 기본 MMS 앱에서는 해상도를 설정하는 옵션이 존재하지 않는 것으로 확인했다. iOS / Android 각각 기기에서 해상도의 차이를 확인하고, 구글링으로 확실한 수치를 검색해본 결과는 아래와 같다. 스마트폰 카메라 화질이 좋아지면서, 왠만한 사진 1개의 용량이 2~3MB를 넘어선다. MM.. 2021. 4. 29.
[라인개발실록] 안드로이드 앱 빌드 시간 꿀팁 (feat. 질문 채택) 최근 들어 IT회사의 개발자 수요가 급증하면서, 관련 유튜브 콘텐츠들도 많아지고 있다. 그중에서도 양질의 정보를 제공하는 개발자 관련 유튜브 채널 '라인개발실록'을 소개한다. 최신 업로드된 영상 중에, '안드로이드 개발 빌드 시간을 줄여주는 꿀팁'에 대한 영상이 있어 소개한다. 라인에서 안드로이드 현업 개발자 (차영호, 장혁재) 두 분이 나오셔서, 실무에서 사용 중인 기술과 꿀팁에 대해서 자세하게 설명해주신다. 사전에 채널 커뮤니티 게시판에 '1억 명이 쓰는 안드로이드 앱은 어떻게 만들어질까?' 주제에 대한 사전 질문을 모집하는 글을 확인하고, 실무 개발자로서 비동기 처리는 어떻게 진행하는지가 궁금했다. 그 이유는, 최근에 회사에서 Kotlin을 도입하여 신규 프로젝트를 진행하는 과정에서 RxJava3을.. 2021. 4. 28.