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

Android 11下通过adb向应用shared_prefs目录推送文件遇权限拒绝问题问询

安卓11+向应用shared_prefs目录拷贝配置文件的可行方案

你之前申请权限后依然访问失败是Android 11+分区存储的固有限制,即便是获得MANAGE_EXTERNAL_STORAGE权限,也无法访问其他应用在/sdcard/Android/目录下的私有存储区域,所以原本通过共享存储中转的方案本身就不可行,可选择以下适配方案:

  • 方案1:应用为debug可调试版本(测试场景最常用)
    完全绕开分区存储限制,不需要申请任何存储权限,操作步骤如下:
    1. 将本地xml配置文件推送到设备公共临时目录:
      adb push 本地文件路径/配置文件名.xml /data/local/tmp/
    2. 将临时目录的文件复制到应用私有shared_prefs目录:
      adb shell run-as com.myapp cp /data/local/tmp/配置文件名.xml shared_prefs/
    3. 修正文件权限保证应用可以正常读取:
      adb shell run-as com.myapp chmod 600 shared_prefs/配置文件名.xml
      操作完成后启动应用即可直接读取预置的SharedPreferences配置。
  • 方案2:测试设备已获取Root权限
    直接通过root身份操作私有目录即可:
    1. 推送本地文件到sdcard临时路径:
      adb push 本地文件路径/配置文件名.xml /sdcard/
    2. 执行root身份复制和权限修改:
    adb shell su -c "cp /sdcard/配置文件名.xml /data/user_de/0/com.myapp/shared_prefs/"
    adb shell su -c "chmod 600 /data/user_de/0/com.myapp/shared_prefs/配置文件名.xml"
    adb shell su -c "chown u0_aXXX:u0_aXXX /data/user_de/0/com.myapp/shared_prefs/配置文件名.xml"
    
    其中u0_aXXX替换为你的应用对应的uid,可通过adb shell dumpsys package com.myapp | grep userId查询。
  • 方案3:应用为Release包且设备未Root
    可以在应用代码中新增测试专属逻辑:内置FileProvider接收外部传入的配置文件,或者监听应用沙盒下特定目录的文件,启动时自动将该目录下的xml文件复制到shared_prefs目录,测试时直接用adb shell am start传递文件uri触发导入即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 19:06:04