android 4.2版本的sdcard文件目录分析

2023-11-11

在这里插入图片描述

1.今天遇到一个问题,(修改已经解决)

1.首先看看真机测试下的文件结构
这里写图片描述
这里写图片描述
2.简单介绍android文件结构的作用
以下是几个重要目录/文件的说明:

 1、mnt                挂载点目录
  2、etc                系统主要配置文件
  3、system            Android 系统文件
  4、sys                Linux 内核文件
  5、proc                运行时文件
  6、init.rc            启动脚本
  7、default.prop        系统属性配置文件
  8、data                用户程序目录
  9、dev                设备文件
 system 目录下面的主要文件目录下面也简单介绍一下:

  1、usr         用户文件夹,包含共享、键盘布局、时间区域文件等
  2、app          常规下载的应用程序,这些 apk 包都是受保护的哦
  3、lib            系统底层库,如平台运行时库等
  4、etc          系统的配置文件,比如APN接入点设置等核心配置等
  5、framework    Android 系统平台核心 framework 的文件
  6、build.prop    Android 系统属性配置文件
  7、xbin            常用开发工具,比如 tcpdump/sqlite3 等
  8、bin            系统工具,比如 ps/cp/pm 等
  
  可以看到 /data 目录下结构都和应用有关,平时安装的用户应用/游戏程序,对应APP的数据,都被安装在 /data/app 下就可以了。

3.Android4.2的多用户管理中关于SD卡的实现改动

问题
Android4.2中,通过类得到的SD卡路径类似 /storage/emulated/0 在adb shell中看不到,也不能访问.
MediaServer不能访问这样的路径. /storage/emulated/0/
libstagefright中原先可以正常读写的SD卡路径,现在由于以上原因不能用了.
另外: 还有一个权限问题,本文不进行讨论,但它是现实存在的,由于它的存在,导致即使程序中写死实际的挂载点,它也会提示没有权限.

File path = Environment.getExternalStorageDirectory();// 获得SD卡路径
Android得到的真机的SD卡路径是 /storage/emulated/0/但是访问却出错。
看一下文件结构。
这里写图片描述
红色的是表示这个/storage/emulated/0/路径是个软连接,访问这个目录就是相当于访问/mnt/shell/emulated/0/(这里的0代表是第几个存储卡,手机没有外插的内存卡,就是0,有的话就会多出来一个/storage/emulated/1的文件夹),那么我们去看看/mnt/shell/emulated/0/这个文件夹
这里写图片描述
这里写图片描述
可以看到/mnt/shell/emulated/0/这个文件夹下的确放的是手机上的文件,其他的文件都最终指向这里,而且这个文件的权限

	/mnt/                    drwxr-x---
	/mnt/shell/              drwxrwx---
	/mnt/shell/emulated/     drwxrwx--x
	/mnt/shell/emulated/0/   drwxrwx--x

有linux的经验的,应该知道d代表是文件夹后面的3个分为一组 d所有者,所属组,其他人,这里的其他人中都有x权限,可执行权限,这就表示它可以执行某些命令去查寻这个文件夹下有哪些目录及其文件

File path=Environment.getExternalStorageDirectory();
// 获得SD卡路径   
File[] files = path.listFiles();// 读取  
但是这样却输出为空。本人表示不知道为什么?如果你知道可以评论一下,谢谢

为了兼容以前,同时挂载到 /storage/emulated/legacy (故名思议,传统的),还建立三个软连接 /storage/sdcard0 ,/sdcard,/mnt/sdcard ,都指向 /storage/emulated/legacy

这个0和多用户有什么关系呢,那是因为多用户这个新特性,只在平板上才启用,在手机上会被禁用的。但是底层实现是一致的。 /mnt/shell/emulated 目录和 /storage/emulated 下的文件夹是一样的。(注意,这个/mnt/shell/emulated 不是挂载出来的)
推测,/mnt/shell/ 是为了多用户准备的,因为linux的多用户是基于shell实现的。

