I previously reported this issue: https://github.com/expo/expo/issues/1122. In short, what happens on Android 6.0 and older devices is, when you install a standalone APK that was built against a later version of the JS bundle over an older version, the first time you load the app, it still loads the old bundle on first run. Meanwhile, Android 7.0 and later devices load the JS bundle that was actually packaged with the app. The net result is that android 6.0 and older users who are updating an app through the Play Store need an extra app restart to see the latest JS (and even though they see that Google Play updated their app, it doesn’t look like they got any updates).
I’m noticing a new, related issue. I just updated our app in the Play Store from an APK with SDK 22 (let’s call this version 1.0.0) to one with SDK 25 (version 1.0.1). On an Android 6.0 device where I had previously installed 1.0.0, but later uninstalled it, when I install the latest version from Google Play, on first run, the JS bundle version is the last version that I was downloaded when I had version 1.0.0 installed (an OTA update that was pre-1.0.1). No matter how many times I uninstall/ reinstall the app from Google Play, it always first loads on that old JS bundle.
This did not happen on an Android 7.0 device I tried, and it did not happen on an Android 5.1 device where I had not previously installed my app. It seems like something about this JS bundle is cached on my Android 6.0 device, and it never goes away even after a full uninstall. I wanted to see if this is the same case with sideloading the APK, but since I’ve installed the latest version from Google Play, every time I uninstall the GPS version and sideload the APK, it crashes on first load. Then the second load has the latest JS bundle.
This is more concerning than the original bug, because it now seems like certain users can have the JS bundle version of the Android app go backwards (if they uninstall and reinstall the app later). Android 6.0 and earlier is still about 75% of the market. At some point, I would like to deprecate old versions of our server API as we upgrade the app and Google Play Console analytics show that users are no longer using those old versions, but I would have to leave those versions in place if some users can travel back in time to a really old version of the app.
Obviously, this is kind of hard to debug since it involves a somewhat specific series of things that happened on a particular phone. If it helps, I’m happy to provide the APK’s or test accounts for our app. Thanks!