Разрешение Android INJECT_EVENTS

Я пытаюсь создать приложение, в котором будет работать служба в фоновом режиме, которая будет способна вводить события сенсорного экрана в любую деятельность. Я могу вставлять события в Activity, который является частью моего приложения, вызывая Instrumentation.sendPointerSync(motionEvent); Однако, если я попытаюсь сделать это без активности из моего приложения, я получу ошибку разрешения, заявив, что у меня нет разрешения INJECT_EVENTS. Я добавил это разрешение в свой манифест следующим образом: <uses-permission android:name="android.permission.INJECT_EVENTS"></uses-permission> Он все еще бросает ту же ошибку исключения. После небольшого поиска я получил ответ, что для получения разрешения INJECT_EVENTS ваше приложение должно быть подписано той же подписью, с которой подписана система. Я не совсем понимаю, что именно это означает. Мне нужно будет найти пользовательский rom, создав его и подписать с той же подписью, с которой подписано приложение. Затем установите пользовательский ролик на моем устройстве, затем установите мое приложение, и я смогу правильно ввести события касания? Если это так, мне лучше начать с пользовательского романа, который уже собран, например, с этой страницы. Или это ситуация, в которой я буду нуждаться захватить git копию проекта android и построить всю вещь myslef? И в любом случае кто-нибудь знает о месте, где вы могли бы указать мне, что бы заставить меня работать в правильном направлении, чтобы это произошло?

Ответ 1

На самом деле, это довольно просто на корневом устройстве. Я думаю, что любое приложение, которое работает/система, получит доступ к любым разрешениям, которые требуются. Поэтому просто вручную установите приложение в /system (как описано здесь http://androidforums.com/droid-all-things-root/64603-installing-apk-system-app-directory.html):

Выполните следующие команды эмулятора терминала, чтобы переустановить каталог /system как чтение/запись и установить приложение в каталог /system/app из SDCARD:

su
mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system
cp /sdcard/APP.apk /system/app

Если вы предпочитаете использовать adb с вашего компьютера, выполните следующие команды:

adb remount
adb shell cp /sdcard/APP.apk /system/app

Несколько пользователей использовали root-проводник с рынка Google, чтобы упростить этот процесс.


В качестве альтернативы, проверьте это: Как скомпилировать Android-приложение с системными правами

Ответ 2

Чтобы вводить события в отдельный процесс, требуется установить ваше приложение в /system/app и подписать ваш APK с системным сертификатом.

1. Добавить разрешение в манифест приложения

<uses-permission android:name="android.permission.INJECT_EVENTS"/>

2. Подпишите APK с системным сертификатом

Для этого требуется, чтобы у вас был источник AOSP, чтобы создать хранилище ключей с ключами Google, используемыми для сборки системы, запущенной на телефоне.

Учитывая, что у вас есть каталог AOSP, @Eli отлично справляется с тем, как построить хранилище ключей с помощью приятного script, называемого keytool-importkeypair

Используя IntelliJ в качестве примера, выберите Generate Signed APK.. из меню Build. Найдите созданное выше хранилище ключей, введите пароль (например, андроид), при необходимости введите ключ в тот же пароль. Обратите внимание, что подписанный apk записывается в корневой каталог проекта (!) Не в обычное место (./out/production//).

3. Установите в /system/app/

adb root
adb remount
adb push MyApp.apk /system/app

"Установка" происходит автоматически. Обратите внимание, однако, что в отличие от обычного процесса установки приложения, любые собственные библиотеки вашего APK не копируются в /system/lib/. Вам нужно будет сделать это вручную, если вы используете NDK для создания и вызова собственных собственных библиотек.

Ответ 3

Использование сенсорных событий:

  • Подпишите приложение с той же подписью, что ПЗУ подписано с помощью
  • Загрузите keytool-importkeypair, чтобы сделать это.
  • Найдите платформу .pk8 + platform.x509.pem: {Android-источник}/build/target/product/security
  • Затем создайте сертификат:

    ./keytool-importkeypair -k google_certificate.keystore -p android -pk8 platform.pk8 -cert platform.x509.pem -alias platform

  • Теперь экспортируйте приложение из Eclipse и подпишите с новым созданным вами сертификатом

  • Сборка ROM, flash-устройство, установка приложения

Отъезд http://code.google.com/p/android-event-injector/

Ответ 5

В случае, если кто-либо ищет решение обходить это разрешение уровня сигнатуры и хочет создавать события касания.

Я посмотрел на источник до уровня С++, где он действительно проверял, разрешать ли приложение создавать события касания или нет. Ниже приведена функция, которая фактически проверяет, разрешено ли приложение или нет:

bool InputDispatcher::hasInjectionPermission(int32_t injectorPid, int32_t injectorUid) {
return injectorUid == 0
        || mPolicy->checkInjectEventsPermissionNonReentrant(injectorPid, injectorUid);
}

Таким образом, функция возвращает true для идентификатора пользователя приложения, установленного на 0.

Теперь я изменил uid, если мое приложение до 0, отредактировав файл /data/system/packages.xml. Этот файл содержит uid, назначенный каждому приложению. Отредактируйте этот файл, установив для атрибута userId, соответствующего вашему приложению, 0.

Теперь вам нужно только закрыть приложение и снова перезапустить. Вы сможете обойти разрешение INJECT_EVENTS.

Ответ 6

У меня тоже возникла такая же проблема и раньше. Ниже описан вопрос KEY_INJECT_EVENT_PERMISSION.

Шаг 1. Вам необходимо получить подпись (для меня это имя файла signapk) вашего ПЗУ устройства.

Шаг 2: Затем вам нужно получить файлы platform.pk8 и platform.x509.pem.

Шаг 3. Создайте apk отладки вашего приложения.

Шаг 4. Поместите все перечисленные выше файлы в одну папку.

Шаг 5. Получив все вышеперечисленные файлы, выполните команду, указанную ниже.

java -jar signapk.jar platform.x509.pem platform.pk8 your_debug_app.apk customname.apk

Шаг 6: После этого вы можете получить подписанный apk (customname.apk) в той же папке. Как только вы это получите, выполните следующую команду.

adb install -r app-release-signed.apk

Шаг 7. Теперь Inject_Event_Permisson будет включен.

Обратитесь по ссылке ниже:

https://steveandro.blogspot.com/2019/09/key-injection-android.html

Ответ 7

Хорошо, я получил это наконец. Поверьте мне, когда я это скажу, это, вероятно, самое худшее решение, если вы даже можете это назвать. Для этого требуется root, а отключит проверку подписи всех пакетов в системе. Это может привести вас к кучке атак, где опасное приложение заменяет обычный.

В любом случае, с этой целью мы идем:

  • Установить Xposed
  • Установить модуль XInstaller для Xposed
  • В параметрах XInstaller перейдите в меню под названием "Установки" и установите флажок "Проверка подписей" и "Проверка приложений"

Вы должны хорошо после перезагрузки. Ваше приложение даже не нужно будет устанавливать в качестве системы, теперь оно может быть запущено в пользовательском пространстве, которое, я полагаю, упрощает разработку, поскольку вам больше не нужно копировать в/system/app