안드로이드 앱 사전 출시 보고서에 빨간 오류 메시지가 나타났다. 구글 안드로이드 담당자의 답변을 살펴본다.
Contents
Android 11(SDK 30)
어제 사전 출시 보고서에 빨간색 메시지가 하나 나왔길래 수정하여 새 버전을 업로드하였다. 오늘은 또 무슨 보고서가 나왔나 싶어서 들여다보니 어제의 그 오류는 없고 다른 오류가 생겼다.
Native crash of com.google.android.gms
*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
Build fingerprint: 'google/redfin/redfin:11/RQ3A.211001.001/7641976:user/release-keys'
Revision: 'MP1.0'
ABI: 'arm64'
Timestamp: 2024-06-19 06:57:12-0700
pid: 19886, tid: 20483, name: highpool[4] >>> com.google.android.gms <<<
uid: 10179
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x10
Cause: null pointer dereference
x0 b4000073649caff0 x1 0000000000000000 x2 b4000072c49beee0 x3 0000000000000003
x4 0000000000000000 x5 b4000073149cdff4 x6 000000000a372d30 x7 000000000a372d30
x8 0000000000000000 x9 0000000000000000 x10 00000000ffffffff x11 000000720352aef2
x12 0000007203678d54 x13 000000000000000b x14 0000000000000006 x15 ffffffffffffffff
x16 0000000000000001 x17 0000007534f50020 x18 00000072022f0000 x19 b4000074149c7eb0
x20 0000000000000000 x21 b4000074149c2b40 x22 0000007202880000 x23 b4000074149c2bf8
x24 0000007211db42e0 x25 0000007202880000 x26 000000000000000b x27 0000000000000002
x28 0000000000000000 x29 000000720287d9a0
lr 00000072035a566c sp 000000720287d8b0 pc 0000007203626ca4 pst 0000000060000000
Android 11(SDK 30) 에서 저런 오류를 내며 다운되었다는 의미로 해석된다.
대책
검색한 결과 다음 링크를 찾았다.
https://issuetracker.google.com/issues/182081085
저곳의 내용 중 핵심을 뽑으면 다음과 같다:
ng...@google.com<ng...@google.com> #16Apr 9, 2021 06:03PM
Hi! We have fixed the issue on Pixel devices, and have communicated to partners to take the fix for Android 11.
--
ng...@google.com<ng...@google.com> #18Apr 9, 2021 07:01PM
I mean phone manufacturers. The fix will come from an OTA.
--
ng...@google.com<ng...@google.com> #20May 4, 2021 05:15PM
#19: Yes, you can push an app update and the issue will be resolved.
--
ng...@google.com<ng...@google.com> #22May 5, 2021 06:57PM
I mean update your app in play store.
--
ng...@google.com<ng...@google.com> #24May 5, 2021 07:38PM
#23: Yes that's correct, this would unblock users of the app that took the system update, but you might still get the issue for users that didn't take the system update yet.
--
ng...@google.com<ng...@google.com> #31May 12, 2021 01:31AM
#29: It could help as the people affected would have the update of the app available to them just after the system update to 11.
--
ng...@google.com<ng...@google.com> #34May 12, 2021 05:06PM
#33: The system update that has the fix hasn't rolled out to users yet. For now, keeping pushing an app update is the easiest way out for a user to stop the crash.
--
ku...@gmail.com<ku...@gmail.com> #35May 13, 2021 10:39AM
#34:
So you mean, ANY app update can stop the crash? (As long as the user receives the app updated AFTER the Android 11 system update, what to change in the app update doesn't matter?)
--
ng...@google.com<ng...@google.com> #36May 13, 2021 04:43PM
#35: that's correct, any app update AFTER the Android 11 system update will fix it (the app update can just be a version update).
--
ng...@google.com<ng...@google.com> #47May 26, 2021 09:19PM
Android 11 will have the issue unless the OEM has taken the fix. The app update helps moving out of the issue, but it can be that a system update revive the problem again. That can explain why you're still seeing crashes with an app that targets API 30. Could you share a crash for such an app?
ng…@google.com 은 아마 구글 직원인 것 같다. 이걸 내 나름대로 종합하면 이렇다:
요약: 이 문제에 관한 Android 11 update 가 기기 제조업체에 제공되었다. 사용자가 운영체제인 Android 11 을 업데이트하고 앱을 업데이트하면 이 문제가 근본적으로 해결된다. 그러나 사용자가 Android 11 을 업데이트하지 않은 상황에서 사용자 기기에서, 이 문제로 crash 될 때 앱의 버전만 올려도 임시로 이 문제는 해결된다. 그러나 그 후에 시스템을 업데이트하면 이 문제가 다시 나타날 수 있다.
아직 패치되지 않은 Android 11 이 탑재된 Pixel 5 를 Firebase 가 사용하는 듯하다. 그럼, 내 잘못은 아니네?
이 문제에 관해 개발자가 할 일은?
출시 전일 때
내 앱은 아직 일반 대중에게 출시되지 않았다. 따라서 Android 11 사용자들이 내 앱을 설치할 때 미리 조처하라고 권고하면 될 듯하다. 기본 스토어 등록 정보에 다름의 내용을 추가하였다:
* 중요: Android 11 사용자들은 이 앱을 설치하기 전에 시스템을 먼저 업데이트하십시오. 그러지 않으면 앱이 다운될 수도 있습니다(이미 업데이트한 사람은 안 해도 됨).
(나는 이제 아래에 언급한 바와 같이 우연히 문제가 해결되어 기본 스토어 등록 정보에 위의 공지는 넣지 않아도 될 듯하다.)
앱을 이미 출시한 후이면
앱을 오래전에 출시했으면 이미 앱을 사용하는 사용자들이 꽤 있을 것이다. 위에서 해당 사항을 다시 보면:
It could help as the people affected would have the update of the app available to them just after the system update to 11.
시스템을 업데이트하고 앱도 다시 업데이트하라는 뜻으로 해석된다. 그럼, 시스템을 업데이트했는데 아직 앱 업데이트할 일이 없으면 당분간 불편을 겪어야 한다는 말이 되는데? 그냥 앱 삭제하고 다시 설치하는 게 제일 속 편할 듯하다.
시스템 업데이트 > 앱 삭제 > 앱 재설치
물론, 앱을 삭제하기 전에 삭제해야 하는지 살펴볼 필요는 있다. 시스템을 업데이트한 후에도 앱이 다운되면 그때 삭제하고 재설치하면 될듯하다.
해결된 건가
Native crash of com.google.android.gms 문제는 정확히 어느 곳의 문제?
나는 처음에 이 문제가 광고 코드에 관한 거로 생각했다. 그런데 어제 내가 테스터로서 도와드린 분의 앱을 보니 광고가 들어 있었다. 그래서 ‘그럼 그 앱에도 이 문제가 생겼겠는데?’ 라는 생각이 들어서 물어보니 이 문제가 없단다. 그렇다면 광고가 아닌 다른 곳 문제일 수 있겠다.
oss-licenses-plugin
안드로이드 앱 개발에 사용되는 여러 소프트웨어는 아파치 2. 0 라이선스를 채택하고 있으므로 아마 대부분의 안드로이드 앱은 그런 소프트웨어를 사용했다는 사실을 공표해야 한다. 그래서 당근 앱이나 카카오톡 앱을 보면 어딘가에서 오픈 소스 라이선스를 볼 수 있게 해 놓았다. 내 앱에도 그렇게 해 놓아야겠다고 진즉부터 마음먹었고 실제로 구현해 놓았다. 사실, 구글에서 만들어 놓은 걸 그냥 갖다 쓰면 된다.
이 글에서 다루는 문제의 핵심 주제어인 com.google.android.gms 라는 말을 build.gradle.kts 에서 검색해 보았다. root-level build.gradle.kts 파일에 다음의 내용이 보인다.
buildscript {
...
dependencies {
classpath("com.google.android.gms:oss-licenses-plugin:0.10.4")
}
}
현재 이 패키지는 0.10.6 이 최신이다 (그런데 나온 지 1년 반이나 되었음). 나도 처음에는 이 최신 버전을 쓰고 있었는데 debug variant 에서 오픈 소스 라이선스가 제대로 출력되지 않는 문제가 있었다(아마 공백으로 나왔던 것 같다). release variant 에서만 제대로 출력된다. 평소 개발 단계에서는 늘 debug variant 로 설정해 놓으니까, 라이선스가 제대로 안 나오는 게 섭섭해서 저 패키지를 0.10.4 로 낮췄었다. 그 후에 잊고 있었다. 지금에 와서는 release variant 가 더 중요하니까 이제 저걸 0.10.6 으로 올리기로 했다. 그렇게 해서 혹시라도 이 글에서 다루는 crash 문제가 해결된다면 다행이겠다.
buildscript {
...
dependencies {
classpath("com.google.android.gms:oss-licenses-plugin:0.10.6")
}
}
그렇게 해서 apk 를 먼저 만들어서 기기에서 돌려 보고 별문제 없어서 aab 를 Play Console 에 올렸다. 한두 시간이 지나자, 사전 출시 보고서가 나왔다. 어제까지 안정성 분야에 있던 오류 1개가 사라졌다. 이제 빨간색은 하나도 없다. 접근성 분야에 노란색이 좀 있을 뿐이다. Pixel 5 에서도 문제가 없었다고 한다. 이 문제가 이렇게 그냥 끝나는 건지 얼떨떨하다. 오늘 저녁까지도 계속 별문제 없는 걸로 나오면 기본 스토어 등록 정보에 넣었던 저 위의 공지는 없애야겠다.