Вчера я выпустил обновление для платного приложения, которое есть у меня в Google Play Store.
Через несколько часов я получил отзыв с 1 звездой от пользователя, который пожаловался на сбой приложения, поэтому я отправился исследовать его в разделе Android Vitals консоли разработчика. Сначала я не видел никаких признаков сбоев или ANR, но когда я изменил фильтр «Установлено из Play» на «Установлено откуда угодно», я увидел, что это приложение действительно часто дает сбой для этого одного пользователя. .
Я немного сбит с толку, и мне любопытно, что это значит — если он действительно получил приложение откуда-то еще, как он может оставить отзыв в Google Play? И как он вообще смог обновить приложение?
Может ли «Установлено откуда угодно» включать в себя другие вещи, например пользователя, который удалил приложение после сбоя? Или пользователь, который сделал резервную копию приложения с помощью чего-то вроде Titanium, а затем восстановил его из резервной копии?
Я, вероятно, должен также упомянуть, что фактический сбой произошел в библиотеке проверки лицензии Google, что делает часть «Установлено откуда угодно» еще более подозрительной. Вот трассировка стека (к сожалению, я забыл загрузить mapping.txt
для деобфускации имен методов и уже внес изменения в исходный код).
Google Pixel XL (marlin), Android 9
java.lang.NoClassDefFoundError:
at com.google.android.vending.licensing.l.d (Unknown Source:29)
at com.google.android.vending.licensing.l.a (Unknown Source:25)
at com.google.android.vending.licensing.f.a (Unknown Source:2)
at com.google.android.vending.licensing.f.a (Unknown Source:209)
at com.google.android.vending.licensing.d$a$2.run (Unknown Source:52)
at android.os.Handler.handleCallback (Handler.java:873)
at android.os.Handler.dispatchMessage (Handler.java:99)
at android.os.Looper.loop (Looper.java:193)
at android.os.HandlerThread.run (HandlerThread.java:65)
Caused by: java.lang.ClassNotFoundException:
at dalvik.system.BaseDexClassLoader.findClass (BaseDexClassLoader.java:134)
at java.lang.ClassLoader.loadClass (ClassLoader.java:379)
at java.lang.ClassLoader.loadClass (ClassLoader.java:312)
Сначала это может показаться проблемой мультидекса, но более 50 других уже обновили приложение, и до сих пор есть только отчет о сбое от этого одного пользователя. Если бы это действительно была проблема с мультидексом, разве она не затронула бы большинство пользователей (по крайней мере, тех, кто работает с той же версией Android)?