用 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

AD20丝印层导入图片logo保姆级教程(附黑白预览避坑技巧)

本文提供了一份详尽的AD20丝印层导入图片Logo的实战指南。核心在于将图片预处理为高质量的单色BMP位图,并独家分享了利用Windows画图工具进行“黑白预览”的关键技巧,以提前规避转换失真。教程涵盖了从脚本获取、图片处理、参数设置到生产规范的完整流程,帮助硬件工程师高效、准确地在PCB的Top Overlay层添加个性化标识。

weixin_29194255的博客 386

golang 使用 gomobile进行 Android 开发

golang android 开发

striveQiao 1万+

ESD放电路径分析

当金属外壳接地情况下,大部分外部干扰信号将会通过外壳,外壳到接地点,再由接地点回到干扰信号的地,实现干扰信号的回流,这点不仅仅适用于​ESD,对于其他的RI类干扰,也同样适合。发现内部金属板跟外壳的搭接处存在较多的缝隙点,该缝隙点对于频率较高的信号能够实现较为理想的回流,但是对于频率没有那么高的信号,则较难以实现回流,我们尝试将这些缝隙用铜箔包裹住,充分降低该金属板跟外壳的接触阻抗​。我们分析,路径3其实是不期望的路径,我们最期望的路径是1,或者2的内部金属部件跟外壳良好接触情况下的路径。

domen_pan的博客 2228

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

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

weixin_28676983的博客 3069

Wireshark抓包分析:如何从HTTP流量中快速定位黑客攻击痕迹(附pcap文件)

本文通过Wireshark实战,详细解析了如何从HTTP流量中快速定位黑客攻击痕迹。文章提供了核心过滤策略,并重点剖析了如何识别SQL注入攻击的流量特征、揭露WebShell的隐蔽通信以及追踪攻击者在横向移动中的行为,帮助安全人员系统性地从pcap文件中还原完整攻击链。

sprite的博客 1009

普中科技ESP8266-01s模块CWJAP:3 FAIL报错?手把手教你用AT+CWSAP指令搞定WiFi配置

本文详细解析了普中科技ESP8266-01s模块常见的CWJAP:3 FAIL报错问题,并提供了通过AT+CWSAP指令正确配置WiFi的实战解决方案。文章涵盖错误根源分析、硬件连接指南、AT指令详解及高级调试技巧,帮助开发者快速解决ESP8266-01s模块的WiFi配置难题。

weixin_42653691的博客 202

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

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

开发笔记 1万+

Conda安装cuda指定版本遇到的一个大坑,导致pytorch无法使用cuda且nvcc -V显示错误的cuda版本

24年3月份的时候用conda install nvidia/label/cuda-11.x.x::cuda还挺正常的,能直接安装11.x.x版本的cuda,我还安利给同学用。但现在5月份不知道为什么这些命令都只会安装最新的cuda12.4,不知道是我哪里设置有问题还是官网的安装目录里的环境配置换了?我在三台不同的服务器上都尝试了安装不同版本的cuda,但最后安装下来的都是12.4版本。

weixin_43933424的博客 8892

使用go开发安卓程序

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

qq_41275983的博客 1795

pnpm 卸载教程:彻底移除 pnpm 及全局缓存的方法

卸载 pnpm = 全局包 → CLI → 环境变量 → store 缓存只要按这个顺序来,基本不会留下任何坑。如果你后面还打算重新安装 pnpm / 切换 npm、yarn / 多包管理器共存,这些细节反而更重要,环境一旦干净,后续问题会少很多。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 931

CListCtrl控件的自绘操作

1、CListCtrl控件 :OwnerDraw Fixed = True,创建一个CListCtrl类的派生类CMyListCtrl,同时创建一个CMyListCtrl控件类型变量:CMyListCtrl m_cList;。 CListCtrl控件的自绘主要是CMyListCtrl类中重写DrawItem虚函数。 流程: 1.主对话框中CListCtrl的一些初始化操作: BOOL

小米的修行之路 3559

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

黑猫带你学eMMC协议第4篇:eMMC概述

1 前言 声明: 本文依据eMMC JEDEC5.1协议及个人工作经验整理而成,如有错误请留言。 文章为个人辛苦整理,付费内容,禁止私自转载。 本文大约3000字,从emmc的内部结构框架、供电、总线、寄存器等各方面进行框架性的介绍,本章节内容不需要深入研究,读完本篇文章,只要能对emmc有个框架下的了解,就可以了。 2 内部结构框架 由图可以看出,emmc内部由两块组成:控制器 + 存储介质。emmc内部存储介质绝大部分为nand flash。 众所周知,我们需要存储数据到nand flash中,并

黑猫奥利奥的博客 3341

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

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

weixin_34248705的博客 316

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

【笔记】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

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

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

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

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、付费专栏及课程。

余额充值