Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Android INJECT_EVENTS permiso

Estoy tratando de crear una aplicación que tendrá un servicio que se ejecuta en segundo plano que será capaz de inyectar eventos de pantalla táctil en cualquier actividad que se está ejecutando. Puedo inyectar eventos en una actividad que es parte de mi aplicación llamando a Instrumentation.sendPointerSync(motionEvent); Sin embargo, si intento hacer esto sin una actividad de mi aplicación en ejecución, obtengo un error de permiso diciendo que no tengo el permiso INJECT_EVENTS. He añadido este permiso a mi manifiesto de la siguiente manera: <uses-permission android:name="android.permission.INJECT_EVENTS"></uses-permission> embargo, sigue emitiendo la misma excepción de permiso. Después de un poco de búsqueda, he recibido la respuesta de que para recibir el permiso INJECT_EVENTS, tu aplicación debe estar firmada por la misma firma con la que está firmado el sistema. No estoy claro lo que significa exactamente esto. Voy a tener que encontrar una costumbre ROM construir y firmar con la misma firma que la aplicación está firmada con. A continuación, instalar la ROM personalizada en mi dispositivo, a continuación, instalar mi aplicación y voy a ser capaz de inyectar los eventos táctiles correctamente? Si este es el caso, es mejor que comience con una ROM personalizada que ya está puesta juntos, como una de esta página o es una situación en la que voy a necesitar para agarrar una copia git del proyecto android y construir todo el asunto Myslef Y de cualquier manera alguien sabe de un lugar que podría señalarme que me llevaría trabajando en la dirección correcta para que esto suceda?

  • Algunas preguntas sobre el permiso "USE_CREDENTIALS"
  • BroadcastReceiver permiso para el shell de adb
  • ¿Leer contactos sin permiso?
  • El archivo existe y el directorio IS, pero listFiles () devuelve null
  • Los teléfonos de Redmi no piden permisos de SMS y por lo tanto no leen sms
  • ¿Cómo comprobar si se da el permiso "android.permission.PACKAGE_USAGE_STATS"?
  • Android 6.0 necesita reiniciar después de conceder permiso de usuario en tiempo de ejecución
  • Vista previa de Android M: la actividad se recrea después de la concesión del permiso
  • 6 Solutions collect form web for “Android INJECT_EVENTS permiso”

    En realidad, esto es bastante simple en un dispositivo con raíces. Creo que cualquier aplicación que se está ejecutando / sistema obtendrá acceso a los permisos que requiere. Así que simplemente instale manualmente su aplicación en / system (como se describe aquí http://androidforums.com/droid-all-things-root/64603-installing-apk-system-app-directory.html ):

    Ejecute los siguientes comandos en el emulador de terminal para volver a montar el directorio / system como lectura / escritura e instalar la aplicación en el directorio / system / app desde el SDCARD:

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

    Si prefiere usar adb desde su computadora, ejecute estos comandos:

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

    Varios usuarios han utilizado root explorer desde el mercado de Google para simplificar este proceso.


    Como alternativa, compruebe esto: Cómo compilar la aplicación de Android con permisos del sistema

    Para inyectar eventos en un proceso separado , se requiere que ambos instalen su aplicación en / system / app y firmen su APK con el certificado del sistema.

    1. Añada permiso al manifiesto de la aplicación

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

    2. Firme su APK con el certificado del sistema

    Esto requiere que usted tenga la fuente de AOSP con el fin de construir un almacén de claves con las claves de google utilizadas para construir el sistema que se ejecuta en el teléfono.

    Teniendo en cuenta que tiene un directorio AOSP, @Eli hace un excelente trabajo de mostrar cómo construir el almacén de claves utilizando un bonito script llamado 'keytool-importkeypair'

    Utilizando IntelliJ como ejemplo, elija Generar firmado APK .. en el menú Generar. Busque el almacén de claves creado anteriormente, escriba la contraseña dada (por ejemplo, android), dé la clave la misma contraseña, si lo desea. Tenga en cuenta que el apk firmado se escribe en la raíz del proyecto (!) No en la ubicación típica (./out/production//).

    3. Instale en / system / app /

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

    La 'instalación' ocurre automáticamente. Sin embargo, tenga en cuenta que, a diferencia del proceso normal de instalación de aplicaciones, las bibliotecas nativas de su APK no se copian en / system / lib /. Tendrá que hacerlo manualmente, si está utilizando el NDK para crear y llamar a sus propias bibliotecas nativas.

    Uso de eventos táctiles:

    1. Firmar la aplicación con la misma firma que la ROM se firma con
    2. Descargar keytool-importkeypair para hacer esto
    3. Buscar platform.pk8 + platform.x509.pem: {Fuente de Android} / build / target / product / security
    4. A continuación, genere un certificado:

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

    5. Ahora exporta tu aplicación de Eclipse y firma con el nuevo certificado que generaste.

    6. Construir ROM, flash al dispositivo, instalar la aplicación

    Consulta http://code.google.com/p/android-event-injector/

    En caso de que si alguien está buscando una solución para evitar este permiso de nivel de firma y desea crear eventos de toque.

    Miré la fuente hasta el nivel de C + + donde se comprueba si se permite a la aplicación crear eventos de toque o no. La siguiente es la función que realmente comprueba si se debe permitir o no la aplicación:

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

    Así que la función devuelve true del ID de usuario de la aplicación se establece en 0.

    Ahora he cambiado el uid si mi aplicación a 0 mediante la edición de la filee /data/system/packages.xml . Este archivo contiene el uid asignado a cada aplicación. Edite este archivo estableciendo el atributo userId correspondiente a su aplicación a 0.

    Ahora todo lo que necesitas es forzar cerrar la aplicación y reiniciarla de nuevo. Podrá omitir el permiso INJECT_EVENTS .

    A partir de la API 18 existe la clase UiAutomation, que no está vinculada a los permisos de usuario.

    Para obtener más información, consulte http://developer.android.com/reference/android/app/Instrumentation.html#getUiAutomation ()

    Muy bien, tengo esto por fin. Créanme cuando digo esto, esta es probablemente la peor solución si incluso se puede llamar así. Esto requiere root y desactivará la verificación de firma de todos los paquetes, en todo el sistema. Esto puede exponerle a un montón de ataques donde una aplicación peligrosa reemplaza a una normal.

    De todos modos, con eso fuera del camino aquí vamos:

    1. Instalar Xposed
    2. Instalar el módulo XInstaller para Xposed
    3. En las opciones de XInstaller, vaya al menú "Instalaciones" y marque la casilla que dice "Comprobación de firmas" y "Verificación de aplicaciones"

    Usted debe ser bueno para ir después de un reinicio. Su aplicación ni siquiera tendrá que ser instalada como sistema, ahora se puede ejecutar en el espacio de usuario que supongo facilita el desarrollo ya que no necesita copiar a / system / app más

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.