使用adb run-as命令绕过权限限制

9次阅读
没有评论

解决方案:使用 adb run-as 命令将文件推送到指定路径

问题描述:

开发者尝试通过 adb push 将保存的游戏数据文件推送到 Nexus 4 手机上 Final Fantasy III 游戏的存储目录中,但遭遇权限受限错误。

D:\AndroidSDK\sdk\platform-tools>adb push d:\save.bin /data/data/com.square_enix.android_googleplay.FFIII_GP/files/save.bin
failed to copy 'd:\save.bin' to '/data/data/com.square_enix.android_googleplay.FFIII_GP/files/save.bin': Permission denied

手机搭载了最新版系统(4.3),且状态为未越狱。开发者希望通过 adb 命令完成该操作,而避免因游戏文件夹权限问题进行系统的完全越狱。

解决方案:

  1. 使用 run-as 指定应用程序包名

由于 Nexus 4 系统存在 run-as API 上的一个已知 bug,导致无法直接使用 adb push 直接完成该操作。但可以通过运行 adb shell run-as 命令来临时切换用户权限以执行所需的文件复制任务。

  • 使用 run-as package-name 命令进入指定应用的上下文环境:
    adb shell run-as com.square_enix.android_googleplay.FFIII_GP

在 shell 提示符中,使用命令将文件从外部存储复制到目标路径:

  1. 在设备 Shell 中执行必要的操作

  2. 运行 cp 命令将文件从设备的 /sdcard/ 外部存储位置移动或复制到游戏的内部存储位置:
    cp /sdcard/save.bin ./files/save.bin

整个流程可转化为如下完整的命令序列:

adb shell run-as com.square_enix.android_googleplay.FFIII_GP \
cp /sdcard/save.bin ./files/save.bin

这一步骤在未越狱、最新版本系统中可以暂时绕过权限限制来完成所需的操作。

小结:

使用 run-as 方法尽管会遇到 bug,却能在未越过完整系统权限的情况下,处理文件管理任务。建议开发者考虑升级到新系统的补丁或更晚的版本,以便解决此问题,在特定场景下也可能结合其他工具和策略实现相同效果。

正文完