【问题标题】:Get sdcard directory by adb通过 adb 获取 sdcard 目录
【发布时间】:2012-03-11 14:10:11
【问题描述】:

我正在制作一个应用程序,它通过 adb 从设备 sdcard 中提取文件(由 android 应用程序保存)。 问题是不同的设备,有不同的sdcard目录

即:

  • SD卡
  • sdcard/external_sd

首先我发明了以下解决方案:

  1. 运行 adb shell
  2. ls
  3. 检查目录“sdcard”是否存在
  4. 如果是,运行 sdcard/ls 并检查 external_sd 是否存在
  5. 返回值。

但问题是我有两个三星设备GT-I9100GT-I9000 并且都有一个目录sdcard/external_sd。当我检查System.getenv("EXTERNAL_STORAGE") 时,一个返回sdcard,另一个返回sdcard/external_sd。我需要拉取之前保存到System.getenv("EXTERNAL_STORAGE")的文件。

所以问题是:有没有命令可以获取 sdcard 目录 直接来自 adb,不访问 Android 代码?

或者我可以用 adb's am start 开始活动,然后得到回报 价值?这可能吗?

编辑: 找到解决方案:

adb shell echo $EXTERNAL_STORAGE

【问题讨论】:

  • 你可能想转义 $
  • 当我使用adb shell echo $EXTERNAL_STORAGE 时,它会自动转义 $。当我这样做时: 1. adb shell 2. echo $EXTERNAL_STORAGE 我必须以 exit 结束它以逃避 $

标签: android adb sd-card


【解决方案1】:

对于它的价值 - 使用 $EXTERNAL_STORAGE 变量可能会给您带来误导性的结果。 我这里有一个 HP Slate 平板电脑,它的 EXTERNAL_STORAGE 变量设置为 /storage/sdcard0 。 然而,当在 shell 上使用 df (disk free) 命令,甚至使用 mount 命令来显示可用空间或挂载时,以下内容变得很明显:

shell@android:/ $ df
Filesystem             Size   Used   Free   Blksize
/dev                  452.7M  36.0K  452.7M   4096
/mnt/asec             452.7M  0.0 K  452.7M   4096
/mnt/obb              452.7M  0.0 K  452.7M   4096
/system               629.9M  468.5M  161.5M   4096
/data                 5.7 G  2.3 G  3.5 G   4096
/cache                435.9M  16.4M  419.5M   4096
/storage/sdcard0      5.7 G  2.3 G  3.5 G   4096
/mnt/external_sd      29.3G  64.0K  29.3G   32768

所以,外部sd卡实际上是/mnt/external_sd,而不是EXTERNAL_STORAGE返回的值(即内部存储)

【讨论】:

  • 这应该是答案。谢谢约翰!
  • 很好的答案。谢谢。
【解决方案2】:

如果我没有误解你,你正在寻找类似的东西:

emanuele@Nabucodonosor:~$ adb shell cd \$EXTERNAL_STORAGE
emanuele@Nabucodonosor:~$ adb shell ls \$EXTERNAL_STORAGE
emanuele@Nabucodonosor:~$ adb shell echo \$EXTERNAL_STORAGE

【讨论】:

  • 根据您的评论找到解决方案“adb shell echo $EXTERNAL_STORAGE”,谢谢。
  • 这不是正确的答案。 John Deaux 的回答很好。
  • 由于某些愚蠢的原因,在我的设备上 $EXTERNAL_STORAGE 实际上是内部存储器。 John Deaux 是对的,df 是正确的选择!
  • 答案很老
【解决方案3】:

最好使用getExternalStorageDirectory() 而不是System.getenv("EXTERNAL_STORAGE") 这将为您提供外部存储目录,而与设备无关。

【讨论】:

  • 与设备无关?你的意思是 System.getenv("EXTERNAL_STORAGE") 不能在某些设备上运行?
  • getExternalStorageDirectory() 表示外部应用程序存储,而不是外部设备存储。谷歌似乎有一个设计时代,可扩展设备内存从 Android 中移除。他们把它放回去了,但结果是一团糟。棒棒糖后,安装外部存储(SD卡,USB,网络驱动器等)应该是直截了当的。
  • 我想从 shell 脚本访问 sdcard,这个答案对我帮助很大。我不明白为什么人们投票反对......
猜你喜欢
  • 2022-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-25
  • 2015-02-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多