A frp client for Android
一个Android的frp客户端
简体中文 | English
如果您想自定义frp内核,可以通过Github Actions或通过Android Studio编译
- 将您的apk签名密钥文件转为base64,以下为Linux示例
base64 -w 0 keystore.jks > keystore.jks.base64- fork本项目
- 转到Github项目的此页面:Settings > Secrets and variables > Actions > Repository secrets
- 添加以下四个环境变量:
KEY_ALIASKEY_PASSWORDSTORE_FILESTORE_PASSWORD
其中STORE_FILE的内容为步骤1的base64,其他环境变量内容请根据您的密钥文件自行填写 - Push提交自动触发编译或在Actions页面手动触发
- 在项目根目录创建apk签名密钥设置文件
keystore.properties, 内容参考同级的keystore.example.properties - 参考脚本说明运行
update_frp_binaries脚本以获取最新的frp内核文件,或者手动下载并放置到相应目录下 - 使用Android Studio进行编译打包
直接从frp的release里把对应ABI的Linux版本压缩包解压之后重命名frpc为libfrpc.so
项目不是在代码里调用so中的方法,而是把so作为一个可执行文件,然后通过shell去执行对应的命令
因为Golang的零依赖特性,所以可以直接在Android里通过shell运行可执行文件
在 frpc 配置中添加 loginFailExit = false 可以设置第一次登陆失败后不退出,实现多次重试。
可以适用于如下情况:开机自启动时,网络还未准备好,frpc 开始连接但失败,若不设置该选项则 frpc 会直接退出
从 v1.3.0 开始,arm64-v8a 架构的设备将改用 android 类型的 frp 内核以解决 DNS 解析失败的问题。
armeabi-v7a 和 x86_64 架构的设备仍然使用 linux 类型的 frp 内核,可能会存在 DNS 解析失败的问题,建议在配置文件使用 dnsServer 指定 DNS 服务器
App 按照原生 Android 规范设计,然而部分国产系统拥有更严格的后台管控,请手动在系统设置内打开相应开关。例如 ColorOS 16 退到后台会断开连接,在【应用设置->耗电管理->完全允许后台行为】之后恢复正常
需在设置中打开「在收到广播时启动/关闭」对应开关:
# 启动所有已开启自启动的配置
adb shell am broadcast -a io.github.acedroidx.frp.START io.github.acedroidx.frp
# 停止所有已开启自启动的配置
adb shell am broadcast -a io.github.acedroidx.frp.STOP io.github.acedroidx.frp
# 仅操作指定配置(带参数示例)
adb shell am broadcast -a io.github.acedroidx.frp.START -e TYPE frpc -e NAME example.toml io.github.acedroidx.frp
adb shell am broadcast -a io.github.acedroidx.frp.STOP -e TYPE frpc -e NAME example.toml io.github.acedroidx.frp使用前请在「设置 -> frp 配置读写接口」开启读/写开关,注意可能的配置密码泄露等安全风险。
# 列出全部配置(需要开启“允许读取”)
adb shell content query --uri content://io.github.acedroidx.frp.config
# 读取单个配置(需要开启“允许读取”)
adb shell content read --uri content://io.github.acedroidx.frp.config/frpc/example.toml
# 写入单个配置(需要开启“允许写入”)
# 将本地 example.toml 覆盖写入设备上的配置文件
adb shell content write --uri content://io.github.acedroidx.frp.config/frpc/example.toml < example.toml- 应用内快速验证:在主页配置列表长按“编辑”按钮,会用第三方应用通过 ContentProvider 打开该配置文件,同样需要先在设置中开启读/写开关。

