Record that the suite passes on real API 37 hardware

The doc reasoned that the WorkManager and lateinit failures in CI were
downstream of the broken framework rather than real defects, but said so as
inference and flagged that only a healthy API 37 device could settle it.

One was available. The full instrumented suite runs green on a Pixel 10 Pro XL
on Android 17 -- a release build, not a preview -- with 40 tests, 0 failures,
2 skipped, both skips being benchmarks that assume sample files present.
ConversionWorkerTest and ConcatWorkerTest drive a real WorkManager round trip
and are among the tests that failed that way in CI; they pass on hardware.

So the bug is confined to the emulator image, and the gap left by the missing
matrix row is automated coverage rather than confidence in the app. Noted that
the suite should be run on a physical API 37 device before each release while
the row is absent.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-21 21:37:49 -05:00
co-authored by Claude Opus 5
parent 4e6fe6b75a
commit edd6385bf7
+39 -10
View File
@@ -1,6 +1,7 @@
# API 37 is not tested in CI: a crash in Google's `android-37.0` emulator image
**Status:** open upstream, worked around by removing API 37 from the E2E matrix
**Status:** open upstream, worked around by removing API 37 from the E2E matrix.
The app itself is verified good on real API 37 hardware — this is an emulator bug only.
**Last verified:** 2026-08-21, against emulator `37.1.11.0` and system image revision 6
`minSdk` is 33 and `targetSdk` is 37, and the E2E matrix in
@@ -63,9 +64,10 @@ because content-provider installation fails on a framework whose `surfaceflinger
crash-looping. The same tests pass at API 33, 34, 35, and 36 in the same CI run, and
the first `surfaceflinger` abort is timestamped *before* the test results are reported.
That last point is inference rather than proof: the definitive check would be running
the suite against a healthy API 37 device, which does not exist yet. If a fixed image
ships and these tests still fail, treat the WorkManager error as a real finding.
This is not inference. The full suite was run against a physical API 37 device and
passed — see [Verified on real API 37 hardware](#verified-on-real-api-37-hardware)
below. `ConversionWorkerTest` and `ConcatWorkerTest`, which drive a real WorkManager
round trip and are among the tests that failed this way in CI, both pass there.
## Environment
@@ -116,6 +118,32 @@ exists for `android-37.0`** — only `google_apis`, `google_apis_playstore`, the
16 KB-page variants, and Wear OS. Check again when revisiting; if an ATD image appears,
try it before anything else here.
## Verified on real API 37 hardware
The bug is confined to the emulator image. On 2026-08-21 the whole instrumented suite
was run against a physical device and passed:
```
Device: Pixel 10 Pro XL (mustang), arm64-v8a
Build: google/mustang/mustang:17/CP2A.260805.005/15828068:user/release-keys
API: 37 (Android 17, codename REL -- a release build, not a preview)
./gradlew :app:connectedDebugAndroidTest -PabiFilters=arm64-v8a
40 tests, 0 failures, 0 errors, 2 skipped BUILD SUCCESSFUL
```
The two skips are `RealMediaBenchmark.hardwareVersusSoftwareOnRealVideo` and
`av1InputRoutesAccordingToDeviceDecodeSupport`, which `assumeTrue` their sample files
are present and skip when they are not. That is by design and unrelated to API level.
One harmless warning appears during the run and can be ignored:
`No UID for androidx.test.services in user 0`, from an `appops` call the test services
package makes before it is fully registered.
So the app is correct on Android 17. What is missing is only *automated* coverage in
CI. Until the image is fixed, run the suite on a physical API 37 device before release;
that is the substitute for the missing matrix row.
## Reproducing it
Locally, with `-gpu host` so the emulator itself does not segfault on Intel graphics:
@@ -177,9 +205,10 @@ Re-add the API 37 row when any of these happens:
- an ATD image appears for API 37
- the upstream issue is marked fixed
Until then the coverage gap is narrow but real. `targetSdk` is 37, so the app is still
compiled and unit-tested against it, and the API-dependent behaviour this matrix exists
to exercise — the foreground service type, which is absent below 34, `dataSync` at 34,
and `mediaProcessing` from 35 — is fully covered at 35 and 36. What is *not* covered is
any behaviour Android 17 changes relative to 36. Verify that on a physical device before
release.
Until then the gap is narrower than the missing row suggests. `targetSdk` is 37, so the
app is compiled and unit-tested against it; the API-dependent behaviour this matrix
exists to exercise — the foreground service type, absent below 34, `dataSync` at 34,
`mediaProcessing` from 35 — is covered at 35 and 36; and the full instrumented suite has
been run green on real API 37 hardware. What is missing is *automated* API 37 coverage,
so a regression there would not be caught by a pull request. Run the suite on a physical
API 37 device before each release for as long as this row is absent.