Seize the day

POST : 일상다반사

안드로이드 앱 개발자의 숙명 - 안드로이드 파편화

  어제 캡처 앱을 업데이트했다. 이전 버전의 간단한 버그를 수정하고, 캡처 안전성을 개선하는 업데이트였다. 캡처 앱은 안드로이드 5.0부터 지원하는 미디어 프로젝션 API를 이용하는데 이 API의 OS 구현이 조금 이상한 것 같았다. 사용자가 설치하는 앱은 핸드폰을 리부팅시키는 일은 할 수 없는데 캡처하다가 매우 드물지만 핸드폰을 강제 종료시키는 현상이 있었다. 또 모토로라 단말에서는 캡처를 잘하지 못한다. 이 두 가지를 수정한 안정성 개선은 재현되는 단말이 없기 때문에 가능한 한 로직을 방어적으로 구현하고, 보유 중인 4대의 단말에서 테스트를 진행했다. 문제가 없다고 생각해서 출시했는데 Null Pointer Exception(NPE) 크래시가 다량으로 발생하기 시작했다.


  오늘 새벽 1시에 확인해보니 크래시는 안드로이드 5.1에서만 발생했다. 5.1에서 API 동작이 이상하게 동작하는 문제지만 5.1단말이 없어서 테스트할 수도 없었다. 의심되는 코드를 한 군데 찾아서 수정후 업데이트를 했다.


  오늘 오후 2시쯤에 확인해보니 문제는 해결되지 않았다. 이번에는 에뮬레이터를 구동해서 OS 5.1을 테스트했고 확실히 API가 이상하게 동작하는 현상을 발견했다. 다시 문제를 우회하도록 코드를 수정했고 더 이상 크래시가 발생하지 않기를 바라며 업데이트를 했다. 


  5시쯤에 다시 확인해보니 역시 문제는 해결되지 않았다. 이때 약간 자신감이 없어졌다. 두 번째 수정 때 소스를 충분히 검토했기 때문에 어떤 코드에 문제가 있는지 전혀 감을 잡을 수가 없었기 때문이다. 구글 플레이스토어의 에러 로그는 정확한 소스 위치를 알려주지 않는다. 의심되는 메쏘드 목록만 10여 개 이상이다. 또다시 수정한다고 문제를 해결한다는 보장도 없으니 과감히 롤백하기로 했다. 이런 경우는 흔하지 않은데 정식 업데이트에 핫픽스 업데이트를 세 번을, 이틀 동안 총 네 번 업데이트했다. 다행히 업데이트 이후 문제가 발생하지 않았다.


  구글 플레이어스토어는 일부 사용자에게만 앱을 배포하는 옵션도 있지만 내가 선호하는 전략은 빠르게 실패하고 빠르게 수정하는 것이다. 업데이트 네 번을 모두 하는 사용자는 많지 않고 사용자 대부분은 한 번이나 두 번 정도 업데이트를 하게 된다. 그래서 빨리 수정하는 것이 중요하다.


  그렇지만 문제의 핵심은 이게 아니다. 안드로이드 앱 개발은 테스트해야 할 OS 버전이 너무 많다는 게 핵심이다. 휴대폰 제조사는 휴대폰을 출시한 지 2년이 지나면 OS 업데이트를 지원하지 않는다. 최신 OS를 사용하는 비율은 매우 천천히 올라간다. 안드로이드 파편화는 굉장히 심각한 문제다. 이번 경우도 OS 5.0도 아니고 5.1에서만 발생하는 문제를 어떻게 찾을 수 있겠나? 이럴 땐 아이폰이 부럽다. 아이폰은 최신 OS 두 개나 세 개 정도만 테스트해도 문제가 없다. 최신 OS가 나오면 몇 달 이내에 80% 이상이 업데이트하는데 안드로이드에서는 상상할 수 없는 비율이다. 안드로이드의 카메라나 코덱같이 휴대폰의 특성을 많이 타는 앱은 너무 힘들 것 같다. 올해 안드로이드 P가 나오면 테스트 OS만 5개다. 행복한 프로그래밍을 하고 싶은데 점점 힘들어지고 있다.



문제의 콜스택이다. 최종 위치는 Intent 생성자의 파라미터인 context가 null인 경우인데 그건 확실히 발생가능성이 없다.

top

posted at

2018. 6. 9. 23:18


CONTENTS

Seize the day
BLOG main image
김대정의 앱 개발 노트와 사는 이야기
RSS 2.0Tattertools
공지
아카이브
최근 글 최근 댓글
카테고리 태그 구름사이트 링크