AndroidManifest.xml

AndroidManifest.xml and App Metadata

AndroidManifest.xml is the contract between the app and the operating system, read before any code runs: which components exist (activities, services, broadcast receivers, content providers), which permissions the app requests and which intents each component answers. It plays the role of Cordova 129 's config.xml (config.xml).

app/src/main/AndroidManifest.xml for BookNestXML
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
  <uses-permission android:name="android.permission.INTERNET" />
  <application
    android:label="@string/app_name"
    android:icon="@android:drawable/sym_def_app_icon"
    android:theme="@android:style/Theme.Material.Light.NoActionBar">
    <activity android:name=".MainActivity" android:exported="true">
      <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
    </activity>
  </application>
</manifest>

The package name, version and SDK levels are missing on purpose: they live in app/build.gradle.kts (SDK Levels), and .MainActivity resolves against the Gradle 19,597 namespace. MAIN plus LAUNCHER puts the icon on the home screen. Since Android 12 (API 31), a component with an intent filter must set android:exported. What ships is the merged manifest, which AGP builds from this file, every library's manifest and Gradle:

Key elements of the merged manifest after a debug buildShell
grep -A1 --no-group-separator \
  -E 'package=|<(uses-sdk|permission|activity|provider|receiver)$' \
  app/build/intermediates/merged_manifests/debug/processDebugManifest/AndroidManifest.xml
Output
    package="com.example.booknest"
    android:versionCode="1"
    <uses-sdk
        android:minSdkVersion="26"
    <permission
        android:name="com.example.booknest.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION"
        <activity
            android:name="com.example.booknest.MainActivity"
        <provider
            android:name="androidx.startup.InitializationProvider"
        <receiver
            android:name="androidx.profileinstaller.ProfileInstallReceiver"

Activity Compose 1.13.0 234 and Material 3 15,533 (Compose BOM 2026.09.00) brought a signature permission from androidx.core, the App Startup provider that initializes Lifecycle, and a profile-installer receiver. To drop a library's entry, add tools:node="remove" to a matching element.