生存報告

仕事でバックエンド、趣味でフロントエンド・デザイン

GoをクロスコンパイルしてAndroid上で実行させたい


はじめに

Goの環境構築からやります。
環境構築方法には
1. 公式サイトからインストール
2. goenvを使用してインストール
の2種類あるらしい。
バージョン管理のしやすさ的にgoenv使います。

ローカル環境

Androidの環境

Goの環境構築

goenvのインストール

git clone https://github.com/syndbg/goenv.git ~/.goenv

初期設定

環境変数の設定諸々やります。
source ~/.bash_profileはターミナル再起動でもOK。

sudo echo 'export GOENV_ROOT="$HOME/.goenv"' >> ~/.bash_profile
sudo echo 'export PATH="$GOENV_ROOT/bin:$PATH"' >> ~/.bash_profile
sudo echo 'eval "$(goenv init -)"' >> ~/.bash_profile
source ~/.bash_profile

動作確認

goenv -v

以下が表示されればOK

goenv 2.0.0beta11

goのインストール

以下でインストールできるバージョンを確認

goenv install -l

以下でバージョンを指定してインストール

goenv install 1.15.0

ローカルでhelloworld

作業ディレクトリを作ってバージョンを指定

mkdir -p ~/test/src/hello
cd ~/test
goenv local 1.15.0

ソースファイルを準備

cd ~/test/src/hello
touch hello.go

hello.goに以下を記載

package main

import "fmt"

func main() {
    fmt.Printf("hello, world\n")
}

buildする

go build

実行する

./hello

以下が出力されれば成功

hello, world

Android上でGoの実行ファイルを動かす

hello.goをビルド

CGO_ENABLED=0 GOOS=linux GOARCH=arm go build

実行ファイルをAndroid端末に送る

adb push hello /data/local/tmp/

実行する

adb shell /data/local/tmp/hello

実行結果

hello, world

注意事項

実行ファイルは /data/local/tmp/ に配置せにゃあかんらしい。 たぶん権限の問題で、rootに適当にディレクトリ作って試みたけどPermission deniedされたのでそういうことだと思う。

参考記事様方