网上说:
android是基于linux的,linux里的要使用存储设备就要先把它挂载到到linux的目录树上(以/为根),android上一般是挂载到/storage/emulated/这个目录对应的目录或者/storage对应目录里的,假如你可以放两张内存卡,那些就可能是分别挂载到 /storage/emulated/0/  和/storage/emulated/1/ 这样的目录。。而你得到/storage/emulated/0/是你SD卡的真正目录。。不是引用路径。以前你可能会得到的是/sdcard 这样的路径。那个才是一个链接(你所说的引用),链接到你SD直正的挂载目录/storage/emulated/0 。。所以当你访问两个路径时得到的内容是一样的。

我觉得也对,但是仍然出错。

在Android 4.2版本之前,通过Environment.getExternalStorageDirectory()获取的sdcard默认目录是正常的,可进行读写,一般的结果是“/mnt/sdcard”,但是在4.2版本之后,获取的sdcard目录是“/storage/emulated/0”,使用File.exist()方法返回true表示文件/目录是存在的,但是通过adb向该返回的目录中写数据(上传文件=)是不成功的,返回的错误是"No such file or directory",个人判断是返回的路径“/storage/emulated/0”其实是个类似快捷方式的文件,通过特定的解析方式可以认为是目录,但对于adb来说,该路径就是个文件,adb没有做过多的属性=判断。上述判断也是有依据的,通过adb的shell命令获取指定目录下的文件/文件夹列表, 该路径显示的是文件,且有大小。
google在4.2中考虑多用户的问题,对每个用户(user)来说,看各自的文件夹可以,但对于数据文件夹的处理就稍微麻烦了,所以调整了数据的挂载结构,如使用fuse技术/dev/fuse 会被挂载到/storage/emulated/0 目录,为了兼容以前,同时挂载到 /storage/emulated/legacy (故名思议,传统的),还建立三个软连接 /storage/sdcard0 ,/sdcard,/mnt/sdcard ,都指向 /storage/emulated/legacy/,

之前就有猜测,关于目录结构中会存在不同程度的虚拟链接文件,google了下确实如此,以下的3处虚拟符号链接(类似windows下的快捷方式)是:

"/storage/emulated/0 and /storage/emulated/0/0 (new and "backup" locations, respectively)
/storage/emulated/legacy and /storage/emulated/legacy/0 (new and "backup" locations, respectively)
/storage/sdcard0 and /storage/sdcard0/0 (new and "backup" locations, respectively)"

哎,看了一下午,以解决,先记录下有用的信息。。。

最后发现
(1)先把手机获得root权限,
http://blog.csdn.net/qq_21383435/article/details/51408001
(2)然后修改你要访问的文件夹权限,
(3)最后还要配置读写权限


	<!-- 加入在SDCard中创建与删除文件的权限 -->
	<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
	<!-- 加入在SDCard中写入数据的权限 -->
	<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

