相信很多人手上都有一些闲置的手机,那可不可以在这些手机上搭建一个服务器呢?下面我们分享一种搭建简易服务器的思路。
ROOT并非必须,但是ROOT后我们可以更方面的进行保活等操作,各个品牌的手机root方法不尽相同,下面简单介绍下小米手机的一种ROOT办法。(注意,手机Root后会变的不再安全,非专业人士不要操作)
因为后续需要输入recovery镜像,所以我们需要首先解锁bootloader锁。
直接在小米的官网上申请就行,按照操作提示一步一步操作就好
http://www.miui.com/unlock/index.html
这里我们选择刷入第三方的recovery工具,可以在下方找到各个手机型号的第三方recovery文件
https://twrp.me/Devices/
当下载完成后,按照以下的操作步骤刷入recovery镜像。
进入bootloader模式
adb reboot bootloader
刷入recovery镜像
fastboot flash recovery recovery.img
重启进入recovery模式
fastboot boot recovery.img
等待进入recovey模式。 选择高级-> ROOT系统就好

至此,我们ROOT手机的动作已经完成。
NanoHTTPD是一个Java的微型HTTP服务器库,利用它可以很方便的在Android中启动一个本地服务器。
github地址如下
https://github.com/NanoHttpd/nanohttpd
module的build.gradle增加如下修改
dependencies {
implementation 'org.nanohttpd:nanohttpd:2.3.1'
}
然后继承NanoHTTPD类实现服务端
public class TmpWebServer extends NanoHTTPD {
public TmpWebServer(int port) {
//本地服务器的端口
super(port);
}
@Override
public Response serve(IHTTPSession session) {
//获取请求的URL
Uri uri = Uri.parse(session.getUri());
//获取请求的method
Method method = session.getMethod();
if (Method.PUT.equals(method) || Method.POST.equals(method)) {
Map<String, String> postData = new HashMap<>();
//获取POST请求的body
session.parseBody(postData);
//这里可以做逻辑处理
//返回Response
return newFixedLengthResponse(Response.Status.OK, NanoHTTPD.MIME_PLAINTEXT, GsonManager.instance().toJson(apiHandler.response(classLoader, parms)));
}
}
}
上面我们通过NanoHTTPD搭建了一个微型服务器,但是我们如何在公网上访问这个微型服务器呢?这里我们利frp实现内网和公网的端口映射。
frp是一个可用于内网穿透的高性能反向代理工具,支持TCP、UDP协议,为HTTP和HTTPS应用协议提供了额外的支持能力,并支持点对点穿透,github地址如下:
https://www.jianshu.com/p/e0581ee84323
我们在GitHub的release页面可以找最新的版本下载。下载解压后会发现有以下文件

这几个文件的作用如下
我们首先打开frps.ini配置服务端
[common]
bind_port = 9780 //用来与客户端建立透传连接的端口
vhost_http_port = 9781 //公网HTTP请求的端口
然后配置客户端
[common]
server_addr = 47.111.173.166 //服务端的ip地址
server_port = 9780 //服务端映射的端口号
[web]
type = http
local_ip = 127.0.0.1
local_port = 8083 //客户端的端口号,即步骤2中TmpWebServer设置的端口号
custom_domains = 47.111.173.166
完成配置之后,我们在服务端执行下面命令开启透传
nohup ./frps -c frps.ini >/dev/null 2>log &
在客户端执行下面命令开启透传
nohup ./frpc -c frpc.ini >/dev/null 2>&1 &
至此,我们一台运行在Android手机上的微型服务器就搭建完成了!