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 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.

Change History (0)

Note: See TracTickets for help on using tickets.