adb push: sincronizar pero no copiar

adb pushparece 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 rsynclugar de cp)?

Veo que adbtiene una syncopción, pero no estoy muy seguro de si es relevante o no.

Respuestas (5)

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 adbpara 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.

este script de python funciona solo para Linux. para Windows se puede instalar bash y probar winadb-sync

"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 adbsin 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 :)

¿Podría por favor dar un ejemplo de cómo usar esto? Di si quiero sincronizar /home/abc/ en la PC con /sdcard/abc/ en el dispositivo.
¿Lo intentaste adb help all?
Sí. Puede sincronizar sistema/partición de datos. Pero solo quiero sincronizar una carpeta en la tarjeta SD. ¿Sabes como hacer esto?
No está implementado en la versión <= 1.0.31.
Si bien este comando parece prometedor al principio, no pude hacerlo funcionar después de un intento rápido. Sería útil un ejemplo real solicitado por cyker .
Esto no responde la pregunta en su totalidad, ni funciona como quiere el OP.
¿Cómo se votó esa respuesta? No es relevante en absoluto.