草庐IT

adb_adb file transfer文件传输(adb push/pull)

xuchaoxin1375 2023-04-08 原文

文章目录

adb file transfer

使用文档

  • 包括三个子命令:

    • 比较常用的是前面

    • 使用adb push可以用来向anroid设备传输文件

    • 另一方面,adb pull可以从android 设备将文件拉取到电脑上

    • push

      • push [--sync] [-z ALGORITHM] [-Z] LOCAL... REMOTE
            copy local files/directories to device
            --sync: only push files that are newer on the host than the device
            -n: dry run: push files to device without storing to the filesystem
            -z: enable compression with a specified algorithm (any/none/brotli/lz4/zstd)
            -Z: disable compression
        
    • pull

      • pull [-a] [-z ALGORITHM] [-Z] REMOTE... LOCAL
             copy files/dirs from device
             -a: preserve file timestamp and mode
             -z: enable compression with a specified algorithm (any/none/brotli/lz4/zstd)
             -Z: disable compression
        
    • sync

      • sync [-l] [-z ALGORITHM] [-Z] [all|data|odm|oem|product|system|system_ext|vendor]
            sync a local build from $ANDROID_PRODUCT_OUT to the device (default all)
            -n: dry run: push files to device without storing to the filesystem
            -l: list files that would be copied, but don't copy them
            -z: enable compression with a specified algorithm (any/none/brotli/lz4/zstd)
            -Z: disable compression
        

adb命令行进行文件传输注意事项

adb push

  • 我们以adb push(推送电脑文件到手机)为例
    • adb pull拉取手机文件到电脑)遵循类似的规则,但是参数位置不同
    • 合法的命令行格式(合法的路径参数)

