Escribí un archivo por lotes de Windows que reemplaza los anuncios de la pantalla de bloqueo de Amazon con imágenes de usuario en kindle fire hd 7 " rooteado ", 2013 (kfsowi). Acabo de enterarme de que cometí un error con los comandos adb porque estaba ejecutando "adb insecure", por lo que estaba obteniendo su acceso sin escribirlo. en los comandos adb.
Lo que necesito: para ejecutar un archivo por lotes, necesito comandos adb shell su de una línea para extraer/empujar /data
en este dispositivo. (O podría usar adb -d shell su -c "mount -o remount rw, /data
en una línea seguida de tirar o empujar)
He arreglado un comando ls como este:
adb ls "/data/securedStorageLocation"
adb shell su -c "ls ./data/securedStorageLocation"
Ahora necesito lo mismo para tirar y empujar. El problema:
adb pull "/data/securedStorageLocation" "C:/destination"
remote object '/data/securedStorageLocation/' does not exist
Lo anterior sucede incluso si ejecuto por primera vez:adb -d shell su -c "mount -o remount rw, /data
¿Alguien puede decirme cómo hacer pull and push con adb shell y su?
EDITAR: adb root
el comando no gana root en este dispositivo
Bueno, tienes que hacer algunos comandos, ya que no creo que funcione en uno.
Necesitas hacer:
adb shell
su
cd /data/path/of/file
cp /data/path/of/file/copyme /data/local/tmp
chown shell.shell /data/local/tmp/copyme
exit
exit
adb pull /data/local/tmp/copyme /destination/copyme
Esto funciona para mí cada vez.
/data/local/tmp/copyme
finalmente (después de tirar)Gracias por esta discusión. Me llevó a una solución que funcionó lo suficientemente bien para mí mientras hacía una copia de seguridad de mi teléfono que no montará su ext4 interno, antes de hacer algo drástico al tratar de arreglarlo (aparentemente, esto necesita permisos de root).
Tenga en cuenta que adb shell
generalmente configura una terminal de texto (por lo que puede convertir caracteres de final de línea individuales a CRLF, manipulando datos binarios como imágenes de partición o archivos TAR). Si bien puede solucionar esto en las versiones Unix/Linux de adb (por ejemplo, agregar stty raw
a su comando shell) o usar algún adb más nuevo con exec-out
opción, en Windows todavía escribe CRLF en su salida. El buen truco es pasar datos a través de la codificación y decodificación base64 (los binarios están disponibles para Windows en masa). También tenga en cuenta que los errores o los mensajes detallados impresos stderr
en el shell terminan en el stdout
programa adb shell
en el sistema host, por lo que desea descartarlos después de la inevitable experimentación inicial.
Aquí va:
adb shell "su -c 'cat /dev/block/mmcblk0p25 | base64' 2>/dev/null" | base64 -d > p25
Windows puede programar fácilmente para cubrir todas las particiones (puede buscar la lista por ls -la /dev/block/
y/o por cat /proc/diskstats
o cat /proc/partitions
), por ejemplo:
for /L %P in (1,1,25) do ..\platform-tools\adb shell "su -c 'cat /dev/block/mmcblk0p%P | base64' 2>/dev/null" | base64 -d > s3-mmcblk0p%P.img
(Nota para usar %%P
en archivos por lotes CMD o %P
en shell interactivo).
No olvide que también hay mmcblk0boot[01]
particiones, y que el mmcblk0
conjunto contiene todas esas particiones en un envoltorio GPT, como cualquier otro disco duro o imitador de uno :)
Para estimar los tamaños de partición individuales, puede mirar el resultado de:
fdisk -u -l /dev/block/mmcblk0*
Desafortunadamente, no logré tar cf - mmcblkp0*
obtener el contenido de la partición de manera rápida y fácil, por lo que también pude canalizarlo, por ejemplo 7z x -si
, y obtener los datos como múltiples archivos en una sola línea portátil.
Para tar
algunos archivos puede:
adb shell "su -c 'cd /mnt/data && tar czf - ./ | base64' 2>/dev/null" | base64 -d > s3-mmcblk0p25-userdata.tar.gz
ACTUALIZADO: Encontré algunos trucos más para transferir datos binarios.
Espero que esto ayude a alguien más, Jim Klimov
adb exec-out
podría ser la solución, pero por alguna razón no funcionó bien para mí.sudo adb shell su 0 -c 'dd if=/dev/block/mmcblk0 | base64 2>/dev/null' | base64 -d >./mmcblk0.img 2>/dev/null
base64
?!adb root; adb push /local/file /distant/root/owner/file
"adb root" reiniciará adbd como root y luego se aceptará su inserción
No necesariamente será de una sola línea, pero puede intentar realizar las siguientes acciones:
/sdcard
, o una tarjeta SD externa)Posible inconveniente: entre el primer y el último paso, una aplicación maliciosa, si la está "usando", puede leer y/o modificar sus archivos en un directorio temporal de acceso público. En la práctica, esto es muy poco probable.
Utilizo el script por lotes ( extract-db-from-emulator.bat
) a continuación para extraer la base de datos local al host:
@@echo off
SET adb_path="%USERPROFILE%\AppData\Local\Android\sdk\platform-tools\"
SET application_id="com.example.myapp"
SET root_access_filepath="/data/user/0/%application_id%/databases/local.db"
SET pullable_filepath="/mnt/sdcard/DCIM/local.db"
SET host_directory="%USERPROFILE%\Desktop"
SET root_command="su 0 cp"
%adb_path%adb.exe shell "%root_command% %root_access_filepath% %pullable_filepath%"
%adb_path%adb.exe pull %pullable_filepath% %host_directory%
Veo un error con
adb shell "su -c '<your command>'"
su: uid/gid no válido '-c'
La solución está en Linux .
adb shell su 0 '<your command>'
-c
antes del comando, como:sudo adb shell su 0 -c 'whoami'
izzy
adb push
oadb pull
en modo raíz, el demonio adb en el dispositivo debe estar ejecutándose en modo raíz (que es lo que hace ADBInsecure).alegría
izzy
adb root
a trabajar). ¿Vale la pena una pregunta aparte, tal vez?