【发布时间】:2019-05-12 13:18:37
【问题描述】:
我正在使用 ADB 将文件从我的桌面复制到我的模拟器上的文件夹中。
adb push pic.jpg '/storage/emulated/0/DCIM/camera/
这很好用,但是我有很多文件要复制,我不想对每个文件都重复这个命令。如何“推送”整个目录的内容?
编辑:我的 Android 工作室的截图:
【问题讨论】:
我正在使用 ADB 将文件从我的桌面复制到我的模拟器上的文件夹中。
adb push pic.jpg '/storage/emulated/0/DCIM/camera/
这很好用,但是我有很多文件要复制,我不想对每个文件都重复这个命令。如何“推送”整个目录的内容?
编辑:我的 Android 工作室的截图:
【问题讨论】:
【讨论】:
要推送当前目录中的所有内容,可以尝试:
adb push * /storage/emulated/0/DCIM/camera/*
【讨论】:
您可以使用 tar 将所有文件放入一个存档中:
tar -cvf all.tar .
然后将该存档推送到设备:
adb push all.tar /sdcard
最后在设备中解压你的 tar 文件:
adb shell tar -xvf /sdcard/all.tar -C /sdcard
【讨论】:
我找不到解决方案,所以我做了一个:
from ppadb.client import Client as AdbClient
import os
import glob
adb = AdbClient(host='127.0.0.1', port=5037)
devices = adb.devices() #List of all connected devices
def send_over_adb(device,hostpath,devpath="/storage/emulated/0/"): # Recursively send folder and files over adb
if os.path.isfile(hostpath):
devpath = os.path.join(devpath,hostpath).replace('\\','/') # optimization for windows
device.push(hostpath, devpath)
elif os.path.isdir(hostpath):
for i in glob.glob(hostpath+'\*'):
print(i)
send_over_adb(device,i,devpath)
device.shell('am broadcast -a android.intent.action.MEDIA_MOUNTED -d file:///mnt/sdcard')
device.shell('am force-stop com.android.gallery3d') #force create thumbnails
hostpath='\path\to\folder\or\file\'
send_over_adb(devices[0],hostpath,devpath)
此函数递归地发送文件夹和文件,同时保持文件夹结构并忽略空目录。
限制:文件名不应包含正斜杠或反斜杠(idk,如果任何操作系统允许)
依赖:pure-python-adb
测试于:Win 8.1 上的 Python3.7.9
【讨论】: