交叉编译
go程序:hello.go
Go
package main
import (
"fmt"
)
func main() {
fmt.Println("Hello Android Golang.")
}
交叉编译
bash
CGO_ENABLED=0 GOOS=android GOARCH=arm64 go build -o go_hello hello.go
使用adb传输到android手机上运行
bash
# 传输
adb push go_hello /data/local/tmp/
# 执行
adb shell
cd /data/local/tmp/
./go_hello
android手机上运行结果

查看go编译支持的目标平台
bash
% go tool dist list
# 只截取了部分输出
android/386
android/amd64
android/arm
android/arm64
darwin/amd64
darwin/arm64
dragonfly/amd64
ios/amd64
ios/arm64
js/wasm
linux/386
linux/amd64
linux/arm
linux/arm64
cgo交叉编译
Android NDK下载
https://developer.android.com/ndk/downloads?hl=zh-cn
go程序:sum.go
Go
package main
/*
#include <stdlib.h>
#include <stdio.h>
int sum(int a, int b) {
return a + b;
}
*/
import "C"
import (
"fmt"
)
func main() {
a := C.int(10)
b := C.int(20)
output := C.sum(a, b)
fmt.Println(output)
}
交叉编译
CGO_ENABLED=1 GOOS=android GOARCH=arm64 CC=~/Downloads/ndk/toolchains/llvm/prebuilt/darwin-x86_64/bin/aarch64-linux-android34-clang go build -o go_sum sum.go
bash
CGO_ENABLED=1 GOOS=android GOARCH=arm64 CC=~/Downloads/ndk/toolchains/llvm/prebuilt/darwin-x86_64/bin/aarch64-linux-android34-clang go build -o go_sum sum.go
传输到手机上运行
bash
$ ./go_sum
30
$ file go_sum
go_sum: ELF shared object, 64-bit LSB arm64, dynamic (/system/bin/linker64), for Android 34, built by NDK r27d (13750724), BuildID=6f4238b00874b42ac0a76538c6bb562c03b5c40c, not stripped