Gracias a @Firelord por ayudarme generosamente cuando me perdí. La descripción del problema y las notas sobre las soluciones se han hecho utilizando sus comentarios como referencia.
Problema:
Esto se debe a que después de haber emitido adb shell
, estás en el shell del sistema de Android y ya no puedes usar adb pull
, ya que el binario de ADB que invocaste existe en tu PC de desarrollo, no en el dispositivo conectado en sí. El dispositivo actúa como un servidor con la PC de desarrollo como cliente. El cliente emite los comandos y el servidor responde a ellos. El servidor en sí no puede emitir el comando.
ADB en el dispositivo en sí también puede actuar como cliente, con 2 advertencias:
- ADB de un dispositivo al mismo dispositivo necesita que ADB esté funcionando en modo inalámbrico y de bucle.
- El otro dispositivo, supuestamente el "servidor", debe estar inicialmente conectado a través de OTG al dispositivo cliente (luego dispositivo cliente y servidor) de ADB para que ADB pueda reiniciarse allí en modo inalámbrico.
TL;DR
Si estás ejecutando adb
desde el directorio platform-tools
de la instalación de Android SDK, intenta emitir ./adb pull
en lugar de adb pull
en caso de que estés en Linux, y, sospecho, similar con Windows. ADB probablemente no está en tu variable PATH. La terminal recuerda el historial de carpetas 1 nivel más abajo, y la carpeta local por defecto no está incluida en la variable PATH.
FUENTE: Esta pregunta en StackOverflow.
Resolución:
Lo que debes hacer después del comando chmod
es introducir exit
, seguido de adb pull...
. El comando exit
debería sacarte del shell del sistema de vuelta al terminal o prompt que estabas utilizando adb en tu PC, desde donde puedes usar adb pull
de forma segura.
Resolución Alternativa:
También podrías usar cp
en lugar de adb pull
después de chmod
para copiar el archivo de base de datos. Tienen el mismo patrón de uso, y cp
definitivamente está disponible en la sesión del shell.
Notas:
-
Tengo un problema molesto con la forma en que utilizas adb pull
para copiar archivos de tu /data/data
a tu tarjeta SD, lo cual podría hacerse fácilmente con un explorador con acceso root o cp
en una sesión del shell.
-
Asegúrate de haber emitido adb root
antes de este conjunto completo de comandos bajo Resolución: para que el daemon de adb se ejecute como root y pueda acceder a /data
y sus subdirectorios.
PD:
De acuerdo al comentario de @Firelord, adb root
solo funcionará si has establecido la propiedad ro.secure
en tu build.prop
en 0
en lugar de 1
, donde 1
es usualmente el valor predeterminado con la excepción de algunas ROMs personalizadas habilitadas para debug. En ese caso, elige la alternativa de cp
.
- Personalmente he enfrentado este problema y he evitado mezclar sesiones de ADB y shell desde entonces.
1 votos
¿No puedes exportarlos desde la aplicación de Contactos?