🎈路径名约定

  • 为了确保传输顺利,应该尽可能的保证
    • 文件名尽量不包含空格和其他非法字符(比如特殊符号(字母/下划线/小数点都是合法的)
      • 如果以空格,应当使用引号将其包围,来表示这个一个整体名字
    • 中文支持的不好
      • 试验中文传输的过程中,及时没有带空格,也频频失败,所以如果想要传送中文文件,要么暂时改名
      • 要么用别的方式传输🎈
    • 命令行工具操作文件对于文件名是很敏感的
    • 特别是对于linux,区分大小写,更加敏感

push文件

保持名字直接传输

  • 假设当前目录有一个文件名字叫做fileName
    • adb push fileName /sdcard/(传输完成后,android设备的/sdcard/目录下将出现文件fileNmae

传输的同时更改名字

  • adb push fileName /sdcard/Download/fileNewName.ext
  • 目标目录为android设备的/sdcard/Download/,出现的新文件名为你指定的名字fileNewName.ext

非法的路径参数

  • 同时,如果手机上没有中间路径,那么adb的此次传输会创建相应中间路径

    • PS C:\Users\cxxu\Desktop> touch a
      PS C:\Users\cxxu\Desktop> push a /sdcard/d1/d2/d3/a2b
      a: 1 file pushed, 0 skipped.
      PS C:\Users\cxxu\Desktop> adb shell
      xaga:/$ ls -l /sdcard/d1/d2/d3/a2b
      -rw-rw---- 1 u0_a214 media_rw 0 2022-11-19 14:21 /sdcard/d1/d2/d3/a2b
      
非法的路径参数
  • adb push file /sdcard/NotYetExistDir/(报错)
    • 当路径结尾不是文件名而是一个不存在的目录(以一个斜杠/结尾表示传输的目标目录
    • 这种情况是非法的,会报错
    • 解决错误的办法是:
      • 去掉结尾斜杠,转化为上一种情况:非法的路径参数
      • 或者接着追加文件名字(此时不可以在带有结尾的斜杠)

powershell函数

  • $downloadM="/scard/Download"
    function pushToAndroid
    {
        param (
            $path,
            $DestinationPath_opt = "$downloadM"
        )
        adb push $path $DestinationPath_opt
    }
    set-alias push pushToAndroid
    
    
  • 用例:push fileNameOrDirName

    • PS C:\Users\cxxu\Desktop\videos> push .\test
      .\test: 1 file pushed, 0 skipped.
      

更多adb 文件传输示例

绝对路径传输文件实例

  • 这里我将一个压缩包传输到手机上

    这里要注意,第二个路径参数的斜杠是linux规范的/,如果写成\会导致意外的结果(文件传输到意料之外的地方,找不到了)

  • 对于目录,即为可以不加斜杠,但是推荐加上,这样一目了然

PS C:\Users\cxxu\Downloads> adb push C:\Users\cxxu\downloads\Compressed\MK90.0-santoni-210620-HISTORY.zip /sdcard/Download
C:\Users\cxxu\downloads\Compressed\MK90.0-santoni-21062...shed, 0 skipped. 25.2 MB/s (695991497 bytes in 26.315s)
PS C:\Users\cxxu\Downloads>

相对路径传输示例

  • PS C:\Users\cxxu\Downloads\Compressed> adb push  .\lineage-18.1-20220720-UNOFFICIAL-0xCAFEBABE-Mi8937.zip /sdcard/Download/
    .\lineage-18.1-20220720-UNOFFICIAL-0xCAFEBAB...pped. 23.7 MB/s (783898135 bytes in 31.594s)
    PS C:\Users\cxxu\Downloads\Compressed>
    

利用adb shell 检查android 设备文件

  • 可选操作:检查android指定目录下是否存在某文件(下面是已经root的才有权限)

    • santoni:/ # cd sdcard/
      santoni:/sdcard # ls
      Alarms   MIUI     Music         Ringtones baidu                did    sogou
      Android  MT2      Notifications TWRP      browser              jeejen wlan_logs
      DCIM     MiMarket Pictures      Xiaomi    com.miui.voiceassist miad
      Download Movies   Podcasts      backups   dctp                 mipush
      santoni:/sdcard # cd Download/
      santoni:/sdcard/Download # ls
      3b515ef2c77d9f04e58c1d75a3add549-0-o_1g8cle2dk1mia12ds1vjs13eost32c-uid-408649.apk
      DevCheck_4.37.apk
      GitHub\ -\ yc9559_uperf_\ Userspace\ performance\ controller\ for\ android.mhtml
      MK90.0-santoni-210620-HISTORY.zip
      app-releas.zip
      app-release.apk
      app-release_mini.apk
      boot.img
      boots.zip
      magisk_patched-25200_VBQAh.img
      miui_HM4X_V11.0.1.0.NAMCNXM_7e7448fe6d_7.1.zip
      uperf-dev-22.07.24.zip
      

adb pull

  • 从android拉取文件到pc端
  • 要求和adb push 类似

有关adb_adb file transfer文件传输(adb push/pull)的更多相关文章

  1. ruby - 使用 RubyZip 生成 ZIP 文件时设置压缩级别 - 2

    我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看ruby​​zip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d

  2. ruby - 其他文件中的 Rake 任务 - 2

    我试图在一个项目中使用rake,如果我把所有东西都放到Rakefile中,它会很大并且很难读取/找到东西,所以我试着将每个命名空间放在lib/rake中它自己的文件中,我添加了这个到我的rake文件的顶部:Dir['#{File.dirname(__FILE__)}/lib/rake/*.rake'].map{|f|requiref}它加载文件没问题,但没有任务。我现在只有一个.rake文件作为测试,名为“servers.rake”,它看起来像这样:namespace:serverdotask:testdoputs"test"endend所以当我运行rakeserver:testid时

  3. ruby-on-rails - 在 Rails 中将文件大小字符串转换为等效千字节 - 2

    我的目标是转换表单输入,例如“100兆字节”或“1GB”,并将其转换为我可以存储在数据库中的文件大小(以千字节为单位)。目前,我有这个:defquota_convert@regex=/([0-9]+)(.*)s/@sizes=%w{kilobytemegabytegigabyte}m=self.quota.match(@regex)if@sizes.include?m[2]eval("self.quota=#{m[1]}.#{m[2]}")endend这有效,但前提是输入是倍数(“gigabytes”,而不是“gigabyte”)并且由于使用了eval看起来疯狂不安全。所以,功能正常,

  4. ruby-on-rails - Rails 3 中的多个路由文件 - 2

    Rails2.3可以选择随时使用RouteSet#add_configuration_file添加更多路由。是否可以在Rails3项目中做同样的事情? 最佳答案 在config/application.rb中:config.paths.config.routes在Rails3.2(也可能是Rails3.1)中,使用:config.paths["config/routes"] 关于ruby-on-rails-Rails3中的多个路由文件,我们在StackOverflow上找到一个类似的问题

  5. ruby - 将差异补丁应用于字符串/文件 - 2

    对于具有离线功能的智能手机应用程序,我正在为Xml文件创建单向文本同步。我希望我的服务器将增量/差异(例如GNU差异补丁)发送到目标设备。这是计划:Time=0Server:hasversion_1ofXmlfile(~800kiB)Client:hasversion_1ofXmlfile(~800kiB)Time=1Server:hasversion_1andversion_2ofXmlfile(each~800kiB)computesdeltaoftheseversions(=patch)(~10kiB)sendspatchtoClient(~10kiBtransferred)Cl

  6. ruby - 如何将脚本文件的末尾读取为数据文件(Perl 或任何其他语言) - 2

    我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚

  7. ruby - 使用 Vim Rails,您可以创建一个新的迁移文件并一次性打开它吗? - 2

    使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta

  8. Ruby 写入和读取对象到文件 - 2

    好的,所以我的目标是轻松地将一些数据保存到磁盘以备后用。您如何简单地写入然后读取一个对象?所以如果我有一个简单的类classCattr_accessor:a,:bdefinitialize(a,b)@a,@b=a,bendend所以如果我从中非常快地制作一个objobj=C.new("foo","bar")#justgaveitsomerandomvalues然后我可以把它变成一个kindaidstring=obj.to_s#whichreturns""我终于可以将此字符串打印到文件或其他内容中。我的问题是,我该如何再次将这个id变回一个对象?我知道我可以自己挑选信息并制作一个接受该信

  9. ruby - 如何使用 Ruby aws/s3 Gem 生成安全 URL 以从 s3 下载文件 - 2

    我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A

  10. ruby - rspec 需要 .rspec 文件中的 spec_helper - 2

    我注意到像bundler这样的项目在每个specfile中执行requirespec_helper我还注意到rspec使用选项--require,它允许您在引导rspec时要求一个文件。您还可以将其添加到.rspec文件中,因此只要您运行不带参数的rspec就会添加它。使用上述方法有什么缺点可以解释为什么像bundler这样的项目选择在每个规范文件中都需要spec_helper吗? 最佳答案 我不在Bundler上工作,所以我不能直接谈论他们的做法。并非所有项目都checkin.rspec文件。原因是这个文件,通常按照当前的惯例,只

随机推荐