#
# Syntax:
# - Lines starting with # are ignored (anywhere, as long as # is the first char).
# - Lines before the first @delimiter are ignored.
# - Empty lines just after the @delimiter and before the first < XML line are ignored.
# - Valid delimiters are @main for the XML of the main app manifest.
# - Following delimiters are @libXYZ, read in the order of definition. The name can be
#   anything as long as it starts with "@lib".
# - Last delimiter should be @result.
#

@main

<!--
  This is a canonical manifest that has some uses-permissions,
  the usual uses-sdk and supports-screens, an app with an activity,
  customer receiver & service and a widget.
-->

<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.app1"
    android:versionCode="100"
    android:versionName="1.0.0">

    <uses-sdk android:minSdkVersion="3" android:targetSdkVersion="11"/>

    <supports-screens
        android:largeScreens="true"
        android:smallScreens="true"
        android:normalScreens="true"
        android:resizeable="true"
        android:xlargeScreens="true"
        />

    <!-- Typical analytics permissions. -->
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

    <!-- Touchscreen feature, optional to make sure we can run on devices with no touch screen. -->
    <uses-feature
        android:name="android.hardware.touchscreen"
        android:required="false" />

    <application
        android:label="@string/app_name"
        android:icon="@drawable/app_icon"
        android:backupAgent="com.example.app.BackupAgentClass"
        android:restoreAnyVersion="true"
        android:allowBackup="true"
        android:killAfterRestore="true"
        android:name="com.example.TheApp" >

        <activity
            android:name="com.example.MainActivity"
            android:label="@string/activity_name"
            android:icon="@drawable/activity_icon"
            android:theme="@style/Some.Theme">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <!-- Receiver -->
        <receiver
            android:name="com.example.AppReceiver"
            android:icon="@drawable/app_icon">
            <intent-filter>
                <action android:name="com.example.action.ACTION_CUSTOM" />
            </intent-filter>
        </receiver>

        <!-- Broadcast Receiver for a widget. -->
        <receiver
            android:label="@string/widget_name"
            android:icon="@drawable/widget_icon"
            android:name="com.example.WidgetReceiver" >
            <intent-filter>
                <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
            </intent-filter>
            <meta-data
                android:name="android.appwidget.provider"
                android:resource="@xml/widget_provider"
                />
        </receiver>

        <service
            android:icon="@drawable/app_icon"
            android:name="com.example.AppService" />

        <!-- Activity to configure widget -->
        <activity
            android:icon="@drawable/widget_icon"
            android:label="Configure Widget"
            android:name="com.example.WidgetConfigurationUI"
            android:theme="@style/Theme.WidgetConfigurationUI" >
            <intent-filter >
                <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />
            </intent-filter>
        </activity>

        <!-- Provider extracted from ApiDemos -->
        <provider android:name=".app.LoaderThrottle$SimpleProvider"
            android:authorities="com.example.android.apis.app.LoaderThrottle"
            android:enabled="@bool/atLeastHoneycomb" />

    </application>

</manifest>

@lib1

<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.lib1">
</manifest>


@lib2

# An empty library is not supported. It must be a valid XML file.
<manifest/>

@result

<!--
  This is a canonical manifest that has some uses-permissions,
  the usual uses-sdk and supports-screens, an app with an activity,
  customer receiver & service and a widget.
-->

<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.app1"
    android:versionCode="100"
    android:versionName="1.0.0">

    <uses-sdk android:minSdkVersion="3" android:targetSdkVersion="11"/>

    <supports-screens
        android:largeScreens="true"
        android:smallScreens="true"
        android:normalScreens="true"
        android:resizeable="true"
        android:xlargeScreens="true"
        />

    <!-- Typical analytics permissions. -->
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

    <!-- Touchscreen feature, optional to make sure we can run on devices with no touch screen. -->
    <uses-feature
        android:name="android.hardware.touchscreen"
        android:required="false" />

    <application
        android:label="@string/app_name"
        android:icon="@drawable/app_icon"
        android:backupAgent="com.example.app.BackupAgentClass"
        android:restoreAnyVersion="true"
        android:allowBackup="true"
        android:killAfterRestore="true"
        android:name="com.example.TheApp" >

        <activity
            android:name="com.example.MainActivity"
            android:label="@string/activity_name"
            android:icon="@drawable/activity_icon"
            android:theme="@style/Some.Theme">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <!-- Receiver -->
        <receiver
            android:name="com.example.AppReceiver"
            android:icon="@drawable/app_icon">
            <intent-filter>
                <action android:name="com.example.action.ACTION_CUSTOM" />
            </intent-filter>
        </receiver>

        <!-- Broadcast Receiver for a widget. -->
        <receiver
            android:label="@string/widget_name"
            android:icon="@drawable/widget_icon"
            android:name="com.example.WidgetReceiver" >
            <intent-filter>
                <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
            </intent-filter>
            <meta-data
                android:name="android.appwidget.provider"
                android:resource="@xml/widget_provider"
                />
        </receiver>

        <service
            android:icon="@drawable/app_icon"
            android:name="com.example.AppService" />

        <!-- Activity to configure widget -->
        <activity
            android:icon="@drawable/widget_icon"
            android:label="Configure Widget"
            android:name="com.example.WidgetConfigurationUI"
            android:theme="@style/Theme.WidgetConfigurationUI" >
            <intent-filter >
                <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />
            </intent-filter>
        </activity>

        <!-- Provider extracted from ApiDemos -->
        <provider
            android:name="com.example.app1.app.LoaderThrottle$SimpleProvider"
            android:authorities="com.example.android.apis.app.LoaderThrottle"
            android:enabled="@bool/atLeastHoneycomb" />

    </application>

</manifest>


@errors

W [ManifestMergerTest2_lib2.xml:1] Missing 'package' attribute in manifest.
