Berechtigungen für einen mit ADB gestarteten Dienst erteilen?

Ich versuche, einen einfachen Barrierefreiheitsdienst wie Google Voice Access oder Button Mapper auf einem LG Exalt LTE zum Laufen zu bringen, auf dem eine abgespeckte Version von Marshmellow ausgeführt wird. Dem Bestand fehlen viele UI-Komponenten, einschließlich Systemeinstellungen für die Barrierefreiheit, die normalerweise zum Ein- oder Ausschalten von Barrierefreiheitsdiensten verwendet werden. Ich würde gerne wissen, ob es möglich ist, das Fehlen von UI mit ADB zu kompensieren. Ich habe Folgendes versucht: Installieren Sie die App (z. B. Take Button Mapper). Ihr Manifest deklariert einige Berechtigungen, die ich gewährt habe, sagen wir:

<uses-permission name="android.permission.WRITE_SECURE_SETTINGS" />

wurde zugesichertadb shell pm grant package.name.here android.permission.WRITE_SECURE_SETTINGS

Ich habe es sogar gegebenandroid.permission.WRITE_SECURE_SETTINGS

obwohl es nicht in der Berechtigungsliste oben im Manifest deklariert ist. Ich bekomme diesen Fehler:Operation not allowed: java.lang.SecurityException: Package package.name.here has not requested permission android.permission.BIND_ACCESSIBILITY_SERVICE

Allerdings ist es hier im Manifest deklariert:

<service name="a.i" permission="android.permission.BIND_ACCESSIBILITY_SERVICE" stopWithTask="true">
  <meta-data name="android.accessibilityservice" resource="res/xml/accessibility.xml" />
  <intent-filter>
    <action name="android.accessibilityservice.AccessibilityService" />
  </intent-filter>
</service>

und da liegt das problem. Dies ist der Dienst selbst und erfordert eine nicht paketweite Berechtigung, BIND_ACCESSIBILITY_SERVICE.

wenn ich es mit ADB so starteadb shell am startservice -n package.name.here/a.i

Ich bekomme und FehlerError: Requires permission android.permission.BIND_ACCESSIBILITY_SERVICE

obwohl ich dem Paket bereits die Erlaubnis erteilt habe.

Ich habe es sogar versucht adb shell settings put secure enabled_accessibility_services package.name.here/.a.i, bekomme aber immer noch den gleichen Fehler.

Endeffekt:

Wie starte ich einen Dienst und erteile diesem Dienst mit ADB Berechtigungen? Deutlich sein. Ich weiß bereits, dass ich verwenden kann, adb shell pm grantum dem gesamten Paket eine Berechtigung zu erteilen, aber in diesem Fall ist es eine Berechtigung, die nicht für das gesamte Paket erforderlich ist, es wird in einer bestimmten Komponente deklariert, und ich weiß nicht, wie ich die Komponente mit starten soll die erforderlichen Berechtigungen über ADB.

Offensichtlich habe ich den echten Paketnamen anstelle von Paket.Name.here verwendet ... lol
BIND_ACCESSIBILITY_SERVICE ist eine Berechtigung mit Signaturschutzstufe, was bedeutet, dass sie nicht mit pmähnlichen Berechtigungen mit gefährlicher Schutzstufe gewährt werden kann. Aber es kann Paketen gewährt werden, die danach fragen, indem sie Folgendes verwenden: appops set <pkg> BIND_ACCESSIBILITY_SERVICE allow. Wenn nur eine Komponente (Dienst) danach fragt, sollte das, was Sie erwähnt haben, funktionieren: settings put secure enabled_accessibility_services <pkg1>/<service 1>:<pkg2>/<service2>:.... Das passiert, wenn Sie Apps über die GUI-Einstellungen zulassen.
Versuchen Sie, den App-Prozess zu beenden, nachdem Sie die Erlaubnis erteilt haben. Auch der AFAIK-Dienst sollte in Manifest exportiert werden, um ihn von ADB oder anderen Apps aus zu starten.
@IrfanLatif hier ist die cmd-Ausgabe:$ adb shell am kill flar2.homebutton $ adb shell appops set flar2.homebutton BIND_ACCESSIBILITY_SERVICE allow Error: Unknown operation string: BIND_ACCESSIBILITY_SERVICE $ adb shell settings put secure enabled_accessibility_services flar2.homebutton/a.i $ adb shell am startservice -n flar2.homebutton/a.i Starting service: Intent { cmp=flar2.homebutton/a.i } Error: Requires permission android.permission.BIND_ACCESSIBILITY_SERVICE

Antworten (1)

Ich glaube, ich habe es herausgefunden. Ich verwende Voice Access als Beispiel-App.

adb shell am startservice com.android.cts.apps.accessibility.voiceaccess/com.google.android.apps.accessibility.voiceaccess.JustSpeakService

Nächste

adb shell settings put secure enabled_accessibility_services com.android.cts.apps.accessibility.voiceaccess/com.google.android.apps.accessibility.voiceaccess.JustSpeakService

Dann

adb shell settings put secure accessibility_enabled 1

Löschen Sie abschließend die Auslese-App, damit die Barrierefreiheitsfunktionen nicht überschrieben werden

adb shell pm uninstall -k --user 0 com.lge.voicecommand

Ich denke nicht, dass es danach irgendwelche Fehler geben sollte, hinterlasse einen Kommentar, wenn es welche gibt.

Wenn Sie einen anderen Barrierefreiheitsdienst aktivieren möchten, schreiben Sie einfach Schritt 2 in eine Liste aller Dienste um, mit einem Doppelpunkt dazwischen. Wie soadb shell settings put secure enabled_accessibility_services pkg1/serv1:pkg2/serv2