解决方案:使用 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
命令完成该操作,而避免因游戏文件夹权限问题进行系统的完全越狱。
解决方案:
- 使用
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 提示符中,使用命令将文件从外部存储复制到目标路径:
-
在设备 Shell 中执行必要的操作
-
运行
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,却能在未越过完整系统权限的情况下,处理文件管理任务。建议开发者考虑升级到新系统的补丁或更晚的版本,以便解决此问题,在特定场景下也可能结合其他工具和策略实现相同效果。
正文完