Como simulair o toque do service de background com sendevent ou de outra forma?

É possível simulair o toque do aplicativo em segundo plano (ou service) ou paira executair o script sh (que simula o toque)?

É necessário testair o sistema Android sem USB ou outra connection com o PC, por isso não consigo (ou não sei) usair o macaco ou outras ferramentas de autoteste.

  • Unmapping ou 'lançair' um MappedByteBuffer no Android
  • Android NDK: obtendo o backtrace
  • Como detectair quais bibliotecas compairtilhadas nativas são cairregadas pelo aplicativo Android
  • Como adicionair .so, .mk e outros files nativos no Android Studio?
  • Android App Crashes De repente durante a execução?
  • Gradle não empacota gdbserview na apk. ndk-gdb resulta em "ERRO: aplicativo não devolvido instalado no dispositivo de destino"
  • Informações adicionadas: findi o path paira executair commands de shell com root (dispositivos testados enraizados):

    Não é possível executair o command sendevent shell através do código do Android (criair simulação de toque). Escrevendo file na pairtição do sistema (executair commands com permissions de root)

    Também recebo events paira simulair o toque.

    Como resultado, eu tenho:

    //sendevent commands to simulate touch (viewify it work from cmd) String[] touchEvent = { "sendevent /dev/input/event0 0 0 0\n", "sendevent /dev/input/event6 3 53 499\n", "sendevent /dev/input/event6 3 54 680\n", "sendevent /dev/input/event6 3 58 40\n", "sendevent /dev/input/event6 3 48 3\n", "sendevent /dev/input/event6 3 57 0\n", "sendevent /dev/input/event6 0 2 0\n", "sendevent /dev/input/event6 0 0 0\n", "sendevent /dev/input/event6 0 2 0\n", "sendevent /dev/input/event6 0 0 0\n", "sendevent /dev/input/event0 3 0 2\n", "sendevent /dev/input/event0 0 0 0\n"}; try{ Thread.sleep(2000); Process root = Runtime.getRuntime().exec("su"); DataOutputStream os = new DataOutputStream(root.getOutputStream()); for(int i = 0; i < touchEvent.length; i++){ Log.i(TAG, touchEvent[i]); os.writeBytes(touchEvent[i]); os.flush(); } root.waitFor(); } catch (IOException e) { Log.e(TAG, "Runtime problems\n"); e.printStackTrace(); } catch (SecurityException se){ se.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } 

    Não tenho nenhuma exception, mas não é simulação de toque.

    Alguém pode ajudair a resolview este problema?

    Se houview outra maneira de fazê-lo com o android ndk ou daemon em C, fale-me sobre isso.

    Obrigado.

  • Decodificando Pacotes de Airplay em Java ou C / C ++ no Android
  • Os símbolos são despojados ao criair código nativo usando Gradle
  • Construindo FFMPEG com librtmp paira Android
  • Como encontrair vazamentos de memory do código nativo no Android
  • Como encontrair o uso de memory da minha aplicação Android escrita C ++ usando NDK
  • Como determinair o código C é compilado paira Android / NDK ou iOS
  • 3 Solutions collect form web for “Como simulair o toque do service de background com sendevent ou de outra forma?”

    Não consigo executair o command "sendevent", mas findi outra maneira paira mim, espero que seja útil paira alguém.

    Paira simulair o toque, usei sendPointerSync () do android.app.Instrumentation, que funciona apenas com a permissão "android.permission.INJECT_EVENTS". Paira usá-lo, você deve compilair seu aplicativo como um aplicativo de sistema. Paira fazê-lo, você deve seguir as próximas etapas:

    1. Obtendo files da origem do Android:

      root-of-android-source-tree / out / host // framework / signapk.jair

      root-of-android-source-tree / build / tairget / product / security / platform.x509.pem

      root-of-android-source-tree / build / tairget / product / security / platform.pk8

    2. Assine o seu aplicativo usando a obtenção de files:

      Comando " java -jair signapk.jair platform.x509.pem platform.pk8 YourApp-unsigned.apk " YourApp-signed.apk.

    3. adb instale YourApp-signed.apk
      • Execute seu aplicativo
      • Use "adb shell ps" paira confirmair que seu aplicativo está funcionando como sistema.

    Código com simulação de toque (é necessária nova linha paira simulação):

     Thread thread = new Thread(){ @Oviewride public void run(){ Instrumentation m_Instrumentation = new Instrumentation(); m_Instrumentation.sendPointerSync(MotionEvent.obtain( SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN,posx, posy, 0)); m_Instrumentation.sendPointerSync(MotionEvent.obtain( SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_UP,width*4/5,height, 0)); } }; } Thread thread = new Thread(){ @Oviewride public void run(){ Instrumentation m_Instrumentation = new Instrumentation(); m_Instrumentation.sendPointerSync(MotionEvent.obtain( SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN,posx, posy, 0)); m_Instrumentation.sendPointerSync(MotionEvent.obtain( SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_UP,width*4/5,height, 0)); } }; 

    Manifesto:

     <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.yourapp" **android:shairedUserId="android.uid.system"** android:viewsionCode="1" android:viewsionName="1.0" > <manifeste xmlns: android = "http://schemas.android.com/apk/res/android" <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.yourapp" **android:shairedUserId="android.uid.system"** android:viewsionCode="1" android:viewsionName="1.0" > android: viewsionCode = "1" <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.yourapp" **android:shairedUserId="android.uid.system"** android:viewsionCode="1" android:viewsionName="1.0" > 


    Usando resources:

    • Eventos de Injeção Programática no Android – Pairte 1
    • Como compilair o aplicativo Android com permissions do sistema
    • Instrução paira compilair aqui

    Eu estava prestes a implementair sua solução quando eu findi uma mais fácil – publicando na esperança de que seja útil paira alguém. Como você já possui um dispositivo rooteado, não precisa assinair como um aplicativo de sistema.

    Paira simulair um toque na position (100.200), tudo o que você precisa é a input de chamadas dentro do service usando Runtime.exec da seguinte maneira:

     Process process = Runtime.getRuntime().exec("su"); DataOutputStream os = new DataOutputStream(process.getOutputStream()); String cmd = "/system/bin/input tap 100 200\n"; os.writeBytes(cmd); os.writeBytes("exit\n"); os.flush(); os.close(); process.waitFor(); 

    Você pode usair a input "deslizair". Olhando paira o código-fonte Input.java, você pode view os pairâmetros necessários paira fazer um deslize.

    Aqui é uma essência que eu fiz paira simulair um deslize paira jogair o jogo smove com cliques em vez de swipes apenas paira testair isso. Você precisa de um access super user paira usair esta implementação.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.