编译 go 源码为 android 动态库(so)

本文介绍了如何在MacOS环境下,使用Go 1.14.6及以上版本,通过交叉编译将Go源码编译为Android动态库(SO文件)。涉及的工具有Android Studio、CMake、Android SDK和NDK。文章详细讲解了Go源码的编写注意事项,包括包名、main函数、C导入和方法声明。此外,还阐述了设置环境变量、构建类型和目标平台的方法,以及如何通过CMakeLists.txt配置和编译C代码。最后展示了在Android项目中使用编译后的SO文件的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

golang跨平台, 性能强, 周边也算丰富

一直有一个想法, 把这东西写的代码编译成各个平台的库, 未来在 flutter 里用

开发环境和工具

  • MacOS(其他的暂时不考虑)
  • Go
    • Go 1.14.6, 版本太低可能不能编译成 android 的
    • Goland , 咱现在是正版用户, 用开源项目申请的All products License , 你也可以根据自己的情况选择别的 IDE 或使用文本编辑器(vscode 也不错)
  • Android
    • Android Studio
    • Cmake
    • Android SDK
    • Android NDK

Go 部分

go 源码

add_library.go

package main

import "C"

//export add
func add(x, y int) int {
   
	return x + y
}

//export remove_int
func remove_int(x, y int) int {
   
	return x - y
}

func main() {
   
}

这里有几点要注意

  1. package 一定要是 main(强制规定)
  2. 一定要包含 main 函数(强制规定)
  3. import “C”, 不能少, 因为要编译出 c(c++)的头文件
  4. 每个方法前要加//export 方法名, 这里要注意
    1. //export间不能有空格
    2. 方法名和 go 的方法名必须完全一样
    3. 方法名不能是 c 内置的方法名, 比如remove就不行

编译

我在项目里内置了两个脚本, 一个是编译 android 的, 一个是编译 macOS 的, 因为篇幅和主题的原因, macOS 的就不单独拿出来了

看看编译成安卓的脚本吧

export ANDROID_NDK_HOME=$ANDROID_HOME/ndk/21.0.6113669

export GOARCH=arm
export GOOS=android
export CGO_ENABLED
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值