Разрешение INJECT_EVENTS для корневого устройства - PullRequest
5 голосов
/ 15 марта 2012

Я пытаюсь реализовать своего рода vnc (на основе droid-vnc-сервера oNaiPs) в моем приложении.Так как события мыши не работают с моим устройством, я пытаюсь сделать следующее: отправить дейтаграммы с собственного сервера кадрового буфера vnc, перехватить их в Service и использовать Instrumentation sendPointerSync.И это где разрешение необходимо.Я слышал, что вы можете получить все необходимые разрешения, если вы установите .apk на /system/app с помощью Root Exploter, chmod и reset, но в моем случае это не сработало, и я все еще получаю SecurityException.Я также пытался вручную отредактировать файл /data/system/packages.xml.

Есть ли другой способ получить разрешение (может быть, каким-то образом снизить его уровень безопасности? Так как мне все равно нужно это приложение для работы на моем устройстве в любом случае)или, возможно, другой способ сделать то, что я пытаюсь сделать?

Спасибо!

Ответы [ 3 ]

3 голосов
/ 30 января 2013

Тогда вы, вероятно, недостаточно искали.Да, жаль, что Android не предлагает его по умолчанию, но это не значит, что это невозможно.

Единственный улов - вам нужен root.Таким образом, если у вас есть root, вы можете изменить разрешение файлов / dev / input / eventX на запись.

Если файлы доступны для записи, вы можете внедрить пользовательские события клавиш и касаний в любое приложение, написавнепосредственно к узлам входных событий.

Я написал небольшую библиотеку, доступную здесь с открытым исходным кодом: http://code.google.com/p/android-event-injector/

Это делает только это: автоматический chmod для установки разрешений для входных разработчикови использует JNI для взаимодействия с собственными файлами.Затем он предоставляет простой Java-интерфейс для использования в вашем проекте Android.

2 голосов
/ 18 марта 2012

Итак, после нескольких дней поисков и поисков я не нашел способа сделать это (ну, за исключением явно невозможных вещей, таких как создание собственной версии android для получения сигнатуры системы), и разработал своего рода обходной путь. : сервер vnc (взятый из droid-vnc-server v.0.72) открывает сокет и записывает в него все события указателя (тип и координаты); затем есть служба, которая читает из этого сокета и внедряет события с помощью нескольких команд sendevent (возможно, я мог бы сделать это и из нативного кода, но, поскольку я сосу на c ++, я решил не беспокоиться :)).

Это прекрасно работает (удивительно!), Но я не полностью удовлетворен, потому что на разных устройствах есть разные константы (например, типы событий, минимальные и максимальные значения и т. Д.), И мне придется либо разобрать их из getevent -p или указать файл конфигурации.

0 голосов
/ 15 марта 2012

Добавили ли вы разрешение на использование INJECT_EVENTS в свой манифест.

...