用 Golang 开发 Android 应用(非 gomobile)(一 )—— 基本环境配置

gomobile go 调用java_一步一步使用Android调用Golang 前提需要了解的在Android中运行go代码,需要用到一个工具gomobile,后面会说到安装方式。Go开发环境,配置好GOPATH和GOROOT等。AndroidSDK和AndroidNDK准备好Go代码首先要准备好GO的开发坏境,并且配置好GOPATH,咱们的项目叫mobilegomkdir code/mobilegocd code/mobilegoecho export GOPATH=\$G... 阅读详情
AI摘要

本文介绍如何使用Golang开发Android应用,覆盖基本环境配置、UI、Storage、Sensor、Audio、Camera和OpenCV使用等内容。通过配置编译环境,包括Go、NDK、工具链和编译选项,实现从代码到APK的全过程。

——题记

遭遇经济寒冬加上中年危机(看我在优快云的注册时间,就知道本人有多“少年”了^_^),所以简历看得人多,有兴趣聊聊的人少。有人会说是没转到管理的原因,哥可是10几年的管理经验!好了,还是开始正能量,既然暂时闲下来,所以打算把以前业余做的一个东西给大家分享一下。要来就来独特的(应新广告法的要求,不能用绝对字眼 ^_^),有兴趣的可以试试、玩玩。

计划按以下的内容更新

基本环境配置

Golang 和 android 有什么关系?

        它们之间看似没什么关系,除了他们都是 google 出品。当然 go 支持编译成 android 的可执行文件和动态库,所以一般 go 在 android 中应用场景是用来写一些运行库,后台服务或一些工具程序等。
        现在让我们来突破一下,如果想做个简单应用,不管是用来和朋友之间私密聊天的应用,还是用来做个随身带的小工具应用,或利用手机摄像头、陀螺仪等各种sensor的优势开发一些有创造力的应用,也可以是一些脑洞大开的应用。但是不会 Android 应用开发,一看到什么 Android 4大组件,resources,layout 等等就不想继续。
        可以不用了解这些,跟我用 go 来写应用吧。看完这篇之后,让你写 android 应用变得很简单。特别是你本身 go 语言熟悉的话。当然不熟悉也没关系,毕竟 go 是出了名的学习成本很低的语言。

        用 go 怎样写 Android 应用?先直接看一个简单的示例:

package main

import (
	"log"

	"github.com/gooid/gooid"
	"github.com/gooid/gooid/input"
)

func main() {
	context := app.Callbacks{
		Event: event,
	}
	app.SetMainCB(func(ctx *app.Context) {
		ctx.Run(context)
	})
	for app.Loop() {
	}
	log.Println("done.")
}

var bWallpaper = false

func event(act *app.Activity, e *app.InputEvent) {
	if mot := e.Motion(); mot != nil {
		if mot.GetAction() == input.KEY_EVENT_ACTION_UP {
			log.Println("event:", mot)

			bWallpaper = !bWallpaper
			if bWallpaper {
				act.SetWindowFlags(app.FLAG_SHOW_WALLPAPER, 0)
			} else {
				act.SetWindowFlags(0, app.FLAG_SHOW_WALLPAPER)
			}
		}
	}
}

这就是一个Android应用所需要的代码,是不是很简单,可下载编译出的apk试试。

        接下来自然是要讲一讲怎样配置编译环境了,我会基于 windows 7/10 64位系统来讲(用 linux 系统也是可以的,参考 windows的步骤,作相应配置就好),准备一台 android 4.4(最好是 8.1)及以上版本的手机。

基本 go 编译环境

        先把基本的go编译环境装好,要求go1.10以上的版本。Golang 的安装网上有太多教程,此处不表。注意需安装 git ,在命令行中测试一下:

go version
git

验证一下 go 环境是否正常运行。

Android 的 ndk 编译器的配置

这里先放个表:

