4 votes

Accorder des autorisations à un service lancé avec ADB ?

Je cherche à obtenir un service d'accessibilité simple, comme Voice Access de Google ou Button Mapper, pour fonctionner sur un LG Exalt LTE, exécutant une version allégée de Marshmallow. Le système manque de nombreux composants d'interface utilisateur, y compris les paramètres d'accessibilité système, généralement utilisés pour activer ou désactiver les services d'accessibilité. J'aimerais savoir s'il est possible de compenser le manque d'interface utilisateur avec ADB. J'ai essayé ce qui suit :

a été accordé adb shell pm grant package.name.here android.permission.WRITE_SECURE_SETTINGS

J'ai même donné android.permission.WRITE_SECURE_SETTINGS

même s'il n'est pas déclaré dans la liste des autorisations en haut du manifeste. J'obtiens cette erreur :

Operation not allowed: java.lang.SecurityException: Package package.name.here has not requested permission android.permission.BIND_ACCESSIBILITY_SERVICE

Cependant, il est déclaré dans le manifeste ici :

et c'est là que le problème se pose. Il s'agit du service lui-même, et il requiert une autorisation qui ne concerne pas tout le package, BIND_ACCESSIBILITY_SERVICE. Si je le lance avec ADB de cette manière adb shell am startservice -n package.name.here/a.i

Je reçois une erreur Error: Requires permission android.permission.BIND_ACCESSIBILITY_SERVICE

même si j'ai déjà accordé l'autorisation au package. J'ai même essayé adb shell settings put secure enabled_accessibility_services package.name.here/.a.i, mais je reçois toujours la même erreur.

En conclusion :

Comment puis-je démarrer un service et accorder des autorisations à ce service avec ADB? Pour être clair. Je sais déjà que je peux utiliser adb shell pm grant pour accorder une autorisation à l'ensemble du package, mais dans ce cas, il s'agit d'une autorisation qui n'est pas requise par l'ensemble du package, mais qui est déclarée dans un composant spécifique et je suis perdu quant à la façon de lancer le composant avec les autorisations requises via ADB.

0 votes

Évidemment, j'ai utilisé le véritable nom du package à la place de package.name.here... lol

0 votes

BIND_ACCESSIBILITY_SERVICE est une autorisation avec un niveau de protection de signature, ce qui signifie qu'elle ne peut pas être accordée à l'aide de pm comme les autorisations avec un niveau de protection dangereux. Mais elle peut être accordée aux packages qui la demandent en utilisant: appops set BIND_ACCESSIBILITY_SERVICE allow. Si seul un composant (service) la demande, ce que vous avez mentionné devrait fonctionner: settings put secure enabled_accessibility_services /:/:.... C'est ce qui se passe lorsque vous autorisez des applications à partir des paramètres de l'interface graphique.

0 votes

Essayez de tuer le processus de l'application après avoir accordé la permission. De plus, à ma connaissance, le service doit être exporté dans le Manifest pour le lancer à partir d'ADB ou par d'autres applications.

2voto

Exosylver Points 36

Je crois avoir compris. Je vais utiliser Voice Access comme exemple d'application.

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

Suivant

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

Ensuite

adb shell settings put secure accessibility_enabled 1

Enfin, supprimez l'application de lecture des messages, pour éviter que les fonctionnalités d'accessibilité soient écrasées

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

Je ne pense pas qu'il devrait y avoir d'erreurs après cela, laissez un commentaire s'il y en a néanmoins.

2 votes

Si vous souhaitez activer un autre service d'accessibilité, il vous suffit de réécrire l'étape 2 pour une liste de tous les services, avec un deux-points entre eux. Comme ceci adb shell settings put secure enabled_accessibility_services pkg1/serv1:pkg2/serv2

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X