(I really wanted to open this post with an Android development-themed riff on
“Twas the Night Before Christmas”,
but the rhyming part of my brain is malfunctioning right now…)
So, we got our second and final developer preview for Android 16.
I say “final developer preview” because the next round should be classified as a beta.
Google actually talked a bit more about this release, which is a significant
improvement over DP1.
The “new features and APIs page”
and blog post
highlight several changes. Some of those are also explored by Mishaal Rahman in
this Android Police post.
Google still has not documented “app functions”.
To me, that feels like it might be running late and not make the Android 16 cut.
Beyond that, here is what else caught my eye:
What Might Make Work Wobbly
All apps on Android 16 are subject to “JobScheduler quota optimizations”.
To be blunt, this section is not well-written. For example, it refers to “active standby buckets”,
which (at present) aren’t a thing, at least in terms of the SDK. Still, from the tone,
it feels like background jobs (including WorkManager
work) might get stopped more frequently.
Fortunately, they did add getStopReason()
methods so we can find out why work got
stopped, with corresponding stop reason constants (e.g., STOP_REASON_APP_STANDBY
,
STOP_REASON_QUOTA
).
Also, if you had been relying upon the deprecated setImportantWhileForeground()
option
on JobInfo.Builder
,
that no longer does anything.
While they were at it, they also deprecated and nerfed
isImportantWhileForegound()
on JobInfo
.
What Might Be Key
There is a new KeyStoreManager
system service,
retrieved via getSystemService()
and
KEYSTORE_SERVICE
.
Among other things, KeyStoreManager
has grantKeyAccess()
, which allows App A to grant
access to a key to App B. While I can see possible use cases, this does not seem to be
defended by a permission or anything, and it seems like an obvious thing for malware to want to use. 🤷🏻
What You Might Find Interesting
-
A network security config can now declare that
certificate transparency verification is required
for a particular network.
-
We can now opt into tapjacking attacks in some scenarios,
if I am interpreting this correctly. It is unclear why we would want to do that.
-
You can now get the “state of health” of the battery.
This is “the remaining estimated full charge capacity relative to the rated capacity in %”.
Given that we are talking about batteries, I am disappointed that the value was
not named BATTERY_PROPERTY_STATE_OF_SHOCK
. 😁
-
We can now allow a PendingIntent
to have
“all background activity start privileges, including those normally reserved for privileged contexts (e.g., companion apps or those with the START_ACTIVITIES_FROM_BACKGROUND
permission)”,
via a MODE_BACKGROUND_ACTIVITY_START_ALLOW_ALWAYS
flag.
I wonder if this will get abused enough to warrant a permission.
-
Speaking of permissions,
five new ones showed up.
The RANGING
permission
may be tied to this ranging change.
-
You can now tweak the Intent
matching rules applied to your components (or to your
app overall) via intentMatchingFlags
.
-
A Spanned
object now has a new span type, NoWritingToolsSpan
.
This allows you to indicate a section of text that soft keyboards (IMEs) should not
offer to modify, such as quoted text.
-
Via StrictMode
, you can now find out when
your app was prevented from launching an activity in the background.
This sort of thing might be useful to monitor in the field.
-
Devices can now declare that they support the Thread networking protocol.
I do not look forward to trying to make sense of Thread threads, let alone discussion
threads about Thread threads.
-
There are now standard Intent
actions for capturing a “motion photo”.
-
A VirtualDisplay
can now be rotated.
-
ApplicationStartInfo
now tells you generally why your process was started,
via getStartComponent()
.
You get told which of the four component types triggered the start, but not the specific
class. There is also a somewhat-disturbing START_COMPONENT_OTHER
if your process was started just for the fun of it, or something.
What Happens Next?
We should get Android 16 Beta 1 in January.
—Dec 18, 2024
OK, yesterday was not
the final artifact wave for 2024.
Coinciding with the announcement of Android XR, we got a few new artifact groups:
androidx.xr.arcore
androidx.xr.compose
androidx.xr.compose.material3
androidx.xr.runtime
androidx.xr.scenecore
And, in those groups, we got some new artifacts:
androidx.xr.arcore:arcore
androidx.xr.compose:compose
androidx.xr.compose:compose-testing
androidx.xr.compose.material3:material3
androidx.xr.runtime:runtime
androidx.xr.runtime:runtime-openxr
androidx.xr.runtime:runtime-testing
androidx.xr.scenecore:scenecore
androidx.xr.scenecore:scenecore-testing
We also got new Compose Material3 alphas and a couple of new BOMs:
androidx.compose:compose-bom-alpha:2024.12.00
androidx.compose.material3:material3:1.4.0-alpha05
androidx.compose.material3:material3-adaptive-navigation-suite:1.4.0-alpha05
androidx.compose.material3:material3-adaptive-navigation-suite-android:1.4.0-alpha05
androidx.compose.material3:material3-adaptive-navigation-suite-jvmstubs:1.4.0-alpha05
androidx.compose.material3:material3-android:1.4.0-alpha05
androidx.compose.material3:material3-jvmstubs:1.4.0-alpha05
androidx.compose.material3:material3-lint:1.4.0-alpha05
androidx.compose.material3:material3-linuxx64stubs:1.4.0-alpha05
androidx.compose.material3:material3-window-size-class:1.4.0-alpha05
androidx.compose.material3:material3-window-size-class-android:1.4.0-alpha05
androidx.compose.material3:material3-window-size-class-jvmstubs:1.4.0-alpha05
androidx.compose.material3:material3-window-size-class-linuxx64stubs:1.4.0-alpha05
androidx.compose.material3.adaptive:adaptive:1.1.0-alpha08
androidx.compose.material3.adaptive:adaptive-android:1.1.0-alpha08
androidx.compose.material3.adaptive:adaptive-jvmstubs:1.1.0-alpha08
androidx.compose.material3.adaptive:adaptive-layout:1.1.0-alpha08
androidx.compose.material3.adaptive:adaptive-layout-android:1.1.0-alpha08
androidx.compose.material3.adaptive:adaptive-layout-jvmstubs:1.1.0-alpha08
androidx.compose.material3.adaptive:adaptive-navigation:1.1.0-alpha08
androidx.compose.material3.adaptive:adaptive-navigation-android:1.1.0-alpha08
androidx.compose.material3.adaptive:adaptive-navigation-jvmstubs:1.1.0-alpha08
androidx.gradle:gradle-version-catalog-alpha:2024.12.00
androidx.xr.arcore:arcore:1.0.0-alpha01
androidx.xr.compose:compose:1.0.0-alpha01
androidx.xr.compose:compose-testing:1.0.0-alpha01
androidx.xr.compose.material3:material3:1.0.0-alpha01
androidx.xr.runtime:runtime:1.0.0-alpha01
androidx.xr.runtime:runtime-openxr:1.0.0-alpha01
androidx.xr.runtime:runtime-testing:1.0.0-alpha01
androidx.xr.scenecore:scenecore:1.0.0-alpha01
androidx.xr.scenecore:scenecore-testing:1.0.0-alpha01
—Dec 12, 2024
This week, we got the 1.5.0
stable release of Media3:
androidx.media3:media3-cast:1.5.0
androidx.media3:media3-common:1.5.0
androidx.media3:media3-common-ktx:1.5.0
androidx.media3:media3-container:1.5.0
androidx.media3:media3-database:1.5.0
androidx.media3:media3-datasource:1.5.0
androidx.media3:media3-datasource-cronet:1.5.0
androidx.media3:media3-datasource-okhttp:1.5.0
androidx.media3:media3-datasource-rtmp:1.5.0
androidx.media3:media3-decoder:1.5.0
androidx.media3:media3-effect:1.5.0
androidx.media3:media3-exoplayer:1.5.0
androidx.media3:media3-exoplayer-dash:1.5.0
androidx.media3:media3-exoplayer-hls:1.5.0
androidx.media3:media3-exoplayer-ima:1.5.0
androidx.media3:media3-exoplayer-midi:1.5.0
androidx.media3:media3-exoplayer-rtsp:1.5.0
androidx.media3:media3-exoplayer-smoothstreaming:1.5.0
androidx.media3:media3-exoplayer-workmanager:1.5.0
androidx.media3:media3-extractor:1.5.0
androidx.media3:media3-muxer:1.5.0
androidx.media3:media3-session:1.5.0
androidx.media3:media3-test-utils:1.5.0
androidx.media3:media3-test-utils-robolectric:1.5.0
androidx.media3:media3-transformer:1.5.0
androidx.media3:media3-ui:1.5.0
androidx.media3:media3-ui-leanback:1.5.0
—Nov 27, 2024
This week is for Media3 and a bit of Test:
androidx.media3:media3-cast:1.5.0-rc01
androidx.media3:media3-cast:1.5.0-rc02
androidx.media3:media3-common:1.5.0-rc01
androidx.media3:media3-common:1.5.0-rc02
androidx.media3:media3-common-ktx:1.5.0-rc01
androidx.media3:media3-common-ktx:1.5.0-rc02
androidx.media3:media3-container:1.5.0-rc01
androidx.media3:media3-container:1.5.0-rc02
androidx.media3:media3-database:1.5.0-rc01
androidx.media3:media3-database:1.5.0-rc02
androidx.media3:media3-datasource:1.5.0-rc01
androidx.media3:media3-datasource:1.5.0-rc02
androidx.media3:media3-datasource-cronet:1.5.0-rc01
androidx.media3:media3-datasource-cronet:1.5.0-rc02
androidx.media3:media3-datasource-okhttp:1.5.0-rc01
androidx.media3:media3-datasource-okhttp:1.5.0-rc02
androidx.media3:media3-datasource-rtmp:1.5.0-rc01
androidx.media3:media3-datasource-rtmp:1.5.0-rc02
androidx.media3:media3-decoder:1.5.0-rc01
androidx.media3:media3-decoder:1.5.0-rc02
androidx.media3:media3-effect:1.5.0-rc01
androidx.media3:media3-effect:1.5.0-rc02
androidx.media3:media3-exoplayer:1.5.0-rc01
androidx.media3:media3-exoplayer:1.5.0-rc02
androidx.media3:media3-exoplayer-dash:1.5.0-rc01
androidx.media3:media3-exoplayer-dash:1.5.0-rc02
androidx.media3:media3-exoplayer-hls:1.5.0-rc01
androidx.media3:media3-exoplayer-hls:1.5.0-rc02
androidx.media3:media3-exoplayer-ima:1.5.0-rc01
androidx.media3:media3-exoplayer-ima:1.5.0-rc02
androidx.media3:media3-exoplayer-midi:1.5.0-rc01
androidx.media3:media3-exoplayer-midi:1.5.0-rc02
androidx.media3:media3-exoplayer-rtsp:1.5.0-rc01
androidx.media3:media3-exoplayer-rtsp:1.5.0-rc02
androidx.media3:media3-exoplayer-smoothstreaming:1.5.0-rc01
androidx.media3:media3-exoplayer-smoothstreaming:1.5.0-rc02
androidx.media3:media3-exoplayer-workmanager:1.5.0-rc01
androidx.media3:media3-exoplayer-workmanager:1.5.0-rc02
androidx.media3:media3-extractor:1.5.0-rc01
androidx.media3:media3-extractor:1.5.0-rc02
androidx.media3:media3-muxer:1.5.0-rc01
androidx.media3:media3-muxer:1.5.0-rc02
androidx.media3:media3-session:1.5.0-rc01
androidx.media3:media3-session:1.5.0-rc02
androidx.media3:media3-test-utils:1.5.0-rc01
androidx.media3:media3-test-utils:1.5.0-rc02
androidx.media3:media3-test-utils-robolectric:1.5.0-rc01
androidx.media3:media3-test-utils-robolectric:1.5.0-rc02
androidx.media3:media3-transformer:1.5.0-rc01
androidx.media3:media3-transformer:1.5.0-rc02
androidx.media3:media3-ui:1.5.0-rc01
androidx.media3:media3-ui:1.5.0-rc02
androidx.media3:media3-ui-leanback:1.5.0-rc01
androidx.media3:media3-ui-leanback:1.5.0-rc02
androidx.test:orchestrator:1.6.0-alpha01
androidx.test.services:storage:1.6.0-alpha01
androidx.test.services:test-services:1.6.0-alpha01
—Nov 20, 2024