0

Yesterday I released an update for a paid app that I have on Google Play Store.

After a few hours, I got a 1-star review from a user who complained that the app was crashing, so I went to investigate it in the Android Vitals section of the Developer Console. At first, I didn't see any signs of crashes or ANR's, but when I changed the filter "Installed from Play" to "Installed from anywhere", I could see that that app had indeed been crashing a lot for this one single user.

I'm a bit baffled and curious what this means - if he really got his hands on the app from somewhere else, how come he is able to leave a review on Google Play? And how come he was even able to update the app?

Could "Installed from anywhere" include other things, like a user who has uninstalled the app since the crash? Or a user who has backed up the app using something like Titanium and then restored it from the backup?

I should probably mention also that the actual crash happened in the Google Licence Verification Library, which makes the "Installed from anywhere" part even more suspicious. Here's the stack trace (unfortunately I forgot to upload mapping.txt to deobfuscate the method names, and have already made modifications to the source code).

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)

At first it might seem lika a multidex problem, but more than 50 others have already updated the app, and still there is only a crash report from this one single user. If it were indeed a multidex problem, wouldn't it affect most users (at least the ones on the same Android version)?

Magnus
  • 17,157
  • 19
  • 104
  • 189
  • are you able to figure out the date this user installed it and in which country? If so can you then correlate it with an Install event showing up on the dashboard? – pcodex Sep 14 '18 at 07:34

1 Answers1

0

As you say, if the user didn't install the app from Play he shouldn't be able to leave a review. But actually, it is a little more subtle than that, which might be causing the issue.

Google actually bases "can the user leave a review" on "is the app in the User's library" which means "has the user installed it on any device, or even bought it but not installed". So the situation you have described could have a few causes:

  • maybe the user bought a previous version of the app, but the newer version is not comaptible with their device. So they downloaded the update from elsewhere and sideloaded it. They can leave a review because it is in their user library, but they haven't installed the latest version
  • the user has bought the app on one device, then sideloaded it onto another device, maybe using P2P or backup and restore software. Because it is in the user's library they can leave a review, but the install doesn't show
  • maybe there is a bug in the Play Store about blocking the reviews

Your case looks pretty easy to investigate with very specific information. Don't post private details like the username, review, or the package name of your app to StackOverflow. Instead, the best thing to do in this case, like many others is to contact Google Play console support, where they can collect the details in private. You can contact them via the help menu in the Play console, behind the "?" question mark icon. Note that anyone at Google may not be able to give you an exact explanation to protect the privacy of the user with the bad review.

All of the above is general advice. A note for this specific questioner, not everyone on stack overflow: In this case, feel free to put in your query a request to escalate to me by name. The Play console support person ought to be able to send the details you send them to me, and I can check further for bugs.

Nick Fortescue
  • 13,530
  • 1
  • 31
  • 37