RustでAndroidアプリを作る

  • 14
    Like
  • 0
    Comment

この記事は Rustその2 Advent Calendar 2016 22日目の記事です。この記事はMac環境向けに書いています。

来年に引き続き今年もRust Advent Calendar を書きます。去年はかなり空いてたんですが、気づいた頃にはその1は埋まっていました。。

人気上昇っぷりにびっくりです。やっぱりRustはいいですね。

Rustはいいぞ

AndroidでRust

この記事では、AndroidでRustを動かしたくなったので tomakaさんの android-rs-glue を実際に動かしてみた内容となっています。 このライブラリを使って筆者が最近はまっている自転車関連のアプリを作りたかったのですが、そちらに関してはまた別の機会に執筆いたします。。

AndroidでRustを動かすために

Rustupを入れる

androidの build target を指定できるようにRustup経由でRustをインストールします。もしもdmgファイルからRustをインストールした場合は

/usr/local/lib/rustlib/uninstall.sh

でアンインストール後、

curl https://sh.rustup.rs -sSf | sh

でrustupをインストールします。rustupのインストールについて、詳しくはこちらをご覧ください。

Android用のbuild target を用意する

rustup target add arm-linux-androideabi

これでRustのAndroid用のバイナリをコンパイル出来るようになります。

Android Studioをインストールしてセットアップ

Androidの開発上必要になってくるため入れておきます。
こちらからダウンロードしてください。Android Studioのセットアップを済ませた後、ホームディレクトリに ~/Library/Android/sdk/ というディレクトリが出来ていればOKです。

adbコマンドを使えるようにする

~/.bashrc

# android
PATH=$PATH:~/Library/Android/sdk/platform-tools

を追記します。

Android NDKをダウンロードして配置

ビルド時にAndroid NDKも必要になってくるので、こちらから、Android NDKをダウンロードします。ディレクトリが含まれていますので、このディレクトリを ~/Library/Android/の中等に配置してください。また、特に場所は決まっていないので適当なディレクトリに配置して良いです。

~/.bashrc に 環境変数をセット

~/.bashrc

# android
export ANDROID_SDK_HOME=~/Library/Android/sdk/
export NDK_HOME=~/Library/Android/android-ndk-r13b/

ANDROID_SDK_HOMENDK_HOMEの環境変数をセットします。
NDK_HOMEは、Android NDKのバージョンによって変わってきます。

env を実行して変数が存在すればOKです。

Android SDK を コンソールからアップデートする

$ANDROID_SDK_HOME/tools/android update sdk -u

3つほど質問が聞かれますので全て y と答えます。

antを入れる

brew install ant

brew で入るので brew で入れてしまいましょう。

cargo apk をインストール

cargo install cargo-apk

cargo apk コマンドが使えるようになります。

ここまでが、環境構築の手順となります。

ビルドする

git clone git@github.com:tomaka/android-rs-glue.git

試しに、サンプルプログラムを実行してみましょう。 tomakaさんの公開している android-rs-glue のリポジトリをcloneします。

cd android-rs-glue/examples/basic

basicディレクトリまで移動します。

cargo apk

ここで cargo apk コマンドを実行してエラーが出なければビルド成功です。

find . -name *.apk

でAndroid用のapkファイルが出来ていることを確認したら、adb でインストールしてみましょう。このときに、Android端末側で USBデバッギングに接続 モードになっている状態になっていることを確認します。
試しに、 画面の明るさを変更するコマンド adb shell settings put system screen_brightness 1 を実行して、正常に動作することが確認できれば繋がっています。

Androidアプリのインストール

adb install -r ./target/android-artifacts/build/bin/android_glue_example-debug.apk

adb install でインストールします。

実行

黒い画面がでれば、成功です!
何も見えなくて面白みがないですが、RustでAndroidアプリができました。