What is inside AndroidManifest.xml

The AndroidManifest.xml file is a configuration file that is included in every Android application. It contains essential information about the application that the Android system needs to properly run it. This information includes the application's name, package name, version number, and required permissions. In addition, it includes details about the activities, services, and intent filters that the application requires.

AndroidManifest.xml can be extracted from your APK file and viewed both with the APK decompiler and the ApkTool.

This table summarizes things that can be found in the AndroidManifest.xml file:

Information Description
Application name The user-friendly name of the application.
Package name The unique identifier of the application.
Version number The current version of the application.
Activities The screens or windows that the user interacts with when using the application.
Services The background processes that the application runs to perform specific tasks.
Receivers The components that receive and handle broadcast messages.
Content Providers The components that manage access to a shared repository of data.
Permissions The security features that limit the actions an application can perform.
Intent Filters The types of intents the application can receive, such as opening a specific file type or responding to a specific action.

As an example we can take the AndroidManifest.xml from the discontinued app Rabbit–WatchTogether_4.0.92.apk:

<?xml version="1.0" encoding="utf-8" standalone="no"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" android:compileSdkVersion="28" android:compileSdkVersionCodename="9" package="it.rabb.rabbitandroid" platformBuildVersionCode="28" platformBuildVersionName="9">
                                        <uses-permission android:name="android.permission.INTERNET"/>
                                        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
                                        <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
                                        <uses-permission android:name="android.permission.CAMERA"/>
                                        <uses-feature android:name="android.hardware.camera"/>
                                        <uses-feature android:name="android.hardware.camera.autofocus"/>
                                        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
                                        <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
                                        <uses-permission android:name="android.permission.RECORD_AUDIO"/>
                                        <uses-permission android:name="android.permission.WAKE_LOCK"/>
                                        <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
                                        <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
                                        <uses-permission android:name="android.permission.READ_PROFILE"/>
                                        <usesAs an example we can take the AndroidManifest.xml from the discontinued app Rabbit–WatchTogether_4.0.92.apk:       <action android:name="android.intent.action.VIEW"/>
                                        <category android:name="android.intent.category.DEFAULT"/>
                                        <category android:name="android.intent.category.BROWSABLE"/>
                                        <data android:host="rabb.it" android:scheme="https"/>
                                        <data android:host="rabb.it" android:scheme="http"/>
                                        <data android:host="www.rabb.it" android:scheme="https"/>
                                        <data android:host="www.rabb.it" android:scheme="http"/>
                                        <data android:host="sdfm9.app.goo.gl" android:scheme="http"/>
                                        <data android:host="sdfm9.app.goo.gl" android:scheme="https"/>
                                        <data android:host="open" android:scheme="rabbit"/>
                                        </intent-filter>
                                        <intent-filter>
                                        <action android:name="android.intent.action.MAIN"/>
                                        <category android:name="android.intent.category.LAUNCHER"/>
                                        <action android:name="android.intent.action.DOWNLOAD_COMPLETE"/>
                                        </intent-filter>
                                        <intent-filter>
                                        <action android:name="it.rabb.HANDLE_PUSH_TAP"/>
                                        <category android:name="android.intent.category.DEFAULT"/>
                                        </intent-filter>
                                        <intent-filter android:label="@string/share_with_app">
                                        <action android:name="android.intent.action.SEND"/>
                                        <category android:name="android.intent.category.DEFAULT"/>
                                        <data android:mimeType="text/plain"/>
                                        </intent-filter>
                                        </activity>
                                        <activity android:name="com.facebook.react.devsupport.DevSettingsActivity"/>
                                        <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/>
                                        <meta-data android:name="com.facebook.sdk.AutoLogAppEventsEnabled" android:value="false"/>
                                        <meta-data android:name="com.google.firebase.messaging.default_notification_icon" android:resource="@drawable/status_bar_white"/>
                                        <service android:exported="true" android:name="it.rabb.rabbitandroid.firebase.InstanceIdService">
                                        <intent-filter>
                                        <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
                                        </intent-filter>
                                        </service>
                                        <service android:name="it.rabb.rabbitandroid.RabbitFirebaseMessagingService">
                                        <intent-filter>
                                        <action android:name="com.google.firebase.MESSAGING_EVENT"/>
                                        </intent-filter>
                                        </service>
                                        <meta-data android:name="com.dylanvann.fastimage.OkHttpProgressGlideModule" android:value="GlideModule"/>
                                        <provider android:authorities="it.rabb.rabbitandroid.provider" android:exported="false" android:grantUriPermissions="true" android:name="android.support.v4.content.FileProvider">
                                        <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/provider_paths"/>
                                        </provider>
                                        <activity android:name="com.yalantis.ucrop.UCropActivity" android:theme="@style/Theme.AppCompat.Light.NoActionBar"/>
                                        <activity android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|screenSize" android:name="com.facebook.FacebookActivity" android:theme="@style/com_facebook_activity_theme"/>
                                        <activity android:name="com.facebook.CustomTabMainActivity"/>
                                        <activity android:name="com.facebook.CustomTabActivity"/>
                                        <activity android:excludeFromRecents="true" android:exported="true" android:launchMode="singleTask" android:name="com.google.firebase.auth.internal.FederatedSignInActivity" android:permission="com.google.firebase.auth.api.gms.permission.LAUNCH_FEDERATED_SIGN_IN" android:theme="@android:style/Theme.Translucent.NoTitleBar"/>
                                        <service android:exported="false" android:name="com.google.firebase.components.ComponentDiscoveryService">
                                        <meta-data android:name="com.google.firebase.components:com.google.firebase.auth.FirebaseAuthRegistrar" android:value="com.google.firebase.components.ComponentRegistrar"/>
                                        <meta-data android:name="com.google.firebase.components:com.google.firebase.dynamiclinks.internal.FirebaseDynamicLinkRegistrar" android:value="com.google.firebase.components.ComponentRegistrar"/>
                                        <meta-data android:name="com.google.firebase.components:com.google.firebase.analytics.connector.internal.AnalyticsConnectorRegistrar" android:value="com.google.firebase.components.ComponentRegistrar"/>
                                        <meta-data android:name="com.google.firebase.components:com.google.firebase.iid.Registrar" android:value="com.google.firebase.components.ComponentRegistrar"/>
                                        </service>
                                        <activity android:exported="true" android:name="com.google.android.gms.appinvite.PreviewActivity" android:theme="@style/Theme.AppInvite.Preview">
                                        <intent-filter>
                                        <action android:name="com.google.android.gms.appinvite.ACTION_PREVIEW"/>
                                        <category android:name="android.intent.category.DEFAULT"/>
                                        </intent-filter>
                                        </activity>
                                        <activity android:excludeFromRecents="true" android:exported="false" android:name="com.google.android.gms.auth.api.signin.internal.SignInHubActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar"/>
                                        <service android:exported="true" android:name="com.google.android.gms.auth.api.signin.RevocationBoundService" android:permission="com.google.android.gms.auth.api.signin.permission.REVOCATION_NOTIFICATION"/>
                                        <service android:exported="true" android:name="com.google.firebase.messaging.FirebaseMessagingService">
                                        <intent-filter android:priority="-500">
                                        <action android:name="com.google.firebase.MESSAGING_EVENT"/>
                                        </intent-filter>
                                        </service>
                                        <receiver android:enabled="true" android:exported="false" android:name="com.google.android.gms.measurement.AppMeasurementReceiver"/>
                                        <receiver android:enabled="true" android:exported="true" android:name="com.google.android.gms.measurement.AppMeasurementInstallReferrerReceiver" android:permission="android.permission.INSTALL_PACKAGES">
                                        <intent-filter>
                                        <action android:name="com.android.vending.INSTALL_REFERRER"/>
                                        </intent-filter>
                                        </receiver>
                                        <service android:enabled="true" android:exported="false" android:name="com.google.android.gms.measurement.AppMeasurementService"/>
                                        <service android:enabled="true" android:exported="false" android:name="com.google.android.gms.measurement.AppMeasurementJobService" android:permission="android.permission.BIND_JOB_SERVICE"/>
                                        <receiver android:exported="true" android:name="com.google.firebase.iid.FirebaseInstanceIdReceiver" android:permission="com.google.android.c2dm.permission.SEND">
                                        <intent-filter>
                                        <action android:name="com.google.android.c2dm.intent.RECEIVE"/>
                                        </intent-filter>
                                        </receiver>
                                        <service android:exported="true" android:name="com.google.firebase.iid.FirebaseInstanceIdService">
                                        <intent-filter android:priority="-500">
                                        <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
                                        </intent-filter>
                                        </service>
                                        <activity android:exported="false" android:name="com.google.android.gms.common.api.GoogleApiActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar"/>
                                        <provider android:authorities="it.rabb.rabbitandroid.crashlyticsinitprovider" android:exported="false" android:initOrder="90" android:name="com.crashlytics.android.CrashlyticsInitProvider"/>
                                        <provider android:authorities="it.rabb.rabbitandroid.firebaseinitprovider" android:exported="false" android:initOrder="100" android:name="com.google.firebase.provider.FirebaseInitProvider"/>
                                        <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version"/>
                                        <provider android:authorities="it.rabb.rabbitandroid.MarketingInitProvider" android:exported="false" android:name="com.facebook.marketing.internal.MarketingInitProvider"/>
                                        <provider android:authorities="it.rabb.rabbitandroid.FacebookInitProvider" android:exported="false" android:name="com.facebook.internal.FacebookInitProvider"/>
                                        <receiver android:exported="false" android:name="com.facebook.CurrentAccessTokenExpirationBroadcastReceiver">
                                        <intent-filter>
                                        <action android:name="com.facebook.sdk.ACTION_CURRENT_ACCESS_TOKEN_CHANGED"/>
                                        </intent-filter>
                                        </receiver>
                                        <meta-data android:name="com.android.vending.derived.apk.id" android:value="1"/>
                                        </application>
                                        </manifest>

The following useful information can be found in this AndroidManifest.xml:

  • versionCode: The version code of the application. It is set to 228 in this example.
  • versionName: The version name of the application. It is set to 4.0.92 in this example.
  • compileSdkVersion: The version of the SDK used to build the app. It is set to 28 in this example.
  • package: The package name of the application. It is set to it.rabb.rabbitandroid in this example.
  • uses-sdk: Specifies the minimum and target SDK versions required by the app.
  • uses-permission: Declares permissions that the app needs to access certain device resources or perform certain actions.
  • uses-feature: Declares features that the app requires to function properly.
  • activity: Defines an activity within the app, including its name, launch mode, and configuration changes.
  • intent-filter: Defines an intent filter that specifies the types of intents the activity can respond to.
  • meta-data: Specifies metadata for the app or its components.
  • service: Defines a service within the app, including its name and intent filter.
  • provider: Declares a content provider for the app.