Files
rayneo-vm/app-glasses-vm/src/main/AndroidManifest.xml
T

145 lines
7.9 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PROJECTION" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<!-- Shizuku v12+: BinderSender проверяет requestedPermissions на наличие
этого permission (см. moe.shizuku.server.BinderSender.sendBinder).
Старое moe.shizuku.permission.SHIZUKU (Shizuku v11) больше не работает. -->
<uses-permission android:name="moe.shizuku.manager.permission.API_V23" />
<uses-feature
android:glEsVersion="0x00020000"
android:required="true" />
<uses-feature
android:name="android.hardware.type.embedded"
android:required="true" />
<!-- Android 11+ package visibility:
- Shizuku API выполняет context.bindService на сервис внутри пакета
moe.shizuku.privileged.api; без явного queries bindService возвращает false
и binder к нам никогда не приедет.
- queryIntentActivities(MAIN+LAUNCHER) без intent-queries возвращает только
системные/RayNeo приложения; для всех сторонних (free.zona и т.п.)
нужен явный <intent> с ACTION_MAIN + CATEGORY_LAUNCHER. -->
<queries>
<package android:name="moe.shizuku.privileged.api" />
<intent>
<action android:name="rikka.shizuku.intent.action.REQUEST_BINDER" />
</intent>
<intent>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent>
</queries>
<application
android:name=".GlassesVmApp"
android:label="@string/app_name"
android:allowBackup="false"
android:theme="@style/Theme.RayNeoVm"
android:supportsRtl="true"
tools:targetApi="36">
<!-- MainActivity — заодно HOME-кандидат: на этих очках BOOT_COMPLETED
ненадёжен, а домашний экран система поднимает всегда.
Дефолтным его не назначаем — это делается отдельно
(`cmd package set-home-activity`), по явной команде. -->
<activity
android:name=".MainActivity"
android:exported="true"
android:configChanges="orientation|screenSize|smallestScreenSize|screenLayout|density|keyboardHidden|navigation|mcc|mnc"
android:launchMode="singleTask"
android:stateNotNeeded="true"
android:clearTaskOnLaunch="true"
android:theme="@style/Theme.RayNeoVm">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<!-- Foreground service: WebSocket server + mDNS + захват аудио (задача #2) -->
<service
android:name=".VmService"
android:exported="false"
android:foregroundServiceType="mediaPlayback|mediaProjection" />
<!-- Пассивный Accessibility-сервис (задача #5): живучесть процесса +
легальный запуск Activity из фона. Ничего не читает и не инжектит.
Активируется вручную: Настройки → Специальные возможности → RayNeo VM. -->
<service
android:name=".VmAccessibilityService"
android:exported="true"
android:label="@string/app_name"
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/vm_accessibility_service" />
</service>
<!-- 4.1: системный IME-заглушка. Нулевой UI; назначается дефолтным через Shizuku
(settings put secure default_input_method). Обратно НЕ возвращаем. -->
<service
android:name=".VmNoopImeService"
android:exported="true"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.view.InputMethod" />
</intent-filter>
<meta-data
android:name="android.view.im"
android:resource="@xml/vm_noop_ime_method" />
</service>
<!-- VmShizukuService НЕ объявляется здесь как <service> — это Shizuku UserService,
который ServiceStarter создаёт через reflection в отдельном isolated-процессе.
Если объявить — Shizuku-сервер не сможет привести класс к IBinder
(ClassCastException в moe.shizuku.starter.ServiceStarter). -->
<!-- Shizuku v12+ требует ShizukuProvider в манифесте — он сам вытаскивает binder
через ContentProvider IPC и инициализирует Shizuku-клиент. Без него binder не придёт.
permission=INTERACT_ACROSS_USERS_FULL защищает провайдер от обычных приложений. -->
<provider
android:name="rikka.shizuku.ShizukuProvider"
android:authorities="${applicationId}.shizuku"
android:multiprocess="false"
android:enabled="true"
android:exported="true"
android:permission="android.permission.INTERACT_ACROSS_USERS_FULL" />
<!-- Отладочный приёмник (защищён DUMP): тестовый тон для проверки аудио-тракта. -->
<receiver
android:name=".debug.GlassesDebugReceiver"
android:exported="true"
android:permission="android.permission.DUMP">
<intent-filter>
<action android:name="pw.binom.rayneovm.glasses.DEBUG_TEST_TONE" />
<action android:name="pw.binom.rayneovm.glasses.DEBUG_AUDIO_PIPE" />
<action android:name="pw.binom.rayneovm.glasses.DEBUG_AUDIO_PHONE" />
<action android:name="pw.binom.rayneovm.glasses.DEBUG_AUDIO_STOP" />
<action android:name="pw.binom.rayneovm.glasses.DEBUG_STOP_TONE" />
</intent-filter>
</receiver>
<meta-data android:name="com.rayneo.mercury.app" android:value="true" />
</application>
</manifest>