Random Musings on the Android 12 Beta 1
Each time Google releases a follow-on developer preview, I rummage through the incremental API differences report, the release notes, and even the release blog post, to see if there are things that warrant more attention from developers. I try to emphasize things that mainstream developers might use but may not get quite as much attention, because they are buried in the JavaDocs.
After a slight delay for the API differences report to be released, let’s peek at what we got in Beta 1!
(and many thanks to Wojtek for the help in getting that report!)
What Continues To Be Disappointing
The overall improvements to app widgets
that I have been reporting on in past musings are great. But the
mandatory rounded corners
make me wonder if targetSdkVersion
got deprecated or something. This is now
the second UI change, after the splash screens, that can materially affect
apps and cannot be postponed until developers have time to deal with it.
Every app widget will have rounded corners, like it or not.
I can stomach mandatory immediate changes that affect privacy and security. But aesthetics? As one developer put it to me on Stack Overflow a decade ago, “if I wanted somebody to tell me what my app had to look like, I’d be writing for Apple”.
Wanting a standard launch UI and, um, roundy app widgets is perfectly reasonable for Google… but, please, give developers reasonable time to adapt.
What May Cause Your App to Show Up In Klingon
It appears that some devices — whose names might end in “ixel” — are going
to be able to offer system-supplied translations of user-visible strings. This is almost completely
undocumented, though there are many classes in
a new android.view.translation
package,
plus related methods on View
.
You can also query PackageManager
to see if the device supports
FEATURE_TRANSLATION
.
My questions are:
-
Is this opt-in? Or is this like splash screens, and apps will get translated without developer consent?
-
If this is mandatory, is Google going to supply the multilingual customer support needed for app developers to deal with questions in unsupported languages?
I like the concept, but this opens a big can of worms. Having this show up, undocumented, in Beta 1 is disturbing.
What Else Might Cause You Grief
I like the concept of app hibernation,
which appears to boil down to “we press the ‘Force Stop’ button, so you don’t have to!”.
However, the documentation mentions that ACTION_BOOT_COMPLETED
will be sent to the
app after it moves out of hibernation, which may break apps that assume that ACTION_BOOT_COMPLETED
happens at boot time. This, at least, only kicks in with a targetSdkVersion
of 30
.
If you like your castles to be bouncy, you may run into some compatibility issues. Alas, at this point, due to the passage of time, it is probably not a good idea to have your castles be spongy instead.
What Security Improvements Make Me Happy
Approximate location seems like a blissfully simple solution.
AttributionSource
seems interesting.
We can query for version information regarding the hardware keystore.
And a bullet on a slide in “What’s New in Google Play”, referring to “code transparency”, offers some hope with respect to my uncomfortable questions.
What Else I Am Looking Forward To
The new Bluetooth permissions
greatly reduce the “fear factor” that needing ACCESS_FINE_LOCATION
imposed on
apps looking to talk to Bluetooth devices.
For developers maintaining alternative app stores, you can now
perform silent app updates,
if the user grants permission.
Which, since that permission is normal
(inexplicably), you should just get by having it in the manifest.
What Has Me Scratching My Head
The docs for “Extended file access support” state:
Additionally, the media URIs that are granted by
createWriteRequest()
now support the APIs in theFile
class. These APIs provide the ability to read, write, rename, and delete files.
But… Uri
does not have the methods of File
. If what this is trying to say
is that developers should be reverse-engineering a filesystem path out of a Uri
…
well, that takes me from “scratching my head” to “pounding my head”.
Also, there is a new DataLoaderService
,
which seems to tie into the app installation process. The documentation is scant at best.
And, DevicePolicyManager
now lets you control the “app streaming” policy. That is described as:
App streaming is when the device starts an app on a virtual display and sends a video stream of the app to nearby devices.
I am uncertain if this refers to Android Auto, scrcpy
, Windows 10,
or something else.
What Makes Me Giggle
Performance class sounds like we’re talking about car trim lines (“the silky-smooth screen, the two-speaker audio system, and the Corinthian leather back mark this phone as being truly ‘performance class’…”).
What Else Caught My Eye
Android 11’s package visibility changes apparently had a hole that is being closed.
TypedArray
is now an AutoCloseable
,
which seems like a nice addition. Too bad Jetpack Compose means we will be using
TypedArray
a whole lot less…
We can now detect if the device network is connected to an automotive head unit. I’m not savvy enough with Android for Vehicles with 4+ Wheels to know if this is for Android Auto, Android Automotive, or something else. It probably is not for Otto.