android:name value in androidmanifest.xml
Categories:
Understanding and Configuring android:name in AndroidManifest.xml

Explore the critical role of the android:name attribute in AndroidManifest.xml for defining application components, custom classes, and Cordova integration.
The android:name attribute is a fundamental part of the AndroidManifest.xml file in Android development. It serves as a crucial identifier, linking XML declarations to their corresponding Java or Kotlin classes. This attribute is used across various components like <application>, <activity>, <service>, <receiver>, and <provider>, as well as for defining custom application classes and integrating frameworks like Cordova. Misconfigurations of android:name can lead to runtime errors, app crashes, or unexpected behavior, making its correct usage paramount for stable Android applications.
The Core Function of android:name
At its heart, android:name specifies the fully qualified class name for an Android component or a custom class. When the Android system needs to instantiate a component declared in the manifest, it uses the value of android:name to locate and load the correct class. This mechanism allows the system to manage the lifecycle of your application's components effectively.
flowchart TD
A[AndroidManifest.xml] --> B{Component Declaration}
B --> C["android:name='com.example.MyActivity'"]
C --> D{Android System Reads Manifest}
D --> E[Locate Class: com.example.MyActivity]
E --> F[Instantiate MyActivity]
F --> G[Component Lifecycle Management]Flow of how Android uses android:name to instantiate components.
<!-- Example of android:name for an Activity -->
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- Example of android:name for a custom Application class -->
<application
android:name=".MyCustomApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.MyApp">
Typical usage of android:name for an Activity and a custom Application class.
android:name for components within the same package as your AndroidManifest.xml, you can use a shorthand notation starting with a dot (e.g., .MainActivity). The system will automatically prepend your package name.Integrating Cordova with android:name
For hybrid app development using frameworks like Cordova, android:name plays a crucial role in defining the main entry point of the application. Cordova typically uses a custom Application class and a main Activity to bootstrap the web view and plugin system. The AndroidManifest.xml must correctly point to these Cordova-specific classes.
<!-- Cordova-specific android:name configurations -->
<application
android:name="org.apache.cordova.CordovaApplication"
android:hardwareAccelerated="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true">
<activity
android:name="org.apache.cordova.CordovaActivity"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|smallestScreenSize|screenLayout|uiMode"
android:label="@string/activity_name"
android:launchMode="singleTop"
android:theme="@style/Theme.AppCompat.NoActionBar"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- Other Cordova components like BroadcastReceiver or Service might also use android:name -->
Example of AndroidManifest.xml for a Cordova application, highlighting android:name for CordovaApplication and CordovaActivity.
android:name for Cordova's CordovaApplication or CordovaActivity can prevent your app from launching or initializing the web view correctly. Always ensure these values match the Cordova framework's expected class names, especially after updates or custom plugin installations.Common Issues and Troubleshooting
Errors related to android:name often manifest as ClassNotFoundException or ActivityNotFoundException at runtime. These usually indicate a mismatch between the class name specified in the manifest and the actual class file in your project.
Troubleshooting Steps:
- Verify Full Path: Ensure the
android:namevalue is the fully qualified class name (e.g.,com.yourpackage.YourClass) or uses the correct shorthand relative to the manifest's package. - Check for Typos: Even a single character typo can cause the system to fail to find the class.
- Build System Issues: Sometimes, build tools or IDEs might not correctly compile or package the class. A clean build or cache invalidation can resolve this.
- Cordova Specifics: For Cordova, ensure that the
android:namevalues forCordovaApplicationandCordovaActivityare correct and haven't been inadvertently changed by plugins or manual edits.
1. Locate the Manifest File
Open your Android project and navigate to app/src/main/AndroidManifest.xml.
2. Identify the Problematic Component
Based on the error message (e.g., ActivityNotFoundException), identify which <activity>, <application>, <service>, or <receiver> tag is causing the issue.
3. Verify android:name Value
Check the android:name attribute within that component. Compare it against the actual class file's package and name. For example, if android:name=".MyActivity", ensure there's a MyActivity.java (or .kt) file directly under your main package.
4. Clean and Rebuild Project
In Android Studio, go to Build > Clean Project and then Build > Rebuild Project to ensure all classes are compiled and packaged correctly.
5. Consult Cordova Documentation (if applicable)
If using Cordova, refer to the official Cordova documentation or your project's config.xml for the expected android:name values for core components.