在你的 Android 手机上运行 Golang 程序

2023-11-05

在我们日常开发中,运行一个服务,都是在 shell 或 cmd 下执行命令,像是使用 go run main.go 直接编译运行,或是 go build 编译生成可执行文件后,以 ./xxx 方式运行。

Go 支持交叉编译生成各平台的可执行文件。那有没有想过如何把你写的程序编译后跑在 Android 上呢。

废话少说,流程分解:

00eae8d583fb9444d9722c8786ec123a.png

接下来逐一击破。

main.go 中创建了一个 http 服务,监听 8080 端口,访问 / 路由时,返回预设的 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) 架构,如果不确定,可以进入 Android shell 里查看,下面再讲。

本文环境为 win10+cmd 。交叉编译生成适用于 linux arm64 的二进制文件待用。

set CGO_ENABLED=0
set GOOS=linux
set GOARCH=arm64
go build -o server main.go

第二步,把编译生成的 server 文件拷贝到 Android 的 /data/local/tmp/ 目录下。

第三步,进入到 Android 的 /data/local/tmp/ 目录,执行 ./server 启动服务。

完成结束。

fe8a95ea6531e223ac3dd90fa8cb6c24.gif


???哈哈哈,别急。第二步和第三步其实需要借助一个工具。

那就是 Android 调试桥 (adb) ,adb 命令就可用于执行各种设备操作(例如安装和调试应用),并提供对 Unix shell(可用来在设备上运行各种命令)的访问权限。Android 开发者就对这玩意很熟了,因为装完 Android SDK 会默认集成了 adb 工具。但是我们没有的话,就得单独安装了。

可以到 http://adbdownload.com/ 进行下载

ccc57e9798e2590cffd1e692253aa925.png


同样以 win10 为例,下载后解压到任意目录下,如:

845c25c3fa8ff8222f5301c4e5d3cdff.png


加到环境变量中,方便我们随时随地使用。

4aa4f25c2c4839dd7c5b2c2db1f13296.png


验证是否安装成功:

fce5e7cde3f7d03cd339009cc40f0703.png


安装完成 adb 后,还需要使用 adb 连接上我们的 Android 手机。连接前需要开启手机的开发者模式的 USB 调试选项,具体开启方式自行机型百度。

296d272d583ba7e80dbd4fd82f8297dc.png


使用 USB 连接电脑和手机后,此时手机会提示是否允许 USB 调试

e61957176c8c300e97eafbedb8843300.png

允许确定即可。回到电脑终端,使用 adb devices 可查看已连接的设备列表

1e7bf2eb9169e88ed3d2e1318a29966c.png

回归我们的正题了。继续第二步,借助 adb 拷贝 server 文件到 Android 内的 /data/local/tmp/ 目录下。

adb push server /data/local/tmp/


e5da1359dec4cf20b5777abc8a326778.png

第三步,进入到 Android 的 shell 终端,到 /data/local/tmp/ 目录,执行 ./server 启动服务。

adb shell
# 以下命令在 Android shell中执行
cd /data/local/tmp
chmod 755 server
./server


9ef0b40856e36fb9e3139f9fb554b8f8.png

到这,Android 就跑起了我们用 Go 编写的程序了。可以使用浏览器访问:

9febe42527b1825e8459e3ec43c35a00.png


总结:

        将 go 代码编译成 Android 平台的可执行文件(linux,arm64),可通过 adb shell getprop ro.product.cpu.abi 确定具体系统架构。利用 adb 工具将可执行文件拷贝到 Android 的 /data/local/tmp/ 下并赋予权限,最后进入到 shell 运行程序。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在你的 Android 手机上运行 Golang 程序 的相关文章

