通过 adb 获取 sdcard 目录

Posted

技术标签:

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

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

即:

SD卡 sdcard/external_sd

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

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

但问题是我有两个三星设备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.stackexchange.com/q/14105/32571 的副本 【参考方案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,这个答案对我帮助很大。我不明白为什么人们投票反对......

以上是关于通过 adb 获取 sdcard 目录的主要内容,如果未能解决你的问题,请参考以下文章

如何使用批处理在 /sdcard 上 adb chmod 750

ADB 常用命令

通过 adb 命令启用蓝牙 HCI Snoop Log

android系统如何通过$ adb 来获得/data/data目录的访问权限

adb logcat查看手机端日志

android之文件存储和读取