Android 12 AOSP:如何阻止外部存储自动创建媒体文件夹?
禁用Android 12 AOSP外部存储自动创建媒体文件夹的方案
方法一:修改ExternalStorageProvider的目录创建逻辑
- 定位AOSP源码路径:
frameworks/base/packages/MediaProvider/src/com/android/providers/media/external/ExternalStorageProvider.java - 找到负责创建默认媒体目录的方法(通常为
ensureDefaultDirectories()或createDefaultDirectoriesForVolume()),该方法会遍历预定义的媒体类型,在外部存储根目录生成对应文件夹。 - 添加判断逻辑,跳过可移除存储(U盘)的目录创建:
// 修改遍历存储卷的逻辑示例 for (String volumeId : getVolumeIds()) { VolumeInfo vol = getVolume(volumeId); // 若为可移除存储,跳过创建流程 if (vol != null && vol.isRemovable()) { continue; } createDefaultDirectoriesForVolume(vol); } - 注释或删除原有的无条件目录创建代码,重新编译MediaProvider模块并刷入设备。
方法二:移除媒体目录预定义列表
- 定位到媒体目录常量定义文件:
frameworks/base/core/java/android/os/Environment.java - 找到
DIRECTORY_MUSIC、DIRECTORY_MOVIES、DIRECTORY_PODCASTS等常量,或对应的资源文件(如res/values/strings.xml中的媒体目录数组)。 - 清空或删除不需要的目录类型定义,彻底移除自动创建的源头。注意:此操作会影响所有依赖这些目录的媒体相关功能,适合完全不需要媒体管理的设备。
方法三:添加系统属性控制开关
- 在ExternalStorageProvider的目录创建方法中加入系统属性判断:
// 仅当属性为true时才执行创建逻辑 if (SystemProperties.getBoolean("persist.sys.media.autocreate", true)) { // 原目录创建代码 } - 重新编译MediaProvider后,在设备的
build.prop中添加配置:persist.sys.media.autocreate=false
补充说明
.nomedia文件仅用于让媒体扫描器忽略目录内的文件,无法阻止系统创建默认媒体目录,因此之前的尝试无效属于正常情况。修改后需重新编译对应模块或完整系统镜像,刷入设备验证效果。
内容的提问来源于stack exchange,提问作者Alex68
相关产品推荐
相关产品推荐

