試運転ブログ

技術的なあれこれ

GoでAndroidのコマンドラインツールをビルドする方法

AndroidのRoot化端末などでコマンドラインツールを作りたい時にGoを使いたくて少しはまったので、その時のメモです。

ビルドするマシンは、macOS 10.13.4で、動作確認するAndroidは、HUAWE MediaPad M5のAndroid 8.0.0です。

package main

import "fmt"

func main() {
  fmt.Printf("Hello World\n")
}

ビルドするときのオプションで、armを指定します。クロスコンパイル時にはCGOデフォルトで切られているそうですが、オプションでも指定しておきます。

cgo - The Go Programming Language

$ GOOS=linux GOARCH=arm GOARM=7 CGO_ENABLED=0 go build
$ ls
hello   main.go
$ file hello
hello: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), statically linked, with debug_info, not stripped
$ adb push hello /data/local/tmp/
[100%] /data/local/tmp/hello
$ adb shell /data/local/tmp/hello
Hello World
$