Android手机上搭建一个http服务器

看到标题是不是有点懵,在Android手机上搭建一个http服务器???没错,我们就是要在Android手机上搭建一个http服务器。

看到标题是不是有点懵,在Android手机上搭建一个http服务器???

你TM在逗我
没错,我们就是要在Android手机上搭建一个http服务器。提到http服务器一般第一反应是Apache,nginx Android上也能运行Apache,nginx了??? Android手机上当然不能运行这些服务器了,这次在Android上运行的是用Golang写的一个简单的http服务器。因为Golang可以跨平台编译,我尝试着把系统选择成Linux,CPU架构选择arm,然后在手机上运行,然后Android手机上真的运行起了一个http服务器! 惊喜 回到正题,要想开发编写golang,首先要配置好golang的开发环境

我是在Ubuntu下开发的,新建service.go文件

 1package main
 2
 3import (
 4        "net/http"
 5       )
 6
 7func main() {
 8    http.HandleFunc("/",myResponse)
 9    http.ListenAndServe("127.0.0.1:8888",nil)
10}
11
12func myResponse(w http.ResponseWriter,r* http.Request)  {
13    w.Write([]byte("<html><center> <font size=\"40\">hello I am go service</font></center></html>"))
14}

不熟悉go的同学注意下,不要随意回车换行 不要随意回车换行 不要随意回车换行 因为go有点像Python,不是用 “;” 结束的 简单解释一下

http.HandleFunc("/",myResponse) 第一个参数是注册http服务的URL,这里我们填写 "/", 在访问的时候直接 localhost:8888 就行了,如果填 "/test" 访问的时候URL为localhost/test:8888"

http.ListenAndServe("127.0.0.1:8888",nil) 第一个参数是要监听的ip和端口,第二个填 nil 就好了

然后编译运行试试,在本机上运行的程序用默认的编译参数就行 go build service.go

然后运行 ./service

在浏览器中输入URL,成功访问到

下一步我们把这个程序移植到Android上,Android手机必须要有root权限,手机没有root,而又不想root的同学可以用模拟器,只要CPU的指令集参数改一下就行,先在手机上运行一下,我的手机是荣耀6,CPU是海思920,百度到海思920的指令集是arm32的,好的,编译一个 在编译之前我们先修改一下刚才编译的程序的名

执行 GOOS="linux" GOARCH="arm" go build service.go 得到一个可执行文件,用 file 命令看一下 file service

1service: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), statically linked, not stripped

我们看到这个文件是一个32位的arm程序。ok,复制的Android手机上试试 需要用到的软件

Screenshot_2018-04-08-19-17-19.png

“juiceSSH” 是用来模拟Linux的shell命令的,“RE文件管理器” 用来修改文件的权限,在Android上chmod命令不起作用。 先复制到根目录,然后修改文件的权限

Screenshot_2018-04-08-19-18-11.png

Screenshot_2018-04-08-19-18-20.png

然后在juiceSSH里运行,然后去浏览器输入URL看看,

Screenshot_2018-04-08-19-19-43.png

没问题 接下来编译一个模拟器上的,我用的genymotion,运行的是Google nexus5手机系统,我百度了一下,nexus5用的是高通骁龙800CPU,然后坑来了,骁龙800是arm32的指令集,按理说直接把那个程序复制进去就可以运行了,但是提示 /system/bin/sh: ./service_arm32: not executable: 32-bit ELF file

后来想了想CPU用的是电脑上的,那编译成 X64 的试试。还是不行,换成 X86 的试试。终于成功了。原来是指令要用电脑CPU的,多少位需要模拟器的。

执行 GOOS="linux" GOARCH="386" go build service.go

复制到模拟器中,然后跟在手机一样,复制到根目录,添加权限。然后用adb shell运行,然后在模拟器的浏览器中发现可以访问

genymotion
好了,我们已经在Android上运行一个http服务器了,是不是比较简单

发表了56篇文章 · 总计128.44k字
本博客已稳定运行
© QX
使用 Hugo 构建
主题 StackJimmy 设计