Skip to content

cordova run android fails to launch apps with fully qualified activity names in AndroidManifest.xml #1913

@vbansal-bb

Description

@vbansal-bb

Bug Report

Problem

What is expected to happen?

cordova run android should install and launch the app successfully when the main activity in AndroidManifest.xml uses a fully qualified class name that is outside the app's package namespace (e.g., com.other.package.MainActivity instead of .MainActivity).

What does actually happen?

The app installs successfully but the launch fails with:

Error type 3
Error: Activity class {com.example.myapp/com.example.myapp.com.other.package.MainActivity} does not exist.

The activity name is incorrectly resolved because lib/target.js always uses the /. (relative) notation when constructing the launch intent component name:
const launchName = pkgName + '/.' + manifest.getActivity().getName();

For a fully qualified activity name like com.other.package.MainActivity, this produces com.example.myapp/.com.other.package.MainActivity, which Android resolves as com.example.myapp.com.other.package.MainActivity — a class that does not exist.

Information

This issue affects any Cordova plugin that overrides the main activity with a fully qualified class name via edit-config in plugin.xml. For example:

The resulting AndroidManifest.xml contains:

<activity android:name="com.other.package.MainActivity" ...>

The fix is straightforward — check if the activity name is already fully qualified and use / instead of /.:

const activityName = manifest.getActivity().getName();
const launchName = activityName.includes('.')
? pkgName + '/' + activityName
: pkgName + '/.' + activityName;

This preserves existing behavior for relative names (.MainActivity) while correctly handling fully qualified names.

Command or Code

cordova create myapp com.example.myapp MyApp
cd myapp
cordova platform add android

Add a plugin that overrides the activity with a fully qualified name, or manually

edit platforms/android/app/src/main/AndroidManifest.xml to set:

android:name="com.other.package.MainActivity"

cordova run android

Result: INSTALL SUCCESS followed by launch failure

Environment, Platform, Device

macOS

Android emulator and physical devices

Issue is in lib/target.js — platform and device independent

Version information

Cordova CLI: 13.0.0

cordova-android: 13.0.0, 14.0.1, 15.0.0 (all affected — same code at line 133 of lib/target.js)

Node.js: >= 20.7.0

Checklist

  • I searched for existing GitHub issues
  • I updated all Cordova tooling to most recent version
  • I included all the necessary information above

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions