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

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
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值