AndroidManifest.xml 5.77 KB
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

    <!-- ============================================================
         Standard permissions
         ============================================================ -->
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />

    <!-- ============================================================
         Accessibility / Notification Listener (declared here;
         granted via Settings — no root needed, but bridge requires root
         to inject service without user interaction)
         ============================================================ -->
    <uses-permission android:name="android.permission.BIND_ACCESSIBILITY_SERVICE"
        tools:ignore="ProtectedPermissions" />
    <uses-permission android:name="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE"
        tools:ignore="ProtectedPermissions" />

    <!-- ============================================================
         Root / System-level permissions
         These are signature|privileged permissions — only granted on
         rooted devices or when installed as a system app.
         ============================================================ -->
    <uses-permission android:name="android.permission.READ_LOGS"
        tools:ignore="ProtectedPermissions" />
    <uses-permission android:name="android.permission.MANAGE_APP_OPS_MODES"
        tools:ignore="ProtectedPermissions" />
    <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL"
        tools:ignore="ProtectedPermissions" />
    <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS"
        tools:ignore="ProtectedPermissions" />
    <uses-permission android:name="android.permission.REAL_GET_TASKS"
        tools:ignore="ProtectedPermissions" />
    <uses-permission android:name="android.permission.DUMP"
        tools:ignore="ProtectedPermissions" />
    <uses-permission android:name="android.permission.PACKAGE_USAGE_STATS"
        tools:ignore="ProtectedPermissions" />
    <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"
        tools:ignore="ProtectedPermissions" />

    <!-- Storage (needed for reading arbitrary app data directories via root) -->
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"
        android:maxSdkVersion="32" />
    <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"
        tools:ignore="ScopedStorage" />

    <!-- Clipboard read on Android 10+ requires this flag -->
    <uses-permission android:name="android.permission.READ_CLIPBOARD_IN_BACKGROUND"
        tools:ignore="ProtectedPermissions" />

    <application
        android:name=".AgentPhoneApp"
        android:allowBackup="false"
        android:networkSecurityConfig="@xml/network_security_config"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.AgentPhoneRuntime"
        tools:targetApi="34">

        <!-- Main launcher activity -->
        <activity
            android:name=".MainActivity"
            android:exported="true"
            android:launchMode="singleTask">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <!-- Foreground service for the MCP server and event collection pipeline -->
        <service
            android:name=".service.AgentRuntimeService"
            android:exported="false"
            android:foregroundServiceType="dataSync"
            android:permission="android.permission.BIND_JOB_SERVICE" />

        <!-- Accessibility service for UI event capture -->
        <service
            android:name=".service.AgentAccessibilityService"
            android:exported="true"
            android:label="@string/accessibility_service_label"
            android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
            <intent-filter>
                <action android:name="android.accessibilityservice.AccessibilityService" />
            </intent-filter>
            <meta-data
                android:name="android.accessibilityservice"
                android:resource="@xml/accessibility_service_config" />
        </service>

        <!-- Notification listener service -->
        <service
            android:name=".service.AgentNotificationListenerService"
            android:exported="true"
            android:label="@string/notification_listener_label"
            android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE">
            <intent-filter>
                <action android:name="android.service.notification.NotificationListenerService" />
            </intent-filter>
        </service>

        <!-- Boot receiver — starts the runtime service on device boot -->
        <receiver
            android:name=".receiver.BootReceiver"
            android:exported="true"
            android:enabled="true">
            <intent-filter android:priority="1000">
                <action android:name="android.intent.action.BOOT_COMPLETED" />
                <action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" />
            </intent-filter>
        </receiver>

    </application>

</manifest>