Error al ejecutar el comando adb mediante programación
Estoy tratando de ejecutar comandos adb mediante programación
Aquí está mi código:
- ¿Cómo conceder permiso para la aplicación que se descarga desde la tienda de juegos?
- No se pudo conectar a tcp: 5037: no se puede conectar a 127.0.0.1:5037: No se pudo establecer conexión porque la máquina de destino lo rechazó activamente. (10061)
- ¿Cómo puedo usar adb para desinstalar un APK de varios dispositivos conectados?
- Problemas con el script wifi de Android
- ¿Cuál es la herramienta Android de la caja ADB de "dumpsys" y cuáles son sus beneficios?
File f = new File(Environment.getExternalStorageDirectory(), "screen" + System.currentTimeMillis() + ".png"); new ExecuteCommand(MainActivity.this).execute("adb shell screencap -p " + Environment.getExternalStorageDirectory().getPath() + "/" + "screen" + System.currentTimeMillis() + ".png");
ExecuteCommand Clase:
public class ExecuteCommand extends AsyncTask<String, String, String> { Context mContext=null; public ExecuteCommand(Context _ctx) { mContext =_ctx; } ProgressDialog progressdailog; @Override protected void onPreExecute() { super.onPreExecute(); progressdailog = ProgressDialog.show(mContext, "Executing", "Please Wait"); } @Override protected String doInBackground(String... params) { Process p; StringBuffer output = new StringBuffer(); try { p = Runtime.getRuntime().exec(params[0]); BufferedReader reader = new BufferedReader( new InputStreamReader(p.getInputStream())); String line = ""; while ((line = reader.readLine()) != null) { output.append(line + "\n"); p.waitFor(); } } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } String response = output.toString(); return response; } @Override protected void onPostExecute(String result) { super.onPostExecute(result); progressdailog.dismiss(); Log.e("Output", result); } }
Problema en registros:
07-31 15: 26: 31.832 18716-18716 / com.example E / Output: no se puede enlazar 'tcp: 5038' * daemon no se está ejecutando. Comenzando ahora en el puerto 5038 *
No puedo tomar una captura de pantalla, pero si ejecuté el mismo comando en el símbolo del sistema, entonces esto está funcionando bien.
Pero si ejecuto
new ExecuteCommand(MainActivity.this).execute("ls");
Esto funciona bien. Por favor, ayúdame a encontrar que donde está el problema en el mando.
- Android 2.3: Sistema de archivos de sólo lectura pegado
- Cambiar el usuario y el grupo de archivos de la aplicación de Android para replicar el problema que el usuario está teniendo
- interpretando dumpsys cpuinfo
- ADB Shell que da el modo incorrecto al ejecutar chmod (bajo su)
- No se puede usar Runtime.exec () para ejecutar el comando shell "echo" en el código Java de Android
- Controla el LED Android desde el shell
- ¿Cómo copiar y editar archivos en Android shell?
- Cómo hacer una línea para el bucle en el shell de Android
adb shell
se utiliza cuando se está ejecutando el comando en su PC tratando de acceder al dispositivo. Pero cuando se está ejecutando el comando en el dispositivo en sí, no es necesario adb shell
Esto será limpio:
new ExecuteCommand(MainActivity.this).execute("screencap -p " + f);
Ha habido varias discusiones similares sobre esto, tanto en este sitio web como en android-developers , pero el TL: DR es que realmente no puedes ejecutar todos los comandos de shell desde el dispositivo. La mayoría de ellos necesitan permisos que sólo se conceden a las aplicaciones del sistema. El uso de los comandos shell pm
por ejemplo necesita los diversos permisos de paquete, la mayoría de los cuales son sólo de sistema. Puedes consultar la lista de permisos aquí .
Tendrá que root el dispositivo, o buscar un método alternativo de lograr lo que desea.
Supongo que hay algún problema con los permisos.
Utilice el nuevo apis de MediaProjection para hacerlo.
Consulte https://github.com/googlesamples/android-ScreenCapture para obtener el código fuente.
- Tamaños de vista previa de cámara compatibles para los teléfonos Android populares
- Uso de IntelliJ con complemento de Android, en lugar de usar Android Studio