You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Fix device tests: embed assemblies in the APK so the app can actually start (#118)
* Fix device tests: embed assemblies in the APK so the app can actually start
The first nightly run booted the emulator, installed the APK and launched it, then sat
for the full 8-minute timeout with an empty harness log. Reproduced locally: the app
aborts during startup, before any managed code runs.
F monodroid: No assemblies found in
'/data/user/0/com.plugin.admob.devicetests/files/.__override__/x86_64'.
Assuming this is part of Fast Deployment. Exiting...
A Debug Android build uses Fast Deployment, which deliberately leaves the managed
assemblies out of the APK for `dotnet build -t:Run` to push separately. Installing that
APK with plain `adb install` gives an app with no managed code. Building with
-p:EmbedAssembliesIntoApk=true produces a self-contained APK (~13 MB -> ~90 MB), so give
the AVD an 8G disk as well — a 91 MB install hit INSTALL_FAILED_INSUFFICIENT_STORAGE on
a full local emulator.
Verified on a local emulator with the fixed APK: all seven formats load.
RESULT format=banner status=PASS RESULT format=app-open status=PASS
RESULT format=interstitial status=PASS RESULT format=native status=PASS
RESULT format=rewarded status=PASS RESULT format=native-video status=PASS
RESULT format=rewarded-interstitial status=PASS
SUMMARY_ALL status=PASS passed=7 total=7
Also dump real diagnostics when no result is reported. The gate only ever printed the
tag-filtered log, so a startup crash showed up as an empty block that said nothing about
the cause; it now prints the process state, fatal/crash lines and unfiltered log tail.
And select the newest installed Xcode on the iOS leg. That job failed with "This version
of .NET for iOS (26.5.10301) requires Xcode 26.6. The current version of Xcode is 26.5" —
images usually carry several Xcodes with an older one selected. The listing makes it
obvious if none is new enough. The job stays advisory.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* Correct the gating rationale to match what CI actually measured
The verification run disproved the documented reason for the banner-only gate. On the
hosted runner (headless, software GPU, google_apis image) banner AND all four full-screen
formats load:
banner PASS interstitial PASS rewarded PASS (2nd attempt)
rewarded-interstitial PASS app-open PASS
native FAIL "Internal error" native-video FAIL "Internal error"
SUMMARY_BANNER status=PASS SUMMARY_ALL status=FAIL passed=5 total=7
So full-screen formats do not need -gpu host to load. The real gap is native, whose demo
creatives are app-install ads needing market:// click resolution — that wants a Play Store
system image (google_apis_playstore), not a GPU. The gate itself was already right; only
the explanation was wrong. Updated in the README, harness docs, gate script and workflow.
Also fixed the README's local-repro snippet, which omitted EmbedAssembliesIntoApk and so
reproduced the very startup crash this branch fixes, and documented the currently broken
iOS leg: Xcode 26.6 is installed on the image but ships without the macOS platform SDK, so
actool fails, while .NET for iOS 26.5.10301 refuses to build under 26.5. That job stays
advisory — the dispatch run confirmed a failing advisory job still leaves the run green.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
0 commit comments