Random Musings on the R Developer Preview 3
Each time Google releases a new developer preview, I read what I can to see if there are things that warrant more attention from developers. I try to emphasize mainstream features that any developer might reasonably use, along with things that may not get quite as much attention, because they are buried in the JavaDocs.
The deeper we get into the release series for a new Android version, the fewer “big ticket” changes appear. Android R is no exception. Many of the changes are tweaks to things that debuted earlier, such as new class and method names around data access auditing.
So, What’s New?
Besides stuff like the improved wireless ADB access that Google pointed out in the DP3 release blog post, I see a few other new items of interest:
-
We now have
isExternalStorageManager()
methods onEnvironment
. This is how we can find out if the user has granted usMANAGE_EXTERNAL_STORAGE
. The zero-parameter version tells us if we have such rights for external storage; the one-parameter version tells us if we have such rights on whatever storage volume contains the suppliedFile
. This was a clear gap in the earlier developer previews, so I am glad that this was added! -
There is a new option with the keystore to require authentication per use on designated keys, with developer-controlled authenticators (e.g., strong biometrics or a device credential).
-
ContentResolver
now has anotifyChange()
method that takes a collection ofUri
values, presumably as an optimization. -
ParcelFileDescriptor
now has awrap()
method. You also supply anOnCloseListener
, which is notified when the underlyingParcelFileDescriptor
is closed. This could be useful for tracking file descriptor leaks — keep a roster of those that you create and remove them from the list when they are closed.
Also, Android Police pointed out that there is a new Settings option to “auto-revoke permissions”. Basically, if the user does not use your app for a while (“a few months”), Android will automatically revoke certain permissions that the user has granted. Well-written apps should not be harmed by this, but it is yet another wrinkle with runtime permissions added by Android R, on top of the one-time permission option that debuted with DP1.
What Significantly Changed?
Besides the name changes in data access auditing, we have:
-
android.view.inline
moved toandroid.widget.inline
and got a bit more in the way of documentation.InlineContentView
feels like something layered atop of theSurfaceControlViewHost
that I profiled here and here. Still, it is unclear how this is going to get used in practice. -
ApplicationExitInfo
got three new reasons of why your process died. Also, we can now register a “process state summary” viaActivityManager
and get that back inApplicationExitInfo
, to provide a bit more context about what the app was doing at the time its process died. And, if we crashed (particularly with an ANR), we can get details of what the threads were doing at the time.
What’s Gone?
Whatever FEATURE_CONTEXT_HUB
was, it no longer exists.
Also, as part of revamping the “resource loader” system, they got rid
of DirectoryAssetLoader
… despite still referring to it in the preview
documentation.
While technically not “gone”, a couple of WebView
methods were deprecated:
setAllowFileAccessFromFileURLs()
setAllowUniversalAccessFromFileURLs()
What Now?
I will work on releasing an updated version of Elements of Android R in the coming weeks, covering some of this and other things that are part of earlier developer previews.