9 votos

Ejecutar el comando adb dentro del emulador de terminal o programáticamente sin ser root

¿Existe alguna manera de ejecutar el comando adb backup en el dispositivo mismo sin usar una computadora?

Por supuesto, cuando lo intento, adb se queja de que el daemon no está iniciado y falla al encontrar un dispositivo.

u0_a192@klimtwifi:/ $ adb connect localhost:9999
* daemon not running. starting it now on port 5038 *
* daemon started successfully *
unable to connect to localhost:9999:9999
u0_a192@klimtwifi:/ $ adb connect localhost:5038
connected to localhost:5038
u0_a192@klimtwifi:/ $ adb shell
error device not found
u0_a192@klimtwifi:/ $

11voto

Firelord Puntos 161

Dirección Revisión 4

Todavía estás haciendo las cosas incorrectamente a pesar de que mencioné en revisión 1 de mi respuesta que necesitarías adb en la PC una vez y una sola vez siempre y cuando no haya reiniciado o deshabilitado la depuración por USB.

Respecto a tu intento:

u0_a192@klimtwifi:/ $ adb connect localhost:9999  
* proceso no en ejecución. iniciándolo ahora en el puerto 5038 *
* proceso iniciado con éxito *
imposible conectar a localhost:9999:9999  
u0_a192@klimtwifi:/ $ adb connect localhost:5038
conectado a localhost:5038
u0_a192@klimtwifi:/ $ adb shell
error dispositivo no encontrado

adb connect localhost:9999 no funcionó porque no hiciste adb tcpip 9999 desde la PC. Dicho comando establecería la propiedad service.adb.tcp.port en el puerto especificado que a su vez es leído por adbd cuando se inicia/reinicia y se utiliza para escuchar conexiones.

adb connect localhost:5038 no te benefició simplemente porque o te confundiste o no entendiste los conceptos básicos que mencioné en la revisión 1 de mi respuesta.

Primero, aclara cualquier confusión. Solo porque se menciona el término daemon no significa que sea adbd. Un daemon puede ser para muchas cosas. Una descripción del protocolo entre clientes y servidores de adb está anotada aquí. Un buen entendimiento de cómo ocurre la comunicación entre cliente-servidor-dispositivo/emulador de adb está anotado aquí. Se te solicita leer todos los documentos para comprender cómo funciona adb.

Ahora, aquí están los detalles para tu intento: Cuando hiciste adb connect localhost:9999, en realidad instruiste al cliente de adb en tu dispositivo Android anfitrión que se conectara a un esclavo que ejecuta adbd escuchando en 9999. Tu cliente de adb intentó buscar el servidor adb en tu dispositivo Android anfitrión. Como no encontró el servidor en ejecución, inició un servidor y asoció el servidor al puerto 5038. En ninguna parte instruiste a adbd para que escuchara en el puerto 9999 ni siquiera en 5038. Puedes confirmar esto con acceso de root. Haz su -c 'netstat -natup' y encontrarás que adb, no adbd, está escuchando en el puerto 5038 después de la ejecución de tu comando.

Debería quedar claro ahora por qué se produjo el error al ejecutar adb shell.

Debo enfatizar que es inútil siquiera pensar en ejecutar comandos relacionados con el cliente de adb en un dispositivo sin acceso a la PC al menos una vez o sin acceso de root. Ya he mencionado el procedimiento con respecto a la PC en la revisión 1. Si tienes acceso de root y aún necesitas usar adb en el dispositivo, haz lo siguiente:

su 2000 -c 'setprop service.adb.tcp.port  PUERTO'   # eligir un puerto mayor a 1024.
su -c 'stop adbd && start adbd'                   # esto detendrá y reiniciará adbd. 
su -c adb connect localhost:PUERTO                       # ahora estarás conectado y se te pedirá aceptar la huella para autorizar la depuración por USB.

(Haz clic en una imagen para ampliarla)

IMG: IMG:


Edición de la Revisión 1

¿Buscas esto?

IMG:

Estás haciendo las cosas incorrectamente. Primero, un poco de conceptos básicos:

  • adb es un puente que ayuda a comunicarse con un esclavo (un dispositivo Android) desde un cliente en la máquina anfitriona (típicamente una PC) a través de un servidor que se ejecuta en la máquina anfitriona.
  • Un esclavo tiene un demonio llamado adbd que debe estar en funcionamiento para que el esclavo pueda comunicarse de vuelta.

Cuando intentas ejecutar un comando de adb que requiere un dispositivo Android para el resultado deseado, el servidor adb espera un esclavo conectado al anfitrión mediante USB. Dado que ningún dispositivo Android está conectado a tu dispositivo Android a través de USB, obtienes error: dispositivo no encontrado. Si conectas otro dispositivo Android a través de OTG y tienes la depuración USB activada allí, podrías ser capaz de ejecutar adb con éxito. Al menos yo pude hacerlo.

Un enfoque más sencillo es tener adbd escuchando en TCP también. En ese caso, puedes conectarte a localhost y hacer el trabajo. No hay forma de que un proceso con privilegios ordinarios en Android pueda reiniciar adbd para que escuche en TCP. La forma oficial en Android stock es hacer adb tcpip PUERTO desde la máquina anfitriona. En este caso, necesitarías una PC con adb configurado allí. Conecta el dispositivo a la PC y ejecuta desde la PC, el comando:

adb tcpip PUERTO   # PUERTO es el número de puerto en tu dispositivo para escuchar y establecer conexión en TCP. El puerto predeterminado es 5555. Elige un PUERTO mayor a 1024 

Ahora puedes desenchufar el dispositivo. Mientras no reinicies el dispositivo o deshabilites la depuración USB desde las opciones de desarrollador, adbd seguirá funcionando y escuchando conexiones en el PUERTO que has indicado.

No te preocupes por la seguridad. Aunque adbd recibiría conexiones desde la red local mediante Wi-Fi, no se puede conectar exitosamente a tu dispositivo a menos que autorices la depuración aceptando su huella digital.

De todas formas, en tu emulador de terminal, ejecuta

adb connect localhost:PUERTO

Se te pedirá aceptar una huella digital. Si sigues las instrucciones cuidadosamente, obtendrás la salida:

conectado a localhost:PUERTO

Ahora puedes ejecutar tu comando de respaldo. Pero honestamente, no está claro para mí qué estás tratando de lograr. Si solo el respaldo es el objetivo, entonces la app Helium podría ser de ayuda, aunque también requiere acceso de root o una PC con adb configurado.

En caso de que no lo sepas, no todas las aplicaciones pueden ser respaldadas mediante adb.

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X