Android模拟器读取adb推送文件遇EACCES权限拒绝问题求助
问题分析与解决
核心原因是adb推送至模拟器的文件默认所有者为root用户,而Android应用是以普通应用用户(如u0_aXXX)身份运行的,默认没有权限读取root所属的文件。真机上系统会自动处理adb推送文件的权限适配,所以不会出现这个问题。
解决方法
方法1:修改文件所有者为应用用户
- 先获取你的应用对应的用户ID:
输出类似adb shell dumpsys package com.your.package.name | grep userIduserId=10156,对应的用户就是u0_a156(格式为u0_a+userId后四位)。 - 修改文件所有者:
替换其中的adb shell chown u0_aXXX:u0_aXXX /sdcard/Documents/myfile1.txtu0_aXXX为你获取到的应用用户。
方法2:放宽文件权限(快速测试用)
直接修改文件权限,让所有用户都能读写:
adb shell chmod 666 /sdcard/Documents/myfile1.txt
这种方式无需获取应用用户ID,适合快速验证,但从安全性角度不建议在正式环境使用。
补充说明
你自己用File API创建的文件,所有者是应用自身的用户,所以应用天然拥有读写权限,这就是为什么能正常读取的原因。
内容的提问来源于stack exchange,提问作者user3863488
相关产品推荐
相关产品推荐

