The Death of External Storage: The Beta 3 Status

Last week brought us the Q Beta 3 release and Google I|O, and the
changes that Google promised
have largely come to pass. The Q Beta 3 documentation for
scoped storage is a
substantial improvement, and the Google I|O presentation on it
was very welcome.



By default, apps with a targetSdkVersion of 29 Q
will have ���sandboxed��� external storage: an independent location from the external
storage from any other app. When sandboxed, your app has no ability to work with
sandboxes of other apps via the filesystem, and your app has no ability to work
with the ���real��� external storage that the user sees (again, via the filesystem).
Instead, you are steered to the Storage Access Framework and possibly MediaStore
for working with common content.
Users can get to an app���s
sandbox via Android/sandbox/, though it is unclear how many users will discover this.
And the contents of the sandbox are removed when the app is uninstalled, just as with
internal storage.



However:





Apps with a targetSdkVersion of 28 or lower will have normal external storage
access by default




Apps can add android:allowExternalStorageSandbox="false" to the <application>
element to opt out of the sandbox, ideally only while the app���s developers are making
changes to deal with the sandbox (note: this attribute name might change in Q Beta 4)





This gives developers a more reasonable timeframe for adjusting to these changes.
While Android R is likely to force the sandbox ��� at least on apps with newer
targetSdkVersion values ��� that means we have closer to 15 months to make
changes, not just 3.



As a community, we will need to work out the details for how to adapt everything.
For example, there is confusion over updating the MediaStore for metadata changes.
But now we have the time to do that.



This does not give you the luxury of sleeping on this work, though:





Apply android:allowExternalStorageSandbox="false" ASAP, lest your app ship
to Android Q users before you have the time to test the sandbox behavior




Once Android Q ships ��� or using the Q Beta releases if you wish ���
budget the time to play with your app with
android:allowExternalStorageSandbox="true" (opting into the sandbox) to see
what all breaks and needs to get rebuilt





However, I am very grateful that Google elected to slow down this change and give
us a clearer implementation for the near term.

 •  0 comments  •  flag
Share on Twitter
Published on May 13, 2019 06:23
No comments have been added yet.