GOARCHTOOLPATHLIBPATHGCC_HABI
armarm-linux-androideabi-4.9armarm-linux-androideabiarmeabi OR armeabi-v7a
arm64aarch64-linux-android-4.9arm64aarch64-linux-androidarm64-v8a
386x86-4.9x86i686-linux-androidx86
amd64x86_64-4.9x86_64x86_64-linux-androidx86_64

        连接手机或仿真,进命令行运行 adb shell getprop ro.product.cpu.abilist (或是 adb shell getprop ro.product.cpu.abi)查看输出结果。比如 Andorid 7.0 arm 仿真执行结果如下:

>adb shell getprop ro.product.cpu.abilist
armeabi-v7a,armeabi

        现在看到 ABI 支持 armeabi-v7a 和 armeabi,我们可以选定其中一个为我们要生成应用的 ABI,一般选 armeabi 或 x86 (因为 64 位的手机一般兼容 32 位)。确定 ABI 之后通过上表就可得到相对应的如 TOOLPATH, GOARCH 等的值,按 Windows 的表示法以下用 %TOOLPATH% 表示相应的值,如 ABI 为 armeabi 时 %TOOLPATH% 是 arm-linux-androideabi-4.9 。

  1. 下载android-ndk-r16b-windows-x86_64.zip

  2. 解压下载的 android-ndk-r16b-windows-x86_64.zip 文件

  3. 在解出的 android-ndk-r16b\toolchains 目录看到几个 ???-4.9 的目录,其中就包括了 android-ndk-r16b\toolchains\toolchains%TOOLPATH%\ , 把 android-ndk-r16b\sysroot 拷贝到android-ndk-r16b\toolchains\toolchains%TOOLPATH%\prebuilt\windows-x86_64\ 目录下

  4. 把 android-ndk-r16b\platforms\android-%SDK_API%\arch-%LIBPATH%\usr\lib 拷贝到 android-ndk-r16b\toolchains\toolchains%TOOLPATH%\prebuilt\windows-x86_64\sysroot\usr\ 目录下

    • 如果没有这个目录就是上一步做错了
    • 这时android-ndk-r16b\toolchains\toolchains%TOOLPATH%\prebuilt\windows-x86_64\sysroot\usr\ 目录下应该有 include 和 lib 两个目录
  5. 把 android-ndk-r16b\toolchains\toolchains%TOOLPATH%\prebuilt\windows-x86_64\sysroot\usr\include%GCC_H%\asm 拷贝到 android-ndk-r16b\toolchains\toolchains%TOOLPATH%\prebuilt\windows-x86_64\sysroot\usr\include\ 目录下

把 android-ndk-r16b\toolchains\toolchains%TOOLPATH%\prebuilt\windows-x86_64\bin 的完整路径加到环境变量PATH中
在命令行下面可以运行 %GCC_H%-gcc -v ,说明 NDK 就准备好了。

命令行环境设置和编译
  1. 下载 tools,取对应 windows 或 linux 版的 gomobile (linux 下要手动设置可执行权限),并把它的路径同样设置到环境变量 PATH 中
  2. 打开命令行,执行:
set GOPATH=???
set GOOS=android
set CGO_ENABLED=1
set CGO_CFLAGS=-D__ANDROID_API__=%SDK_API%
set GOARCH=%GOARCH%
set CC=%GCC_H%-gcc
  1. 取gooid
go get github.com/gooid/gooid
  1. 测试编译,依次执行下面的命令,最后生成out\wallpapertwinkle.apk
cd %GOPATH%\src\github.com\gooid\gooid\examples\WallPaperTwinkle
go build -buildmode c-shared -o basic\lib\%ABI%\libWallPaperTwinkle.so
gomobile build -o out\wallpapertwinkle.apk basic

至此环境终于设置完成,可以开始写你自己的APK了。

补充:关于 clang 编译环境的配置 更简单的配置。

其它
  • 这是个实验性的项目,不建议商用,主要用来交流学习。
  • 感谢 google , 特别是 golang/mobile
  • 关于配置步骤,其实可以用go写个自动配置,但我还是希望把步骤写出来,让需要的人了解所以然。
  • 其实可以把 android-ndk-r16b\toolchains\toolchains%TOOLPATH%\prebuilt\windows-x86_64 移(move)到其它目录下如 ndk%TOOLPATH% 并且android-ndk-r16b可以删除了。记得修改PATH。
