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

Android 13中使用Apache Commons Net FTP遇EPERM权限问题求助

解决Android 13下FTPClient.connect()报EPERM权限错误的问题

针对你遇到的java.net.SocketException: socket failed: EPERM (Operation not permitted)错误,结合Android 13的系统特性,按以下步骤排查解决:

1. 确认清单权限配置位置

确保你添加的权限放在<manifest>根标签下,而非<application>标签内部,正确格式如下:

<manifest ...>
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

    <application ...>
        <!-- 你的应用组件配置 -->
    </application>
</manifest>

2. 允许明文FTP流量(关键)

Android 9及以上版本默认禁止明文网络流量(非HTTPS/FTPS),标准FTP属于明文协议。需在<application>标签中添加如下配置:

<application
    ...
    android:usesCleartextTraffic="true">
    ...
</application>

若你的FTP服务器支持FTPS(加密FTP),建议优先使用FTPClient的SSL/TLS连接方式,避免依赖明文流量配置。

3. 避免在主线程执行网络操作

Android从3.0开始严格禁止在主线程发起网络请求,即使权限配置正确,主线程执行ftp.connect()也可能触发异常(部分场景会包装为权限类错误)。需将FTP连接逻辑放到子线程,以下是Kotlin协程的实现示例:

lifecycleScope.launch(Dispatchers.IO) {
    val ftp = FTPClient()
    try {
        ftp.connect(localAddress, port)
        Log.w("FTP", "connected")
    } catch (e: Exception) {
        e.printStackTrace()
    }
}

4. 检查系统层面的网络限制

进入设备设置 > 应用 > 你的应用 > 流量使用情况,确认:

  • 未开启「限制后台数据」
  • 未勾选「禁止应用联网」(部分定制ROM提供该选项)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 15:53:16