随机推荐

  • mysql增加用户

    mysql增加用户 增加用户 注意 和上面不同 下面的因为是MYSQL环境中的命令 所以后面都带一个分号作为命令结束符 格式 grant select on 数据库 to 用户名 登录主机 identified by 密码 第一种 增加一个
  • CM5501高效四开关降压-升压控制器(升降压芯片)

    CM5501 High Efficiency 4 Switch Buck Boost Controller Description CM5501 is a synchronous 4 switch Buck Boost controller
  • elasticsearch-索引与分片实现原理

    添加索引 我们往 Elasticsearch 添加数据时需要用到 索引 保存相关数据的地方 索引实际上是指向一个或者多个物理 分片 的逻辑命名空间 一个 分片 是一个底层的 工作单元 它仅保存了全部数据中的一部分 在分片内部机制中 我们将详
  • InheritableThreadLocal类详解

    我们在使用ThreadLocal类的时候 可以保证各个线程使用自己的数据 而不相互干扰 但是如果我们有这样的一个需求 就是各个线程相互不干扰的情况下 各个线程的子线程可以访问到当前线程中的值 对于这个子线程来说就是访问父线程 public
  • Scrum那些事 - 什么是Scrum?

    1 什么是Scrum Scrum是敏捷开发方法论里面的一个具体实施框架 Scrum是一个包括了一系列的实践和预定义角色的过程骨架 是一种流程 计划 模式 用于有效率地开发软件 Scrum的框架中包含3种角色 3个产出 5个活动和5种价值观
  • 1.业务层 、服务层、数据层、表现层

    一般说来 业务逻辑层中的模块包含了系统所需要的所有功能上的算法和计算过程 并与数据访问层和表现层交互 抽象的说 业务逻辑层就是处理与业务相关的部分 一般来说 业务层包含一系列的执行与数据的操作 例如 开具发票 添加客户或下订单等 服务层就是
  • 《我的眼睛--图灵识别》第十章:实战演练:文字类识别

    我的眼睛 图灵识别 第十章 实战演练 文字类识别 1 标准数字 标准数字 Standard Numbers 是指10个数字使用的都是同属一种字体 它们的数字没有发生变形 没有扭曲 没有错位 存在有些变色但影响不大 字与字之间的间隔距离一样
  • Elasticsearch的简单入门:(二)ES基础

    Elasticsearch的简单入门 一 ES简介与安装 https blog csdn net kavito article details 88289820 前面我们把环境准备好了 下面继续学习ES的索引操作 2 操作索引 2 1 基本
  • Oracle VM VirtualBox安装Ubuntu虚拟机的过程记录

    一 版本信息 操作系统 Windows 10 家庭版 Oracle VM VirtualBox 版本 6 0 10 r132072 Qt5 6 2 Ubuntu 16 04 6 desktop amd64 二 创建过程 开始新建虚拟机 点击
  • 循环结构程序设计-第4关:C循环-水仙花数

    任务描述 本关任务 求出所有的水仙花数 提示 所谓水仙花数是指一个三位数 其各位数字的立方和等于该数字本身 比如153是一个水仙花数 因为153 1 3 5 3 3 3 注意 本题不需要输入语句 由于网站限制要求一定要有输入输出示例 但同学
  • 力扣每日一题【电话号码的字母组合】

    电话号码的字母组合 b站视频 class Solution public vector
  • ChatGPT将彻底改变人们的工作方式

    来源 企业网D1Net 关注公众号 人工智能学派 加入我们社群 免费领取官方chatGPT账号 自从OpenAI公司推出ChatGPT以来 它以风暴般的速度迅速影响了大量用户的日常工作和生活 并且已经通过医学院考试 软件工程师编码面试 律师
  • gorm记一次“mysql写入 Error 1366 (HY000): Incorrect string value”错误

    记一次 mysql写入 Error 1366 HY000 Incorrect string value 错误 环境go gorm docker mysql 写入数据库的内容为中文时提示Error 1366 HY000 Incorrect s
  • [管理与领导-88]:IT基层管理者 - 扩展技能 - 5 - 职场丛林法则 -2- 在职场丛林中的黑暗森林法则,在没有弄清楚情况前保持低调地调研

    前言 管理者空降到一个新的环境中 对环境中的人和事都不熟悉 此时的管理者不适合新官上任三把火 而应该意识到 环境中处处充满陷阱 危险 冷箭和一双双冷眼旁观的眼睛和暗箭 一 黑暗森林法则 黑暗森林法则 也被称为刘慈欣的科幻小说 三体 系列中提
  • Vue3的emit(‘update:modelValue‘)

    目录 概述 正文 一 v model 在原生 input 上的用法 二 使用v model在组件上实现双向绑定 通过计算属性实现 概述 在Vue3中 子组件可以通过 emit自定义事件来向父组件传递数据 在这种情况下 父组件可以通过监听子组
  • 查看服务器用户所占空间

    查看服务器个人账户所占空间大小 du h max depth 1 wangsx localhost du h max depth 1 0 mozilla 32K config 46G project 3 7G software 0 data
  • Spring中IOC容器

    IOC入门案例思路分析 1 管理什么 Service和Dao 2 如何将管理的对象存放到IOC容器 配置applicationContext xml 第二步 3 将管理的对象存放到IOC容器 如何获取IOC容器 第三步 4 获取到IOC容器
  • Dos环境变量修改

    批处理修改环境变量 修改用户变量 系统变量 全局变量 永久 临时设置环境变量 设置Java环境变量 关于路径问题 在执行批处理命令时 需要用到路径变量 这里先说明路径相关的变量参数 echo 当前盘符 d0 echo 当前盘符和路径 dp0
  • 6.830 / 6.814: Syllabus 2021 - MIT Lab 2 - SimpleDB Operators

    文章目录 1 参考链接 2 SimpleDB Architecture and Implementation Guide 2 1Filter and Join 2 2 Aggregates 2 3HeapFile Mutability 2
  • 在你的 Android 手机上运行 Golang 程序

    在我们日常开发中 运行一个服务 都是在 shell 或 cmd 下执行命令 像是使用 go run main go 直接编译运行 或是 go build 编译生成可执行文件后 以 xxx 方式运行 Go 支持交叉编译生成各平台的可执行文件