Android部分设备转换图片时运行ffmpeg报Permission denied错误如何处理?
错误原因
核心报错为Permission denied (error=13),本质是应用尝试执行私有目录下的FFmpeg二进制文件时被系统拒绝,具体触发原因如下:
- FFmpeg二进制文件释放到本地存储时,未被授予可执行权限
- 设备运行Android 10(API 29)及以上系统,官方默认禁止应用在私有files目录下执行独立二进制文件
- 设备搭载小米、华为等厂商定制ROM,额外新增了私有目录执行可执行文件的限制
解决方案
- 手动添加可执行权限
在FFmpeg库初始化完成、二进制文件释放到本地后,执行以下代码申请权限:File ffmpegFile = new File(getFilesDir(), "ffmpeg"); if (ffmpegFile.exists()) { // 第一个参数为是否授予执行权限,第二个参数为是否仅当前用户可用 ffmpegFile.setExecutable(true, false); } - 替换老旧FFmpeg依赖
你当前使用的com.github.hiteshsondhi88.libffmpeg库已停止维护多年,不兼容高版本Android权限规则。建议切换为通过JNI直接调用FFmpeg原生so库的实现方案,不需要单独执行二进制文件,从根源规避权限问题。 - 调整二进制文件存放路径
部分厂商ROM对应用私有cache目录的执行限制更宽松,可尝试将FFmpeg二进制文件释放到cache目录,授予执行权限后再调用。 - 适配高版本系统规则
若应用targetSdkVersion >=29,建议重构图片转换逻辑,直接调用FFmpeg原生接口实现能力,彻底放弃执行独立二进制文件的方案。
内容的提问来源于stack exchange,提问作者Bhauraj Biradar
相关产品推荐
相关产品推荐