使用Golang开发Android和iOS应用 然而,对于那些熟悉Golang并希望使用它来构建Android和iOS应用程序的开发者来说,这里提供了一种方法。本文将介绍如何使用Golang开发Android和iOS应用,并附上相应的源代码和描述。您可以根据自己的需求扩展这个示例应用程序,并利用Golang的强大功能来构建功能丰富的移动应用。接下来,我们将创建一个简单的示例应用程序,该应用程序将在Android和iOS设备上显示一个欢迎消息。在上述代码中,我们使用了一些Golang的第三方库,这些库专门用于在移动设备上开发应用程序。 阅读详情

相关推荐

Go语言的Android开发

Go语言(又称Golang)是由Google于2007年发起并于2009年正式发布的一种编程语言。其设计初衷是为了解决在大型软件开发中遇到的一些难题,尤其是在系统编程和服务端开发中。简洁性:Go语言的语法简单易懂,适合新手学习,同时也能提高开发效率。高性能:Go语言编译为机器码,运行速度接近C语言,适合性能要求高的应用。并发性:Go语言内置了协程(goroutine)和通道(channel)机制,使并发编程变得简单而轻松。跨平台:Go语言支持多平台开发,开发者可以在不同的操作系统上编写相同的代码。

2501_91185252的博客 1107

使用Golang编写Android应用

这是一个如何使用GOLANG编写ANDROID应用程序的基本演示,在某些情况下会很有用,比如需要在GO和JAVA语言之间共享一个加解密算法时。

qq_32036499的博客 3271

golang开发android应用(二) - go语言生成android动态库

本文是go语言android应用开发实战中的第二篇,主要介绍gomobile如何编码出android动态库及过程中的坑

开发笔记 8987

使用 Go 语言开发 Android 应用的正确姿势探索

Android系统是基于linux,但开发框架和系统api是基于java语言的。 因此使用java或是kottin开发Android应用是自然的,是原生的应用且速度也是很快的。 考虑到需要支持其他系统如IOS苹果系统需要重复开发APP,或是基于java原生的app不能很好的支持热更新, 或如电商APP等前端业务复杂的场景,于是又出现了如Weex,React Native等使用node,htm...

猫哥 的沉淀、积累、总结。天天学习,好好向上...c/c++,嵌入式 linux,Android,HarmonyOS,AIOT) 1万+

Go语言在安卓开发中的支持及示例代码

尽管Go语言本身并不直接支持安卓开发,但通过使用Go Mobile工具集和第三方库,我们可以在Go语言中进行安卓应用程序的开发。虽然原生的Go语言并不直接支持安卓开发,但借助一些第三方库和工具,我们可以在Go语言中进行安卓应用程序的开发。需要注意的是,使用gomobile build编译的安卓应用程序可能会比使用Java或Kotlin开发的应用程序更大,并且性能可能会有所下降。执行上述命令后,将生成一个AAR文件,您可以将其直接导入到安卓项目中,并在Java或Kotlin代码中使用生成的类。

MxTransforms的博客 747

YOLOv8魔改网络后训练全零?别慌,关掉AMP混合精度训练试试

本文探讨了YOLOv8魔改网络后训练出现全零指标的问题,指出AMP混合精度训练与自定义网络结构的不兼容性。通过分析梯度消失现象和AMP工作原理,提供了关闭AMP、调整学习率等解决方案,并建议预防性开发实践以避免类似问题。

weixin_28338005的博客 322

golang 使用 gomobile进行 Android 开发

golang android 开发

striveQiao 1万+

复用浏览器之跳过扫码登录

复用浏览器 1、通过命令启动浏览器:chrome --remote-debugging-port=9222(前提是退出所有的chrome浏览器) 2、启动浏览器之后,在地址栏输入127.0.01:9222,成功复用如下图所示:

qq_43911915的博客 2034

谷歌go开发android,使用golang的反转编写Android应用

