adb push: synchronisieren, aber nicht kopieren

adb pushscheint alles in den dest-Ordner zu schieben, unabhängig von ihrem geänderten/unveränderten Zustand. Es verschwendet also viel Zeit. Ist es möglich, zu synchronisieren statt zu kopieren (dh rsynceher als cp)?

Ich sehe , adbes gibt eine syncOption, aber ich bin mir nicht ganz sicher, ob sie relevant ist oder nicht.

Antworten (5)

Sie würden adb push --synczum Beispiel verwenden:

adb push --sync /home/abc/ /sdcard/abc

von 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

aber es scheint, dass diese Funktion für relativ neuere ADB-Versionen wie Version 1.0.40 verfügbar ist .

Obwohl diese Antwort nicht gerade eine Erklärung für die Verwendung von adb syncist, kann sie hilfreich sein, wenn Ihr Hauptziel darin besteht, Dateien mit zu synchronisieren adb.

Sie könnten an adb-sync interessiert sein , einem Python-Skript, das verwendet wird adb, um Dateien von Ihrem Computer auf Ihr Android-Gerät oder umgekehrt zu synchronisieren.

Beispiel ( Computer -> Gerät ):

adb-sync /home/abc/ /sdcard/abc

Beispiel ( Computer <- Gerät ):

adb-sync --reverse /sdcard/abc /home/abc/ 

Wenn fehlende Dateien auf der Quelle auf dem Ziel gelöscht werden sollen, müssen Sie angeben --delete.

Dieses Python-Skript funktioniert nur für Linux. für windows kann man bash installieren und winadb-sync ausprobieren

"adb sync" ist in Ihrem Fall nicht relevant. Es wird verwendet, um die Systempartition mit Ihrem angeschlossenen ADB-Gerät zu synchronisieren. Es funktioniert nur, wenn Ihr Telefon gerootet ist und Sie zuerst die Systempartition in den beschreibbaren Modus versetzen müssen. Standardmäßig befindet es sich im schreibgeschützten Modus. Bitte folgen Sie diesem Artikel für weitere Details: https://medium.com/@yigitpirildak/syncing-aosp-build-changes-using-adb-sync-885ce12e5cc7

Ich habe ein Python-Skript erstellt, das wie Charme für Windows funktioniert.
Es kopiert alle Dateien aus dem aktuellen Ordner auf das Gerät (Pfad kann im Code bearbeitet werden), mit Ausnahme der dort bereits vorhandenen Dateien.
Optional kann der Schalter -l verwendet werden, um die Dateien mit der Kopiengröße vor dem eigentlichen Kopieren aufzulisten.

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

Wenn adbSie ohne Befehle laufen, erhalten Sie eine Liste möglicher Befehle, und hier ist sie:

adb sync [ <directory> ]     - copy host->device only if changed
                             (see 'adb help all')

Sieht für mich ziemlich relevant aus :)

Würden Sie bitte ein Beispiel geben, wie Sie dies verwenden können? Sagen Sie, ob ich /home/abc/ auf dem PC mit /sdcard/abc/ auf dem Gerät synchronisieren möchte.
Hast du es versucht adb help all?
Ja. Es kann die System-/Datenpartition synchronisieren. Aber ich möchte nur einen Ordner auf der SD-Karte synchronisieren. Weißt du, wie man das macht?
Es ist in Version <= 1.0.31 nicht implementiert.
Während dieser Befehl auf den ersten Blick vielversprechend aussieht, konnte ich ihn nach einem kurzen Versuch nicht zum Laufen bringen. Ein echtes Beispiel, wie von Cyker angefordert, wäre hilfreich.
Dies beantwortet die Frage nicht vollständig und funktioniert auch nicht so, wie es das OP will.
Wie wurde diese Antwort positiv bewertet? Es ist überhaupt nicht relevant.