ElixirDesktop開発環境構築 Android for Mac

# はじめに
この記事は Elixirアドベントカレンダーのシリーズ４の3日目の記事です


ElixirDekstopのAndroidアプリの開発環境の構築について解説し、
実際に以下のサンプルアプリをシミュレーターで動かします

https://github.com/elixir-desktop/android-example-app

![スクリーンショット 2023-11-28 13.39.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64198/5e6fcda7-c5c2-504b-921c-9ad87f6bcf0e.png)


# 検証環境

M1 Mac(Apple M1 Max)
Mac OS Sonoma(14.1.1)
Xcode 15.0.1

# Android Studioのインストール
こちらのサイトからダウンロードを行います
https://developer.android.com/studio?hl=ja

ダウンロードが完了したら、こちらに沿ってインストールを行ってください

https://developer.android.com/studio/install?hl=ja

# Android NDKのインストール
Android Studioを起動したら、右上の︙（縦３点リーダ）をクリックしてSDK Mnagerをクリックしてください
![スクリーンショット 2023-11-28 13.58.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64198/807804b9-df81-fdd4-e29c-747f1967e419.png)

クリックすると以下のような画面がでるので、SDK toolsのタブをクリックし、NDKと CMakeをチェックしてOKをクリックしてください

![スクリーンショット 2023-11-28 13.58.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64198/547028f7-ce1d-ff2f-2609-d23227a436d4.png)

これでAndroid周りのインストールは完了です

# Elixirのインストール
AndroidStudioとNDKのインストールが完了したらにErlangとElixirのインストールを行います
２日目のiOSの開発環境の記事で行った方は動作確認まで飛ばしていただいて構いません

Elixirのバージョンは最新でも問題なく動きますが、ElixirDesktopで使用されるErlangバイナリのバージョンが25.0.4となっているため、このバージョンのElrangでアプリケーションのビルドをしないと動かないので注意が必要です

## asdf のセットアップ
様々な言語、ライブラリの管理・切替できるasdfでErlang/Elixirをインストールしていきます

https://asdf-vm.com/guide/getting-started.html

ソースからビルドでも構いませんが、brewにあるのでそちらからインストールを行います
```
brew install asdf
```

インストールが完了いたら、環境変数に実行パスを通します、
この例はbashですので、zshを使用している方は公式のドキュメントを参考にしてください

```
echo -e "\n. \"$(brew --prefix asdf)/libexec/asdf.sh\"" >> ~/.bash_profile
echo -e "\n. \"$(brew --prefix asdf)/etc/bash_completion.d/asdf.bash\"" >> ~/.bash_profile
source ~/.bash_profile
```


## asdfのプラグイン追加
asdfに各言語のプラグインを追加していきます

Erlangのプラグインはこちら
https://github.com/asdf-vm/asdf-erlang

以下のコマンドでプラグインを追加します

```
asdf plugin add erlang https://github.com/asdf-vm/asdf-erlang.git
```
Elixirのプラグインはこちら

https://github.com/asdf-vm/asdf-elixir

```
asdf plugin-add elixir https://github.com/asdf-vm/asdf-elixir.git
```

## Erlangのインストールに必要なライブラリを追加

Erlangのインストールの前に必要なライブラリをインストールしていきます

https://github.com/asdf-vm/asdf-erlang#osx

```
brew install　git openssl@1.1 npm wxwidgets openjdk　autoconf  libxslt fop
echo 'export PATH="/opt/homebrew/opt/openjdk/bin:$PATH"' >> ~/.bash_profile
source ~/.bash_profile
```

## ErlangとElixirのインストール
Erlangのバージョンさえ気をつければいいので、 `1.15.7-otp-25`や`1.16.0-rc.0-otp25`
でも問題なく動きます

※ Mac OS sonomaにerlangをインストールする場合は --disable-jitオプションをつけてください
```
export DED_LDFLAGS_CONFTEST="-bundle"
export KERL_CONFIGURE_OPTIONS="--without-javac --with-ssl=$(brew --prefix openssl@1.1) --disable-jit"
asdf install erlang 25.0.4
asdf install elixir 1.15.7-otp-25
```

※2023/11/27日現在 wxwidgetsを組み込んだErlangのインストールに失敗しますが、Androidのアプリケーションをビルド・実行する際には使用されないので問題なく動きます

# 動作確認
インストールが完了したらサンプルアプリを git cloneして動かしてみましょう

```
git clone https://github.com/elixir-desktop/android-example-app.git
```


 ライブラリのインストールが完了したら、言語のバージョンを指定している `.tool-versions`を先程インストールしたelixirに書き換えましょう

```diff:.tool-versions
erlang 25.0.4
- elixir 1.13.4-otp-25
+ elixir 1.15.7-otp-25
```

Android Stduioのopenからgit cloneしたフォルダを選択しましょう
gradleの読み込みでしばらくかかりますが、完了したら実行ボタンを押すと以下のようにアプリが立ち上がります

![スクリーンショット 2023-11-28 19.40.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64198/0836451d-4142-b152-297c-a79df0a50f37.png)


ビルドが失敗する場合は 
```
cd android-example-app/app
```
でappフォルダに移動後`./run_mix`をコンソールから実行するとビルド時のエラーが出力されるので、そちらを確認しましょう

ビルドが成功して起動してからクラッシュした場合はXcodeの方にエラーメッセージがログに出力されているのでそちらを確認しましょう

# 最後に
Androidは本記事執筆時にMacでは問題なく動きましたが、動かない等ありましたら報告していただけたら対処法を追加させていただきます

Windowsで開発する場合は @Alicesky2127さんが Elixirシリーズ1の4日目に書くようなのでそちらを参考していただけたらと思います

自分も実際にやってみましたがMacに比べべて非常に環境構築の難易度が高いので Macで開発することをおすすめします

本記事は以上になりますありがとうございました

次は実際にElixirDesktopのプロジェクトを作成します