こんにちは!
プログラミング未経験文系出身、Elixirの国に迷い込んだ?!見習いアルケミストのaliceと申します。
今回はElixirDesktop Phoenix1.7のアプリをWindows11 + WSL2で動かす手順をまとめなおします。
目的
Phonenix+LiveViewでCRUD機能のあるアプリを実装してエミュレータやスマホ実機で動かしたい。
実行環境
Windows 11 + WSL2 + Ubuntu 22.04
Elixir v1.15.7-otp-26
Erlang v26.1.2
Phoenix v1.7.3
今回やりたいこと
Phoenix1.7をElixirDesktopの環境で動かしたい。
前回、デスクトップ(PC)での動作確認ができたので、android-studioのプロジェクトを作ってモバイル(SP)での動作確認をしたい。
android-studioプロジェクトの作成
android-example-appのリポジトリをクローン
プロジェクトのルートディレクトリまで戻って、android側の設定をしていきます。
cd .. #todo_rootディレクトリまで戻る
git clone git@github.com:elixir-desktop/android-example-app.git
現在のディレクトリ構成は以下の通りです。
todo_root
├todo_app
└android-example-app
run_mixの変更
run_mix1内で今回使用しないスクリプトをコメントアウトします。
使用するプロジェクトを先ほど作成したtodo_appに切り替えます。
#!/bin/bash
set -e
BASE=`pwd`
APP_FILE="$BASE/src/main/assets/app.zip"
export MIX_ENV=prod
export MIX_TARGET=android
- if [ ! -d "elixir-app" ]; then
- git clone https://github.com/elixir-desktop/desktop-example-app.git elixir-app
- fi
- # using the right runtime versions
- if [ ! -f "elixir-app/.tool-versions" ]; then
- cp .tool-versions elixir-app/
- fi
- cd elixir-app
+ cd ../../todo_app
if [ ! -d "deps/desktop" ]; then
mix local.hex --force
mix local.rebar
mix deps.get
fi
- if [ ! -d "assets/node_modules" ]; then
- cd assets && npm i && cd ..
- fi
if [ -f "$APP_FILE" ]; then
rm "$APP_FILE"
fi
mix assets.deploy && \
mix release --overwrite && \
cd "_build/${MIX_TARGET}_${MIX_ENV}/rel/todo_app" && \
zip -9r "$APP_FILE" lib/ releases/ --exclude "*.so"
run_mixの実行
先にrun_mixを単体で走らせて、リリースビルドを作成しておきます。
./run_mix
run_mixをブランクにする
run_mixをそのままにしてAndroid StudioのRunボタン(Android Studioの画面右上にある、緑色の▷ボタン)を押すと、再びビルドが走ってしまいます。
現時点ではrun_mixを実行済みでリリースビルドが出来上がり済のため、run_mixはもう使用しません。
よって、run_mixは別名でバックアップとして取っておき、run_mixそのものはブランクにします。
cp run_mix run_mix_build
Android Studioを起動
Android Studioを起動します。
~/android-studio/bin/studio.sh
run_mixとrun_mix_buildがあることを確認してファイルを開きます。
Android Studioでapkファイルを作る
実機転送する
googleドライブにapkファイルをアップロード→実機でダウンロード
※セキュリティの問題が発生する場合はこちらをご参照ください
以降はエラーが出た場合にどう対応したかのログです。
エラー内容1
エラー文
SDK location not found. Define a valid SDK location with an ANDROID_HOME environment variable or by setting the sdk.dir path in your project's local properties file at '/home/alice/StudioProjects/todo_root/android-example-app/local.properties'.
とはいえ、local.properties
に記載はちゃんとされている。むむむ...
対応方法
Android Studioで開くディレクトリを変えた
...ということはAndroid StudioがSDKのある場所(path)を読み込めなかったのかな。
~Elixirの国のご案内~
↓Elixirって何ぞや?と思ったらこちらもどぞ。Elixirは先端のアレコレをだいたい全部できちゃいます
↓ゼロからElixirを始めるなら「エリクサーチ」がおすすめ!私もエンジニア未経験から学習中です。
↓We Are The Alchemists, my friends!2
Elixirコミュニティは本当に優しくて温かい人たちばかり!
私が挫折せずにいられるのもこの恵まれた環境のおかげです。
まずは気軽にコミュニティを訪れてみてください。3
-
run_mixとは
ダウンロードしたリポジトリ内のrun_mixはビルドスクリプトといって、
1.GitHubからexampleをcloneしてくる
2.ライブラリのインストール等を行う
3.リリース(prod環境ビルド)に必要な処理を行う
4.Zipで圧縮
5.Android側が読み込むようにしてある場所にコピー
以上の処理をまとめて走らせてくれるシェルスクリプトのこと。
https://qiita.com/Alicesky2127/items/5f9a1c6496b1c083720f#run_mix%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B
※なお、今回は1.についてはコメントアウトして実施しないようにしている。 ↩ -
@torifukukaiouさんのAwesomeな名言をお借りしました。Elixirコミュニティを一言で表すと、これに尽きます。 ↩