在去年oracle和谷歌的官司告一段落,但是Android开发者仍急切谷歌能够想苹果一样,开发自己的编程语言进行Android应用的开发,至于选择什么语言,大多数开发者希望是golang,首先他是谷歌自我研发的一门编程语言,因为他语法简单,运行效率高。随着golang迭代更新,我们渐渐看到谷歌在这一方面的努力,golang.org/x/mobile的发布,让开发者能够使用go语言使用ndk进行安卓...

weixin_28676983的博客 3069

量子密钥分发系统的工程实践(四):FPGA在后处理中的核心实现与优化

本文深入探讨了FPGA在量子密钥分发(QKD)系统后处理中的核心实现与优化策略。文章详细拆解了FPGA如何高效完成原始密钥提取、误码协商和私密放大等关键任务,并分享了流水线设计、资源复用及存储器架构优化等工程实践“心法”,旨在解决高速、实时QKD系统中的性能瓶颈,提升密钥生成率。

t8u9v0的博客 388

OCR技术解析:用Tesseract和PaddleOCR识别文本

OCR技术解析:用Tesseract和PaddleOCR识别文本 ,人工智能,计算机视觉,大模型,AI,光学字符识别(Optical Character Recognition,简称 OCR)是一项将图片、扫描件等文档中的文字信息转换为可编辑文本的技术。在数字化时代,OCR 技术广泛应用于文档处理、车牌识别、身份证识别、古籍数字化等领域,极大地提高了文字信息处理的效率。Tesseract 和 PaddleOCR 是两款极具代表性的 OCR 工具。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 3万+

golang开发android应用(一) - go语言android应用环境搭建

本文是go语言android应用开发实战中的第一篇,主要介绍gomobile环境搭建,下一篇会介绍如何编译出对应的动态库相关内容

开发笔记 1万+

超声波传感器(CH101&ch201) - Ⅰ

压电微机械超声换能器(PMUT)和超声波信号处理的可编程片上系统(SoC)集成在一起的传感器

nicole088的专栏 2796

使用go开发安卓程序

因为使用传统的安卓开发方式对于非专业人士来说比较繁琐,所以这里想用go简单的开发一下安卓程序。go支持安卓的项目就叫gomobile,有写安卓库文件和安卓程序两种方式,写安卓程序只能使用OPENGL画图。

qq_41275983的博客 1795

基于STM32L4XX 、HAL库的TMC2226-SA-T步进电机驱动器驱动程序应用设计

集成的功率MOSFET可处理高达2A RMS的电机电流,并具备保护与诊断功能,确保运行稳健可靠。作为业界最先进的STEP/DIR步进电机驱动系列,该芯片通过升级设计实现无噪音、高精度运行,为用户提供高性价比且极具竞争力的解决方案。// 用于PDN_UART单线通信。// HAL_UART_Transmit - 注意PDN_UART是单线,收发共线。.huart = &huart1, // PDN_UART连接的USART。均方根步进/方向控制接口,提供8、16、32或64微步针设置,

PP_Cottage的博客 628

【人工智能】AI驱动值班巡检Agent(Hermes)

传统运维值班巡检场景中,存在四大核心痛点:本项目基于 Agent+Skills+浏览器自动化 架构,构建了具备自我进化能力的AI值班员,核心逻辑流如下:

奶爸的编程之路,也就一周冷个三天 178

android安装go语言环境,golang gomobile 环境搭建

1. 安装Go语言SDKhttps://www.golangtc.com/download2. 配置系统变量这建立GOROOT和GOPATH两个目录,分别对应sdk所在目录与项目文件根目录3. 输入go version 验证是否成功4. 安装gomobile1)cmd敲起命令(需要CMDFQ)go get golang.org/x/mobile/cmd/gomobilegomobile init...

weixin_42196279的博客 2499

国产麒麟V10系统命令大全,100个实用命令助你玩转系统!

国产麒麟V10系统命令大全,100个实用命令助你玩转系统!

网络技术联盟站 1910

基于Go与Gomobile的轻量级安卓蓝牙调试工具开发实战