android 4.2版本的sdcard文件目录分析 的相关文章

  • Android:如何将自定义字段/操作添加到联系人详细信息

    我会将自定义操作添加到 Android 的系统联系方式中 例如 Viber 请参阅随附的屏幕截图 和其他消息应用程序 当用户单击此类自定义操作时 我的应用程序将进行处理 有什么帮助吗 我怀疑这是否像听起来那么容易 据我所知 您需要在设备上创
  • Android ListView数组索引过滤后越界

    我认为这是专家的问题 我接到电话getView with positon 出界来自ListView数据列表 当我使用适配器过滤器时会发生这种情况 过滤器publishResults 方法使用小于原始列表的过滤列表填充数据 当新的过滤列表时似
  • Kotlin 中的单例类

    我想知道如何在 Kotlin 中创建一个单例类 以便我的 Util 类在每次应用程序执行时仅实例化一次 但是 当我将 Java 类转换为 kotlin 时 生成了以下代码 它是否正确 companion object private var
  • 无法运行 android/sdk/build-tools/23.0.2/aapt

    最近在 Ubuntu 15 上安装了 Android Studio 1 0 1 由于某些原因是旧版本 我正在尝试创建一个新项目 每当我构建它时 我都会收到此错误 无法运行程序 home user Android Sdk build tool
  • Android如何让进度条(圆形)在按下按钮时覆盖全屏?

    我尝试在单击提交按钮时显示进度栏 数据加载完成后它将隐藏 但是 进度条没有覆盖全屏 相反 它被按钮覆盖 请参考截图 应该更容易理解我的意思 我想要实现的是屏幕截图的底部部分 Main4Activity java public class M
  • Orientation改变时如何处理Activity?

    我正在编写一个活动 它从服务器加载数据并使用 ArrayAdapter 将其显示为列表 为此 我显示了一个进度对话框 即加载 同时它从服务器加载所有数据 然后我在处理程序中关闭该对话框 我的问题是 当我更改方向时 会再次显示进度对话框 这是
  • Android、AdMob:AdMob 广告刷新会破坏帧速率

    我正在开发一款游戏 并且进展顺利 不过 我确实对 AdMob 广告刷新有一些疑问 每次刷新广告或绘制广告的不同方面时 我的帧速率都会急剧下降 几乎使游戏无法玩 这是我用于加载广告的内容 ad new AdView this AdSize B
  • 我应该将 onClickListener 放在自定义 ListView 的哪里?

    我正在定制ListView包含 a 的行数CheckBox and a TextView 在我使用自定义之前ListViews使用 SimpleCursorAdapter 我的onListItemClick 工作得很好 我读过我必须添加一个
  • 动画图像视图

    目前我正在开发一款游戏 这是我的游戏的详细信息 用户应选择正确的图像对象 我希望图像从左到右加速 当他们到达终点时 他们应该再次出现在活动中 这是我正在处理的屏幕截图 我有 5 个图像视图 它们应该会加速 您有此类动画的示例代码吗 非常感谢
  • Android 6.0 缺乏访问相机服务的权限

    我在 Android 6 0 中使用 Camera2API 我在Android 5 0中没有报错 然而 当我在 Android 6 0 中使用我的代码时 我遇到了问题 问题是有时我可以成功打开相机并拍照 但有时相机打不开 出现错误 java
  • 推送通知需要很长时间才能到达

    我在适用于 iOS 和 Android 的 Adob e Air 应用程序中遇到推送通知的奇怪问题 我正在使用 Milkman Games 的 Easy Push ANE 以及 One Signal 服务 问题是通知确实会到达 但有时 随机
  • 如何获取 Android 中临时文件的文件大小?

    如果我使用 openFileOutput 创建并写入临时文件 写入完成后如何获取文件大小 我希望这可以帮助你 File file new File selectedPath int file size Integer parseInt St
  • Android LayerDrawable.setDrawableByLayerId 不适用于 HTC Sensation(和其他?)

    我正在使用 LayerDrawable 在底层图像 索引 0 上构建一系列热点 索引 1 热点是根据用户界面交互添加的 并且它们的位置是动态的 因此我以编程方式完成所有这些操作 而不是使用 XML 作为进一步 可能不相关 的细节 我使用 F
  • Android 应用程序 Phonegap 中的 Admob 实现

    我将一个 jquery 脚本转换为 Android 应用程序 现在我想将 admob 添加到其中 这可能吗 谷歌从那时起禁止在移动应用程序中使用 AdSense 在移动应用程序中使用 AdSense 移动广告违反了 AdSense 政策 移
  • 无法仅在控制台中启动 androidstudio

    你好 我的问题是下一个 我下载了Android Studio如果我去 路径 android studio bin 我执行studio sh 我收到以下错误 No JDK found Please validate either STUDIO
  • Android 4 上的 html5 视频:全屏播放然后重定向到另一个网页 - 不起作用

    我正在为 Android 4 智能手机设计一个 html5 页面 其中包含一个 3gpp 或 mp4 视频 打开时必须自动全屏播放 当视频结束时应该重定向到另一个网址 一些谷歌搜索告诉我 Android 4 上不再允许自动播放 因此我选择显
  • 如何从耳机插孔获取电力?

    我的问题是是否有人知道如何创建一个可以通过设备的耳机插孔发送电荷的 Android 应用程序 就像这个视频中那样 该视频展示了一款 iPhone 应用程序 可控制插入耳机插孔的 LED 我想知道如何访问该设备来发送电信号 抱歉我的英语不是我
  • 如何为 Android Q 打开具有特定专辑或文件夹的默认图库应用程序?

    我尝试打开图库中的特定文件夹 如下代码所示 但它对我不起作用 并且出现错误无法找到物品 fun openDirectoryInGallery context Context directory String val intent Inten
  • 有什么方法可以禁用/覆盖 Galaxy Tab 4 上的多任务按钮吗? [复制]

    这个问题在这里已经有答案了 我们编写了一个工业控制应用程序 并随我们的制造产品预装在三星 Galaxy 平板电脑上 我们使用的平板电脑是运行 Honeycomb 的 Tab 10 但我们无法再获得足够的 OEM 平板电脑 因此我们改用运行
  • RecyclerView 不调用 onCreateViewHolder 或 onBindView

    没有收到任何错误 所有数据似乎都有效 由于某种原因 没有调用与视图相关的方法 我已确定以下事项 getItemCount 是唯一被调用的适配器方法 并且返回一个正整数值 我知道这将是你们将要查看的区域 构造函数正在被调用 成员变量有效 Pa

