Opened 5 days ago
#17261 new defect
Android 16 / ScummVM 2026.3.0: external launch of specific games fails when Intent data is supplied to SplashActivity
| Reported by: | sibelius80 | Owned by: | |
|---|---|---|---|
| Priority: | normal | Component: | Port: Android |
| Version: | Keywords: | ||
| Cc: | Game: |
Description
### Environment
- ScummVM: 2026.3.0
- Android: Android 16
- Device: Snapdragon 8 Elite / Adreno 830
- ScummVM package:
org.scummvm.scummvm - ES-DE: 3.5.0-65 (r52)
### Summary
Launching games directly from the standalone ScummVM app works correctly.
Launching the same games externally from ES-DE fails immediately. ES-DE invokes:
`text
Package: org.scummvm.scummvm
Activity: org.scummvm.scummvm.SplashActivity
Action: android.intent.action.MAIN
Data: <scummvm target>
`
and receives:
`text
Launch terminated with nonzero return value -1
`
The problem appears to be related to Android 16 strict Intent matching when SplashActivity is launched with any Intent data.
### Reproduction
The launcher activity resolves correctly:
`bash
adb shell cmd package resolve-activity --brief org.scummvm.scummvm
`
Output:
`text
org.scummvm.scummvm/.SplashActivity
`
The activity is exported:
`bash
adb shell cmd package query-activities \
-a android.intent.action.MAIN \
-c android.intent.category.LAUNCHER \
-p org.scummvm.scummvm
`
Relevant output:
`text
name=org.scummvm.scummvm.SplashActivity
enabled=true
exported=true
`
Launching SplashActivity without Intent data succeeds:
`bash
adb shell am start \
--user 0 \
-n org.scummvm.scummvm/.SplashActivity \
-a android.intent.action.MAIN \
-c android.intent.category.LAUNCHER
`
Output:
`text
Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=org.scummvm.scummvm/.SplashActivity }
`
ScummVM opens normally.
However, adding any Intent data causes Android to reject the activity:
`bash
adb shell am start \
--user 0 \
-n org.scummvm.scummvm/.SplashActivity \
-a android.intent.action.MAIN \
-c android.intent.category.LAUNCHER \
-d "test"
`
Output:
`text
Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] dat= cmp=org.scummvm.scummvm/.SplashActivity }
Error type 3
Error: Activity class {org.scummvm.scummvm/org.scummvm.scummvm.SplashActivity} does not exist.
`
The same occurs with an actual ScummVM target:
`bash
adb shell am start \
--user 0 \
-n org.scummvm.scummvm/.SplashActivity \
-a android.intent.action.MAIN \
-c android.intent.category.LAUNCHER \
-d "sword2-win-it"
`
and with a ScummVM URI:
`bash
adb shell am start \
--user 0 \
-n org.scummvm.scummvm/.SplashActivity \
-a android.intent.action.MAIN \
-d 'scummvm:sword2-win-it'
`
Both fail with:
`text
Error type 3
Error: Activity class {org.scummvm.scummvm/org.scummvm.scummvm.SplashActivity} does not exist.
`
### Manifest observations
The installed 2026.3.0 APK has:
`text
android:targetSdkVersion=36
android:compileSdkVersion=36
`
and the application includes:
`text
android:intentMatchingFlags=0x00000002
`
SplashActivity is:
`text
android:exported=true
`
with the following Intent filter:
`text
Action:
android.intent.action.MAIN
Categories:
android.intent.category.LAUNCHER
tv.ouya.intent.category.GAME
android.intent.category.LEANBACK_LAUNCHER
`
There is no <data> element in the SplashActivity Intent filter.
The internal activity is:
`text
org.scummvm.scummvm.ScummVMActivity
android:exported=false
`
so external launchers cannot bypass SplashActivity.
### Source-code observation
Current ScummVM Android code still appears to expect the game target via Intent data.
SplashActivity forwards incoming Intent action/data to ScummVMActivity.
ScummVMActivity reads:
`java
getIntent().getData()
`
and uses the URI scheme-specific part as the ScummVM target.
ScummVM also creates game launch URIs internally using:
`java
Uri.fromParts("scummvm", target, null)
`
This suggests Intent data is still the intended mechanism for launching a specific target.
### Expected behavior
An external launcher should be able to start:
`text
org.scummvm.scummvm/.SplashActivity
`
with a ScummVM target supplied as Intent data and have ScummVM launch that configured game.
### Actual behavior
On Android 16 / target SDK 36, SplashActivity starts successfully only when no Intent data is supplied.
As soon as any data URI is attached, Android rejects the explicit Intent before ScummVM runs.
### Possible cause
This appears related to Android 16 stricter Intent-filter matching combined with:
`text
android:intentMatchingFlags=0x00000002
`
and the absence of a <data> declaration on the exported SplashActivity Intent filter.
### Possible fixes
One of the following may be required:
- add an appropriate
<data>rule to theSplashActivityIntent filter for externally supplied ScummVM target URIs; - adjust
android:intentMatchingFlags/ strict Intent matching behavior for this activity; - expose a supported external launch mechanism that does not rely on unmatched Intent data.
### Additional context
This was discovered through ES-DE, but the behavior can be reproduced directly with adb, so it does not appear to be specific to ES-DE.
Standalone ScummVM launches the configured games correctly.
