adb push
parece empujar todo a la carpeta de destino independientemente de sus estados cambiados/sin cambios. Así que se pierde mucho tiempo. ¿Es posible sincronizar en lugar de copiar (es decir, en rsync
lugar de cp
)?
Veo que adb
tiene una sync
opción, pero no estoy muy seguro de si es relevante o no.
Usarías adb push --sync
, por ejemplo:
adb push --sync /home/abc/ /sdcard/abc
de adb --help
:
file transfer: push [--sync] LOCAL... REMOTE copy local files/directories to device --sync: only push files that are newer on the host than the device
pero parece que esta función está disponible para versiones relativamente nuevas de ADB, como la versión 1.0.40 .
Si bien esta respuesta no es exactamente una explicación sobre el uso de adb sync
, puede ayudar cuando su objetivo principal es sincronizar archivos usando adb
.
Es posible que le interese adb-sync, que es un script de Python que se utiliza adb
para sincronizar archivos desde su computadora a su dispositivo Android o viceversa.
Ejemplo ( computadora -> dispositivo ):
adb-sync /home/abc/ /sdcard/abc
Ejemplo ( computadora <- dispositivo ):
adb-sync --reverse /sdcard/abc /home/abc/
Si los archivos que faltan en el origen deben eliminarse en el destino, debe especificarlo --delete
.
"adb sync" no es relevante en su caso. Se utiliza para sincronizar la partición del sistema con su dispositivo adb conectado. Solo funcionará si su teléfono está rooteado y primero necesita poner la partición del sistema en modo de escritura. Por defecto está en modo de sólo lectura. Siga este artículo para obtener más detalles: https://medium.com/@yigitpirildak/syncing-aosp-build-changes-using-adb-sync-885ce12e5cc7
Hice un script de python que funciona de maravilla para Windows.
Copia todos los archivos de la carpeta actual al dispositivo (la ruta se puede editar en el código), excepto los archivos que ya están presentes allí.
Opcionalmente, se puede usar el modificador -l para enumerar los archivos con el tamaño de la copia antes de la copia real.
import os
import subprocess
import sys
files=os.listdir('.')
files=set(files)
devPath="/path/on/adb/device"
cmd="adb shell ls -a " + devPath
deviceFiles=subprocess.check_output(cmd,shell=True).decode().split('\r\r\n')
deviceFiles=set(deviceFiles)
filesToCopy=files-deviceFiles
size=0
count=0
justList=False
if (len(sys.argv)>1 and sys.argv[1]=='-l'):
justList=True
for f in filesToCopy:
count+=1
size+=os.path.getsize(f)
if(not justList):
cmd="adb push "+str(f)+" "+devPath+str(f)
os.system(cmd)
print(str(count) + ' ' + str(f))
if(not justList):
os.system("adb shell rm "+str(devPath)+"/"+sys.argv[0])
print(str(size/1000000) + " Mb")
Cuando se ejecuta adb
sin ningún comando, obtiene una lista de posibles comandos, y aquí está:
adb sync [ <directory> ] - copy host->device only if changed
(see 'adb help all')
Me parece muy relevante :)
adb help all
?
alecxs