glasses: switch to rikka.shizuku.ShizukuProvider, fix binder acquisition

- Add dev.rikka.shizuku:provider:13.1.5 dependency.
- Replace custom ShizukuInitProvider with rikka.shizuku.ShizukuProvider
  from the upstream library; configured per Shizuku v12+ docs with
  android:permission='android.permission.INTERACT_ACROSS_USERS_FULL'
  to protect the provider from ordinary apps.
- Move ShizukuBootstrap.attach() from GlassesVmApp.onCreate to
  MainActivity.onCreate (requestPermission needs an Activity context).
- MainActivity now overrides onRequestPermissionsResult and forwards
  the grant to ShizukuBootstrap.
- Rewrite ShizukuBootstrap strictly per the Shizuku-API guide:
  addBinderReceivedListenerSticky + addRequestPermissionResultListener
  in attach(); pingBinder / checkSelfPermission / requestPermission
  in refresh().
- Drop ShizukuInitProvider.kt — its job is now done by
  rikka.shizuku.ShizukuProvider.onCreate (verified in logcat:
  'ShizukuProvider: binder received').

Verified on device ARGF20 (A06B4AB933C4103, API 32): Shizuku dialog
'Allow rayneo-vm to use Shizuku?' opens correctly; binder received
via ShizukuProvider; launcher icon now visible (meta-data fix).
This commit is contained in:
2026-09-25 14:44:52 +03:00
parent 987f9e5547
commit e01fafd5a9
5 changed files with 109 additions and 11 deletions
+26 -1
View File
@@ -12,7 +12,10 @@
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="moe.shizuku.permission.SHIZUKU" />
<!-- 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"
@@ -21,6 +24,16 @@
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 к нам никогда не приедет. -->
<queries>
<package android:name="moe.shizuku.privileged.api" />
<intent>
<action android:name="rikka.shizuku.intent.action.REQUEST_BINDER" />
</intent>
</queries>
<application
android:name=".GlassesVmApp"
android:label="@string/app_name"
@@ -52,6 +65,18 @@
android:name=".VmShizukuService"
android:exported="true"
android:process=":shizuku_vd" />
<!-- 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" />
<meta-data android:name="com.rayneo.mercury.app" android:value="true" />
</application>
</manifest>