close
X

在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的開發環境,golang的配置傳送門
我是在Ubuntu下開發的,新建service.go檔案

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

不熟悉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,成功訪問到

chrome
下一步我們把這個程式移植到Android上,Android手機必須要有root權限手機沒有root,而又不想root的同學可以用模擬器,只要CPU的指令集引數改一下就行,先在手機上執行一下,我的手機是榮耀6,CPU是海思920,百度到海思920的指令集是arm32的,好的,編譯一個
在編譯之前我們先修改一下剛才編譯的程式的名
執行GOOS="linux" GOARCH="arm" go build service.go
得到一個可執行檔案,用file命令看一下file service

service: 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伺服器了,是不是比較簡單


分享是一種美德,喜歡就幫我們讚一下支持吧~

為你推薦