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されたのでそういうことだと思う。