在你的 Android 手機(jī)上運(yùn)行 Golang 程序
點(diǎn)擊關(guān)注公眾號(hào),Java干貨及時(shí)送達(dá)
在我們?nèi)粘i_發(fā)中,運(yùn)行一個(gè)服務(wù),都是在 shell 或 cmd 下執(zhí)行命令,像是使用go run main.go直接編譯運(yùn)行,或是go build編譯生成可執(zhí)行文件后,以./xxx方式運(yùn)行。
Go 支持交叉編譯生成各平臺(tái)的可執(zhí)行文件。那有沒有想過如何把你寫的程序編譯后跑在 Android 上呢。
廢話少說,流程分解:

接下來逐一擊破。
main.go 中創(chuàng)建了一個(gè) http 服務(wù),監(jiān)聽 8080 端口,訪問/路由時(shí),返回預(yù)設(shè)的 JSON 文本。
package?main
import?(
??"github.com/gin-gonic/gin"
??"log"
??"net/http"
)
func?main()?{
??r?:=?gin.Default()
??r.GET("/",?func(c?*gin.Context)?{
????c.JSON(http.StatusOK,?gin.H{
??????"msg":?"hello?world",
????})
??})
??log.Fatalln(r.Run(":8080"))
}第一步,編譯,簡單。Android 都是 linux arm64 (arm) 架構(gòu),如果不確定,可以進(jìn)入 Android shell 里查看,下面再講。
本文環(huán)境為 win10+cmd 。交叉編譯生成適用于 linux arm64 的二進(jìn)制文件待用。
set?CGO_ENABLED=0
set?GOOS=linux
set?GOARCH=arm64
go?build?-o?server?main.go
第二步,把編譯生成的 server 文件拷貝到 Android 的/data/local/tmp/目錄下。
第三步,進(jìn)入到 Android 的/data/local/tmp/目錄,執(zhí)行./server啟動(dòng)服務(wù)。
完成結(jié)束。

???哈哈哈,別急。第二步和第三步其實(shí)需要借助一個(gè)工具。
那就是 Android 調(diào)試橋 (adb) ,adb 命令就可用于執(zhí)行各種設(shè)備操作(例如安裝和調(diào)試應(yīng)用),并提供對(duì) Unix shell(可用來在設(shè)備上運(yùn)行各種命令)的訪問權(quán)限。Android 開發(fā)者就對(duì)這玩意很熟了,因?yàn)檠b完 Android SDK 會(huì)默認(rèn)集成了 adb 工具。但是我們沒有的話,就得單獨(dú)安裝了。
可以到http://adbdownload.com/進(jìn)行下載
同樣以 win10 為例,下載后解壓到任意目錄下,如:
加到環(huán)境變量中,方便我們隨時(shí)隨地使用。
驗(yàn)證是否安裝成功:
安裝完成 adb 后,還需要使用 adb 連接上我們的 Android 手機(jī)。連接前需要開啟手機(jī)的開發(fā)者模式的 USB 調(diào)試選項(xiàng),具體開啟方式自行機(jī)型百度。

使用 USB 連接電腦和手機(jī)后,此時(shí)手機(jī)會(huì)提示是否允許 USB 調(diào)試

允許確定即可。回到電腦終端,使用 adb devices 可查看已連接的設(shè)備列表
回歸我們的正題了。繼續(xù)第二步,借助 adb 拷貝 server 文件到 Android 內(nèi)的/data/local/tmp/目錄下。
adb?push?server?/data/local/tmp/
第三步,進(jìn)入到 Android 的 shell 終端,到/data/local/tmp/目錄,執(zhí)行./server啟動(dòng)服務(wù)。
adb?shell
#?以下命令在?Android?shell中執(zhí)行
cd?/data/local/tmp
chmod?755?server
./server
到這,Android 就跑起了我們用 Go 編寫的程序了。可以使用瀏覽器訪問:

總結(jié):
????????將 go 代碼編譯成 Android 平臺(tái)的可執(zhí)行文件(linux,arm64),可通過adb shell getprop ro.product.cpu.abi確定具體系統(tǒng)架構(gòu)。利用 adb 工具將可執(zhí)行文件拷貝到 Android 的/data/local/tmp/下并賦予權(quán)限,最后進(jìn)入到 shell 運(yùn)行程序。
往 期 推 薦
3、在 IntelliJ IDEA 中這樣使用 Git,賊方便了!
4、計(jì)算機(jī)時(shí)間到底是怎么來的?程序員必看的時(shí)間知識(shí)!
點(diǎn)分享
點(diǎn)收藏
點(diǎn)點(diǎn)贊
點(diǎn)在看





