이전에 인앱 리뷰 기능 테스트를 위해 내부 테스트 트랙 출시를 진행했다. 이후 플레이 콘솔의 대시보드에서 한 알림을 발견했다.
사전 출시 보고서에서 앱 문제 발견됨
파이어베이스 또는 플레이 콘솔에서 앱에 문제가 있으면 알려주는 것은 익히 알고 있었다. 플레이 콘솔의 경우 실제 사용자의 ANR(Android Not Responding) 횟수 정도를 알려준다는 것은 알고 있었는데, 구체적으로 앱 문제를 알려주는 기능은 이번에 처음 발견했다. 그렇다. 플레이스토어 테스트 사전 출시 보고서는 앱을 테스트하고 발생한 문제를 알려준다. 그것도 여러 기기에서의 테스트를 말이다. 사전 출시 보고서는 테스트 카테고리에 위치해 있다. 들어가보자.
사전 출시 보고서에 대한 간략한 설명이다. 다양한 기기에서의 테스트를 제공한다. 일단 '반성 식탁' 앱에서 발생한 문제가 무엇인지 보면서 사전 출시 보고서에 대해 알아 가보자.
내 앱에서 발생한 '비정상 종료 및 ANR'에 대한 스택 트레이스를 제공한다. 아래 해당 문제가 발생한 기기 중 하나를 선택해서 들어가 보자.
왼쪽에 동영상 창으로 보이는 것은 놀랍게도 테스트 실행 영상이다. 스택 트레이서의 ANR 발생 지점을 확인할 수 있지만, 실제 테스트 영상을 통해 시각적으로도 오류를 확인할 수 있다는 것이다. 경약을 금치 못했다. 이처럼 여러 대의 기기로 테스트가 이루어지고 있다. 실제로 '스크린샷' 탭에 들어가보면 수십 장의 테스트 스크린샷이 있다는 것을 알 수 있다.
아무튼 본론으로 돌아 오면, '댓글 작성 후 키보드를 내려주는 코드'에서 ANR이 발생했다. 해당 문제 해결을 위해 구글링을 진행한 결과 editText에 해당 속성을 추가해주지 않은게 화근이었다.
android:singleLine="true"
android:imeOptions="actionDone"
imeOptions
먼저 imeOptions 속성은 키보드 액션 버튼의 동작을 설정하기 위한 옵션이다. actionDone이라는 속성 값은 '액션 버튼이 done 역할을 수행'하도록 하는 것이다. 해당 속성 값을 주면 아래 사진 키보드처럼 파란색 액션 버튼이 'done' 역할을 수행하게 된다.
여기서 발생하는 이슈는 다음과 같다. imeOptions 속성을 사용할 때, 지정한 속성 값이 액션 버튼에 반영되지 않는 경우 가 있다는 것이다. 액션 버튼이 사용되는 중요한 용도 중에 멀티 라인 입력 필드에서의 줄 바꿈 기능이 있다. 멀티 라인 입력 필드에서는 기본적으로 액션 버튼이 줄 바꿈 기능으로 동작한다. 그런데 만약 멀티 라인 입력 필드에서 액션 버튼이 줄 바꿈 외의 다른 액션 버튼으로 동작하게 되면 줄을 바꿀 수 있는 방법이 사라지게 되어 심각한 오동작 상황을 만들 수가 있게 된다. 그러므로 이 때는 imeOptions 속성을 사용해도 반영되지 않고 줄 바꿈으로 고정 표시되는 것이다.
위와 같은 이유로, imeOptions 속성을 시험하기 위해서는 EditText의 "inputType" 속성에 "text" 값을 지정하거나, "singleLine" 속성을 "true"로 지정하여 멀티 라인 입력 기능을 제거해야 한다고 한다. 확인해 본 결과 나의 코드에서는 inputType의 속성 값이 "multiLine"으로 설정되어 있었고, 해당 속성값이 간헐적인 ANR 상황을 만드는 것 같았다. 이번 글은 구글이 찾아준 ANR 해결이었다.