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

Android Shell中Flutter Process.run()执行二进制文件权限问题解决方案

解决Android Shell中直接运行二进制文件的权限拒绝问题

问题根源

你的二进制文件必须通过linker64才能运行,核心原因是二进制的ELF解释器路径与Android系统实际的linker路径不匹配。Android的64位动态链接器通常位于/system/bin/linker64(部分高版本Android可能在/apex/com.android.runtime/bin/linker64),但你的二进制编译时可能指定了标准Linux的解释器(比如/lib64/ld-linux-x86-64.so.2),导致系统找不到对应解释器,最终触发权限拒绝类错误(本质是解释器不存在导致的执行失败,系统报错易误导为权限问题)。

验证方法

先确认二进制的解释器路径:

readelf -l your_binary | grep interpreter

如果输出路径不是Android的linker路径,即可印证该问题。

解决办法

方法1:重新编译二进制时指定正确的linker

若有权限重新编译,在编译命令中添加指定动态链接器的参数:

  • 针对GCC/Clang:
gcc -o your_binary your_source.c -Wl,--dynamic-linker=/system/bin/linker64

编译后的二进制会直接指向Android的linker,赋予可执行权限后就能像./your_binary一样直接运行。

方法2:用patchelf修改已有二进制的解释器

若无法重新编译,使用patchelf工具修改二进制的解释器路径:

  1. 将patchelf工具推送到Android设备(或在电脑上修改后再传输至设备)
  2. 执行修改命令:
patchelf --set-interpreter /system/bin/linker64 your_binary
  1. 确保二进制拥有可执行权限:
chmod +x your_binary

修改完成后即可直接运行该二进制文件。

额外注意事项

  • 使用Flutter的Process.run()时,需确保指定正确的工作目录(通过workingDirectory参数),或直接使用二进制的绝对路径执行,避免路径错误。
  • 部分Android设备的SELinux可能限制二进制执行,若修改解释器后仍有问题,可临时关闭SELinux测试(执行setenforce 0),但不建议长期关闭,最终需通过调整SELinux规则解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 04:15:17