4

编译安卓版本frpc

 1 year ago
source link: https://www.wyr.me/post/737
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

编译安卓版本frpc - 轶哥

编译安卓版本frpc

frp是一个高性能的反向代理工具,它可以帮助我们穿透NAT和防火墙,实现内网穿透。它采用客户端-服务器模式,在内网中部署客户端程序,将需要访问的端口映射到公网上的服务器上,即可通过公网地址访问内网服务。同时,frp还可以作为正向代理使用,从而实现某些特定场景下的代理功能。frpc是frp的客户端程序。

在本文中,我们本文将详细介绍如何编译开源项目frpc的安卓版本。在禁用CGO的情况下,编译一个适用于Android操作系统、基于ARM64架构的可执行文件,同时使用 -trimpath-ldflags "-s -w" 选项来减小二进制文件的大小,并在安卓设备上运行它,以实现在嵌入式设备(自助终端设备)上使用frpc的功能。

在开始编译之前,需要先确保环境已经正确搭建。具体来说,需要满足以下条件:

如果还没有完成以上步骤,请先完成相关配置后再继续进行后续操作。

克隆frpc

首先,我们需要从GitHub上克隆frp项目:

git clone https://github.com/fatedier/frp.git
cd frp

编译frpc

接下来,我们只需要执行下述命令即可编译frpc。编译完成后,我们可以在./release目录下找到生成的frpc_android_arm64可执行文件。

env CGO_ENABLED=0 GOOS=android GOARCH=arm64 go build -trimpath -ldflags "-s -w" -o ./release/frpc_android_arm64 ./cmd/frpc

编译命令解析

现在,我们来分析一下这个编译命令的各个部分:

这个命令用于设置环境变量。在这个例子中,我们用它来设置CGO_ENABLED的值为0,以禁用CGO库。

CGO_ENABLED=0

CGO是Go语言提供的一种机制,用于在程序中调用C代码。但是,在交叉编译时,由于不同平台的C库的差异性,会导致CGO编译失败。因此,通过将CGO_ENABLED的值设置为0,我们可以禁用CGO,避免这种问题的发生。

GOOS=android

GOOS是一个环境变量,用于指定目标操作系统的名称。在这个例子中,我们将其设置为android,表示要编译出一个适用于Android系统的可执行文件。

GOARCH=arm64

GOARCH是一个环境变量,用于指定目标CPU架构的类型。在这个例子中,我们将其设置为arm64,表示要编译出一个基于ARM64架构的可执行文件。

go build

这个命令用于编译Go语言程序。在这个例子中,我们将用它来编译frpc的安卓版本。

-trimpath

这个选项用于削减可执行文件中的路径信息。由于路径信息可能包含机器的敏感信息,因此我们可以使用这个选项来删除它们,提高二进制文件的安全性。

-ldflags "-s -w"

这个选项用于在编译时设置链接器的参数。其中,-s选项表示省略符号表和调试信息,-w选项表示省略DWARF调试信息。这两个选项可以有效地减小二进制文件的大小。

-o ./release/frpc_android_arm64

这个选项用于指定编译输出的文件名和路径。在这个例子中,我们将编译结果保存到 ./release/frpc_android_arm64 文件中。

./cmd/frpc

这个参数用于指定要编译的Go语言程序的相对路径。在这个例子中,我们将编译 cmd 目录下的 frpc 程序。

在安卓设备上运行frpc

将生成的frpc_android_arm64文件复制到安卓设备上,并赋予执行权限:

adb push ./release/frpc_android_arm64 /data/local/tmp/frpc
adb shell chmod +x /data/local/tmp/frpc

然后,在安卓设备上启动frpc:

adb shell /data/local/tmp/frpc -c /sdcard/frpc.ini

注意,我们需要提供一个配置文件frpc.ini,该文件包含了frpc所需要的配置项。具体的配置项可以参考frp的官方文档。

本文介绍了如何使用 go build 命令编译开源项目frpc的安卓版本。通过该命令,我们可以指定目标操作系统和CPU架构,并禁用CGO以避免交叉编译时的问题。同时,使用 -trimpath-ldflags "-s -w" 选项可以有效地减小二进制文件的大小。希望本文能够帮助读者更好地理解这个编译过程,并为大家提供参考。

当然,在实际使用过程中,我们还需要考虑一些安全问题。例如,如何保证frpc配置文件的安全性?如何避免frpc被滥用造成的安全风险?这些问题需要我们在实际操作中进行综合考虑和处理。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK