adb push
scheint 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 rsync
eher als cp
)?
Ich sehe , adb
es gibt eine sync
Option, aber ich bin mir nicht ganz sicher, ob sie relevant ist oder nicht.
Sie würden adb push --sync
zum 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 sync
ist, 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
.
"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 adb
Sie 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 :)
adb help all
?
Alex