You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何防止应用卸载时删除符号链接指向的共享文件夹内容?

解决Android卸载应用时误删共享文件夹文件的问题

问题根源

你当前是将/data/media/0/Android/data/<package name>整个目录软链接到共享文件夹,Android卸载应用时,系统会递归清理该包名目录——由于是软链接,系统会直接删除**目标路径(共享文件夹)**内的所有内容,chmod -R 777无效是因为系统删除操作的权限不受普通文件权限限制,且软链接本身的权限不影响目标文件。

可行解决方案

方案1:仅对文件/子目录创建软链接(推荐)

不要将整个包名目录设为软链接,而是保留应用默认的Android/data/<package name>目录,仅将共享文件夹内的文件/子目录单独链接到该目录下:

  1. 创建应用默认的目录(如果不存在):
    adb shell mkdir -p /data/media/0/Android/data/<package name>
    
  2. 获取应用对应的用户ID(确保权限匹配):
    adb shell dumpsys package <package name> | grep userId
    
  3. 给目录设置正确的权限:
    adb shell chown -R <获取到的userId>:<获取到的userId> /data/media/0/Android/data/<package name>
    
  4. 逐个链接共享文件夹内的内容:
    # 链接单个文件
    adb shell ln -s /mnt/shared/<package name>/example.txt /data/media/0/Android/data/<package name>/example.txt
    # 链接子目录
    adb shell ln -s /mnt/shared/<package name>/cache /data/media/0/Android/data/<package name>/cache
    

卸载应用时,系统只会删除Android/data/<package name>下的软链接文件,不会触及共享文件夹内的原始内容。

方案2:使用Bind Mount替代软链接

Bind Mount是将目录挂载到另一个位置,和软链接的本质区别是:系统删除挂载点的内容时,不会影响原目录的文件:

  1. 删除原软链接:
    adb shell rm /data/media/0/Android/data/<package name>
    
  2. 创建空的挂载目标目录:
    adb shell mkdir -p /data/media/0/Android/data/<package name>
    
  3. 执行挂载命令:
    adb shell mount --bind /mnt/shared/<package name> /data/media/0/Android/data/<package name>
    

注意:Bind Mount重启后会失效,若需持久化,可将挂载命令添加到开机脚本(如/etc/init.d/),或通过Magisk模块实现自动挂载。

方案3:限制应用卸载清理权限(需Root/Xposed)

通过Xposed模块(如AppOps)禁止应用卸载时的外部存储清理权限,此方法操作复杂,仅推荐前两种方案无法实现时使用。

内容的提问来源于stack exchange,提问作者Yune

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 03:16:19