The Death of External Storage: Serenity Now

In a rare bit of good news, it appears that Google will apply normal targetSdkVersion rules to the new “scoped storage” in Android Q.

It appears that apps that have targetSdkVersion of 28 or lower will not be affected by the external storage restrictions that exist on Android Q. Previously, such apps would be affected if they were newly installed on Android Q devices. Such apps will have some type of manifest entry to opt into scoped storage, or they will be affected once their targetSdkVersion reaches 29 Q.

This is huge, for two reasons.

First, as Google points out, this gives active developers more time to update their apps to deal with these changes.

Second, this will allow legacy apps — those not receiving updates — to continue working as normal… at least for a while. Google is threatening that all apps will need to use scoped storage on Android R, along the lines of what was threatened with this release. Frankly, unless Google fixes things, that’s ridiculous too. Right now, users would be unable to get at files saved by legacy apps using other apps (via the Storage Access Framework) or even via a USB cable. Similarly, users cannot provide files to those apps, if those apps are expecting them in what Google considers to be inappropriate locations (i.e., nearly everywhere). This would mean that many of those legacy apps would simply no longer be useful. Perhaps Google will address those limitations in time for Android R.

For actively-maintained apps, though, no matter what happens with Android R, you still need to adapt to scoped storage. Next year, your targetSdkVersion will need to rise to 29 Q in order to be distributed through the Play Store, courtesy of Google’s version ratchet. But, you now have about 15 months in which to make those changes, instead of 3.

I am grateful that Google is making this change, and I thank the engineers who advocated for it.