蓝牙通信是物联网和嵌入式开发中的基础技术,其核心在于通过无线射频进行设备间的低功耗数据交换。其工作原理基于GATT协议,通过特征值进行读写与通知操作,实现异步、事件驱动的数据传输。这项技术的价值在于为智能硬件、穿戴设备等提供了稳定、低功耗的无线连接方案,广泛应用于传感器数据采集、远程控制等场景。在开发调试阶段,一个高效、无干扰的工具至关重要。本文聚焦于利用Go语言的并发模型与Gomobile框架,构建一个名为“goBle”的轻量级安卓蓝牙调试工具。该工具针对**嵌入式开发**和**蓝牙模块测试**场景,解决

weixin_34248705的博客 316

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

【笔记】golang开发android app小记

golang开发android app小记 Google和Oracle打过Java的官司以后就开始慢慢转kotlin了。从JVM虚拟机打官司,改成android用JVM从堆栈平衡转寄存器模式,再到语言更新kotlin,够折腾。kotlin,勉强可以接受吧,就是开发的时候各种stackoverflow/google oriented programming。最近写了不少go了,想起来以前有本书是说skype的android应用是怎么用c++开发的;前些年也看到过android的ruby sdk;还有cordo

匆匆往站 5026

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

go语言能编android程序吗,golang可以开发android吗

golang可以开发android吗golang可以开发android,使用golang开发android需要下载安装gomobile,有两种开发方式,分别为:1、原生应用开发;2、混合绑定开发。使用GO语言开发android应用步骤如下:1. 下载安装Go语言(版本1.5+)2. 下载安装 gomobile$ go get golang.org/x/mobile/cmd/gomobile安装(需...

weixin_33462804的博客 3149

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

golang开发android的jni,用纯Golang开发Android与IOS应用

Golang1.4就对Android开发做了些支持,1.5版本前几天好像发布了,特意看了整理下,1.5支持32位与64位的android与IOS应用开发了,当然还不是很好用,听说性能比Java做的程序超出很多,Native就不用说了,但也没有实践压测所也不敢确定,这里只整理下基本流程:环境搭建安装 golang 1.5, 设置 GOROOT,GOPATH 环境变量。简单说明:Golang 1.5 ...

weixin_42498987的博客 1919

golang android 开发

Golang Android 开发入门指南 随着移动互联网的迅速发展,Android 应用的开发已经成为了一个重要的技术领域。尽管通常使用 Java 或 Kotlin 进行 Android 开发,Go(Golang)作为一种高效的编程语言,逐渐引起了开发者的关注。本文将为您介绍如何使用 Golang 进行 Android ...

weixin_41283868的博客 756

Go Mobile构建工具终极指南:10个gomobile命令技巧让移动开发更简单

Go Mobile是Go语言官方提供的移动应用开发工具包,它让开发者能够使用Go语言编写Android和iOS应用。通过gomobile命令,你可以快速构建、测试和部署跨平台移动应用,极大地简化了移动开发流程。😊 ## 什么是Go Mobile项目? Go Mobile项目是一个开源工具集,专门用于使用Go语言开发移动应用程序。它提供了完整的构建工具链,支持将Go代码编译为Android和i

gitblog_00021的博客 741

go语言android开发环境搭建,golang开发android应用(一) - go语言android应用环境搭建...

基于golang的android动态库开发,很久以前golang就支持开发android上的动态库及应用了,golang的环境搭建就不说了,直接从gomobile开始软件依赖golang, gomobile, jdk,android sdkgomobilegomobile就是一个可以利用golang来开发android上本地应用及动态库的一个golang框架,我们通过他能生成能在android程序...

weixin_42545163的博客 2716

gomobile的使用方法

环境变量 ANDROID_HOME(安卓SDK路径) ANDROID_NDK_HOME(安卓NDK路径,>=r14b,但是实测r14b不可用,r20可用) GOPATH(GOPATH目录,需要bind的代码在这里写) GOROOT(GO根目录) JAVA_HOME(JDK根路径,不是JRE,因为需要JAVAC) PATH %JAVA_HOME%/bin(JAVAC) %GOROOT%/b...

wang805447391的博客 7174
下一篇: 用 Golang 开发 Android 应用(二)—— 简单 UI
kaisoft
博客等级 码龄26年 39粉丝 10原创
评论 18
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值