三星Tab S8无法推送文件至/Android/data/的问题求助
adb push 至三星Tab S8 /sdcard/Android/data/包目录失败的解决方案
问题现象
- 三星Tab S8(Android 12,One UI 4.1)执行
adb push * /sdcard/Android/data/com.xxx.xxx.xxx时,首次推送报错:adb: error: failed to copy 'Subfolder/subfile1.txt' to '/sdcard/Android/data/com.xxx.xxx.xxx/Subfolder/subfile1.txt': remote secure_mkdirs failed: Operation not permitted - 目标目录下子文件夹已创建,但文件未推送成功;二次执行推送则无报错,所有文件推送完成。
- 同版本系统的Tab S7无此问题。
权限差异分析
- Tab S8中,
/sdcard/Android/data/com.xxx.xxx.xxx下的子文件夹所有者为shell,权限位为rws;Tab S7对应文件夹所有者为应用专属用户u0_xxxx,权限位rwx。 - 在Tab S8的
/sdcard/Android/data下创建的文件夹会自动归属shell用户,且无法通过chmod修改权限。
正式解决方案
方案1:自动化预创建目录结构后推送
将临时方案脚本化,自动完成目录创建与文件推送:
# 本地遍历所有子目录,在设备目标路径预创建 find . -type d ! -name "." | while read dir; do adb shell mkdir -p "/sdcard/Android/data/com.xxx.xxx.xxx/$dir" done # 执行文件推送 adb push * /sdcard/Android/data/com.xxx.xxx.xxx
方案2:tar打包推送后解压(适配可调试应用)
通过打包文件并在应用用户上下文解压,确保权限匹配:
- 本地打包文件:
tar -czf temp.tar.gz ./* - 推送压缩包至设备临时目录:
adb push temp.tar.gz /sdcard/temp/ - 切换到应用用户权限解压(需应用为可调试状态):
adb shell run-as com.xxx.xxx.xxx tar -xzf /sdcard/temp/temp.tar.gz -C /sdcard/Android/data/com.xxx.xxx.xxx/ - 清理临时文件:
adb shell rm /sdcard/temp/temp.tar.gz rm temp.tar.gz
方案3:临时目录中转后移动文件
利用设备内文件移动规避跨用户权限冲突:
- 推送文件至设备临时目录:
adb push * /sdcard/temp/ - 移动文件至目标目录:
adb shell mv /sdcard/temp/* /sdcard/Android/data/com.xxx.xxx.xxx/ - 清理临时目录:
adb shell rm -rf /sdcard/temp/
补充说明
该问题源于三星Tab S8在One UI 4.1中对/sdcard/Android/data目录的权限管控升级,adb push创建子目录时使用的shell用户与应用专属用户权限冲突,导致首次推送失败。上述方案均通过规避权限冲突场景解决问题。
内容的提问来源于stack exchange,提问作者Neil Steven
相关产品推荐
相关产品推荐