随机推荐

  • centOS7启用(运行)NetworkManager管理网络

    启用 NetworkManager 服务 在命令行下运行以下语句 chkconfig NetworkManager on 设置不用重新开机便可以应用它 service NetworkManager start 运行完语句便可在界面右上角看到
  • 小甲鱼python课后作业及答案001讲_小甲魚"用 Python 设计第一个游戏"课后作业(2019)...

    001 用 Python 设计第一个游戏 问答题 0 IDLE 的交互模式和编辑器模式有什么区别 答 交互模式是你问一个问题它回答一个答案 而编辑模式是一次可以问有很多个问题而且可以解释问题等 1 在课堂上敲过的代码中 除了 print 和
  • ModuleNotFoundError: No module named ‘termios‘

    问题描述 下面的图片出现ModuleNotFoundError No module named termios 等报错 解决方案 使用Unix系统 如果使用Windows系统该包是不支持的 该结论在官方文档上即有说明 https docs
  • ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost' (using password: NO)的解决办法

    ERROR 1045 28000 Access denied for user ODBC localhost using password NO CMD登录MySQL客户机的命令行程序时报异常 一般情况下 是因为直接输入命令mysql导致的
  • python科学计算库Sympy指南

    SymPy是Python的数学符号计算库 用它可以进行数学公式的符号推导 安装不介绍了 官方文档 这里还是建议使用anaconda from sympy import init printing use unicode True x y s
  • A Survey on Evaluation of Large Language Models

    这是LLM相关的系列文章 针对 A Survey on Evaluation of Large Language Models 的翻译 大型语言模型评价综述 摘要 1 引言 2 背景 2 1 大语言模型 2 2 AI模型评估 3 评估什么
  • 哈希表结构

    1 哈希值 1 概念 是一个十进制的整数 由系统随机给出 就是对象的地址值 但这是一个逻辑地址 是模拟出来的 不是数据实际存储的物理地址 2 获取哈希值 可通过Object类的 hasCode 方法获取哈希值 hasCode 源码如下 pu
  • End-to-End Object Detection with Transformers(论文解析)

    End to End Object Detection with Transformers 摘要 介绍 相关工作 2 1 集合预测 2 2 transformer和并行解码 2 3 目标检测 3 DETR模型 3 1 目标检测集设置预测损失
  • 水库大坝安全监测的主要项目

    由于大坝失事原因是多方面的 其表现形式和可能发生的部位因各坝具体条件而异 因此 在大坝安全监测系统的设计中 应根据坝型 坝体结构和地质条件等 选定观测项目 布设观测仪器 提出设计说明书和设计图纸 设计中考虑埋设或安装仪器的范围包括坝体 坝基
  • 建站之星网站 和服务器,建站之星服务器

    建站之星服务器 内容精选 换一换 云速建站企业版有独立的IP 其他版本没有 其他版本的数据分布在多台服务器上 登录云速建站控制台 在待查看帐号和密码的站点所在行 选择 更多 gt 多用户管理 弹出 多用户管理 对话框 云速建站控制台在 主账
  • 全志F1C100s使用记录:u-boot & linux & rootfs 编译与烧录测试(基于SD卡)

    文章目录 目的 基础准备 硬件准备 开发环境 制作toolchain和rootfs 设置编译工具链 u boot linux编译 u boot boot scr linux 测试程序 文件烧录 分区设置 分块烧录 上电测试 系统镜像 制作镜
  • constexpr的使用

    l 含义 1 常量表达式 指值不会改变并且在编译过程就能得到计算结果的表达式 如 const int max files 20 max files是常量表达式 const int limit max files 1 limit是常量表达式
  • el-table滚动加载、懒加载(自定义指令)

    我们在实际工作中会遇到这样的问题 应客户要求 某一个列表不允许分页 但是不分页的话 如果遇到大量的数据加载 不但后端响应速度变慢 前端的渲染效率也会降低 页面出现明显的卡顿 那如何解决这个问题呢 我们可以用模拟分页 当滚动条滚动到底部时再次
  • 04 C/C++ math库详解

    本文转载链接 https blog csdn net AnthongDai article details 78696573 04 math库的详解 1 cos 函数 cos example include
  • CDC问题的解决方案总结

    CDC 不同时钟之间传数据 问题是ASIC FPGA设计中最头疼的问题 CDC本身又分为同步时钟域和异步时钟域 这里要注意 同步时钟域是指时钟频率和相位具有一定关系的时钟域 并非一定只有频率和相位相同的时钟才是同步时钟域 异步时钟域的两个时
  • Redis之哨兵模式解读

    目录 基本介绍 单哨兵模式 多哨兵模式 哨兵的本质 配置哨兵模式 故障恢复原理 哨兵监控工作流程 哨兵模式缺点 基本介绍 当主服务器宕机后 需要手动把一台从服务器切换为主服务器 这就需要人工干预 费事费力 还会造成一段时间内服务不可用 这不
  • Vue前端路由

    路由概念 SPA 单页面应用程序 中 前端路由 router 就是对应关系 Hash地址与组件间对应关系 工作方式 用户点击页面上的路由链接 导致URL地址栏中Hash值发生变化 前端路由监听到Hash地址变化 前端路由把当前Hash地址对
  • 使用docker安装部署kuboard并导入k8s集群

    1 官网地址 https kuboard cn install v3 install html kuboard v3 x E7 89 88 E6 9C AC E8 AF B4 E6 98 8E 2 找到推荐的安装方式 先点击左上角的安装 3
  • 1秒30000QPS,前后端设计思路

    A1 作者 李道兵 没做过支付 不考虑细节 随便聊聊 1 首先要解决掉数据库的压力 3万qps对应的磁盘 iops 很大 不过现在好的 SSD 能提供很好的 iops 比如这款 ARK Intel SSD DC P3700 Series 8
  • android 4.2版本的sdcard文件目录分析

    1 今天遇到一个问题 修改已经解决 1 首先看看真机测试下的文件结构 2 简单介绍android文件结构的作用 以下是几个重要目录 文件的说明 1 mnt 挂载点目录 2 etc 系统主要配置文件 3 system Android 系统文件