[Scummvm-tracker] [ScummVM :: Bugs] #17261: Android 16 / ScummVM 2026.3.0: external launch of specific games fails when Intent data is supplied to SplashActivity
ScummVM :: Bugs
trac at scummvm.org
Fri Oct 2 12:54:38 UTC 2026
#17261: Android 16 / ScummVM 2026.3.0: external launch of specific games fails when
Intent data is supplied to SplashActivity
-----------------------+---------------------------
Reporter: sibelius80 | Owner: (none)
Type: defect | Status: new
Priority: normal | Component: Port: Android
Version: | Keywords:
Game: |
-----------------------+---------------------------
### 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 the `SplashActivity` Intent 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.
--
Ticket URL: <https://bugs.scummvm.org/ticket/17261>
ScummVM :: Bugs <https://bugs.scummvm.org>
ScummVM
More information about the Scummvm-tracker
mailing list