소규모 팀으로 1억 글로벌 앱 개발하기
작년에 다녀온 행사인데 공식적인 발표자료를 기다리다가 이제야 발행하네요.
다른 후기에도 발표 내용이 있는 걸로 봐서 오픈해도 저작권 문제? 는 없는 거 같습니다.
혹시라도 문제가 있다면 삭제할게요 ㅎㅎ
안드로이드 버전별 API 호환성 해결
Notification API는 매번 바뀌는 API 중에 하나
- theme는 버그 투성이, 버전 바뀔 때마다 매번 새로운 버그가 있음
- appcompat-v7을 사용하는 것이 최선
AOSP에서 조용히 생겼다가 플랫폼 업데이트하면서 사라지는 버그
하지만 실제로는 계속 발생
스토리지 접근 권한의 경우 사용자가 허용해도 프로세스가 다시 시작되어야만 스토리지 접근 가능한 문제 머시멜로 초기 빌드에서 발생
매 업데이트마다 각종 문제 나타났다가 조용히 사라지는 경우 많음
특별한 상황에서 미묘하게 동작 변경되는 경우도 많음
Deprecated 되었다고 다른 API 사용하라고 Android Studio에서 경오 메시지만 보고서 수정해서는 안됨. 반드시 Deprecated 되기 이전 버전에서 테스트
예) singleLine="true" is deprecated use maxLines="1" instead.
실제로는 maxLines="1" and ellipsize="end"로 변경해야 같은 동작
http://github.com/android/platform_frameworks_base
제조사가 여기에 abstract method를 추가 내부적으로 호출한 경우가 있음.
Appcompat-v7에서 이것을 상속받아 구현하고 있는데 Runtime exception 발생
Appcompat-v7 소스 직접 사용하고 수정해서 방어
edit 불가능한 상태의 TextView에서 클립보드 Cut 메뉴를 사용자에게 표시해서 Runtime Exception 발생. 상속해서 Runtime Exception 방어 처리
특별한 이유 없이 request layout을 호출해서 ListView의 스크롤 성능을 대폭 떨어뜨림. 상속해서 문제 해결
AOSP 에 있는 문제 상당 부분이 삼성에서는 발생 안 함
하지만 삼성만의 다른 문제가 발생하기도 함
AOSP의 각종 문제 그대로 발생
펌웨어 업데이트가 안 하는 사용자 많아서 초기 버전 문제 지속적 발생
애드몹, 구글 애널리틱스, 구글 인증, 구글 드라이브, 게임, 파이어 베이스
com.google.android.apk 자동으로 업데이트됨
릴리즈전 완벽한 문제 해결은 불가능 하지만 관리할 수 있어야 함
구조에 큰 변경이 있으면 바로 베타 테스트 업로드
한 번에 Publish 절대로 하지 않기
0.5%, 1%, 5%, 10%, 20%, 50%, 100%
잦은 업데이트는 언인스톨의 원인, 천천히 조심스럽게 올리기
베타 테스트 및 rollout 히스토리 확인 가능
실제 해당 문제는 10배 이상 발생한다고 가정
보고 확인까지 시간차가 있음
실제 해당 문제는 100배 이상 발생한다고 가정
Crashlytics, Firebase 등의 외부 도구가 필요함.
실시간 확인이 가능해야 함 : 실시간 확인이 안 되는 도구는 사용 불가
이상 현상 감지 시 알림 서비스도 제공한다면 최고
요즘은 APK 올리면 최소 1시간 안에 배포 시작
심각한 문제면 릴리즈 중단 처리 후 해결하고 빠르게 다시 업로드
덜 심각한 문제면 추가 문제 파악을 위해서 일단 계속 진행
사용자 수가 많으면 0.5%만 올려도 바로 문제 발견되지만
사용자 수가 적으면 5% 정도는 올려야 문제가 발견될 수 있음
10%로 1일 이내에 발생하는 문제는 1%로 10일 걸려 확인할 수도 있음
시간적 여유를 가지고 릴리즈 하기
정확한 문제 발생 원인 파악 후 코드 수정
정확한 문제 파악이 안 되는 경우 일단 크래쉬 방어 처리하고 해당 문제에 대해서 문제 수집 서버에 보고 처리해서 얼마나 발생하는지 차후에 해결할 수 있도록 지속적인 모니터링
개발자가 잘못한 문제 : 부주의함을 반성하고 수정
특정 버전 및 디바이스에서만 발생하는 문제 : 해당 문제가 재현이 안 되는 경우 특정 버전 및 디바이스에서만 발생하는 것일 수 있으니 확인
해결할 수 없는 문제 : APK 설치 도중 문제가 생겨 앱이 비정상 동작하는 경우, 시스템의 이상으로 비정상 동작하는 경우, 업데이트 중 일시적으로 발생하는 문제
문제 파악을 잘못하는 경우가 있을 수 있으니 매우 명확한 문제를 제외하고는 문제 수집 서버에 보고 처리해서 지속적으로 모니터링하는 게 좋음. 해결할 수 없는 문제로 생각했는데 알고 보니 개발이 잘못된 경우 종종 발생
일단 targetSdkVersion 수정 없이 현재 apk 문제없이 동작하는지 테스트
targetSdkVersion과 상관없이 API의 동작 자체가 바뀌는 경우가 있으므로 최대한 빠르게 테스트하고 문제를 파악해서 릴리즈를 준비할 필요가 있음
플랫폼의 버그를 만들었다가 조용히 해결하는 경우도 추후에 재현이 어려울 수 있으므로 빠르게 테스트하고 해결할 필요 있음
예) 안드로이드 7.0에서 Application 클래스가 인스턴스화 되지 않고 Activity가 시작되는 경우 종종 발생
targetSdkVersion을 올려서 이득이 없는 경우 바로 올리지 않는 게 좋음
targetSdkVersion 변경 여부에 따라 동작이 바뀌는 것들이 있는데 미쳐 발견하지 못하는 것들이 있을 수 있음.
해결 방법이나 원인에 대해서 충분히 밝혀졌을 시점에 하는 것이 좋음. (스택오버플로에서 쉽게 찾을 수 있는 시점)
저가폰이 많은 이머징 마켓의 경우 하드웨어 제약으로 인해 최신 버전이 아닌 과거 버전의 안드로이드폰이 계속 판매되는 경우가 있음
4.4 버전 사용자는 여전히 많고 빠르게 줄어들지 않고 있음
저도 안드로이드 버전에 따른 웹뷰 문제를 겪고 있습니다.
웹뷰 자체가 플레이 스토어를 통해 업데이트되는 중에, 사용자가 웹뷰를 사용하는 액티비티를 실행하면 발생하는 문제입니다.
M 이전 디바이스에서 주로 발생하고, 플랫폼 한계 상 M 이전 디바이스에서 현상을 개선할 방법은 없습니다.
L 버전에서는 웹뷰 업데이트에 걸리는 시간이 길어서;;; 문제가 빈번히 발생하는 걸로. 이후에는 시간이 길지 않아서 거의 문제가 없고요. 해당 이슈 발생하는 시기를 살펴보시면 저희가 시스템 웹뷰 업데이트되는 시기랑 비슷하게 맞아가는 걸로... (대략 6주에 한 번꼴) [Chansuk Yang, Developer Advocate, Google]
아무리 코딩을 잘해도 기타 다른 요인에 의해 버그나 에러가 발생할 수 있습니다.
기존의 단계적 배포나 베타 릴리즈뿐만 아니라, 파이어 베이스의 새로운 도구들도 활용해 보시기 바랍니다.