9
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[2023年12月版]ElixirDesktopでスマホアプリを作る - Phoenix1.7のアプリを起動(モバイルアプリ化する)

Last updated at Posted at 2023-12-23

こんにちは!
プログラミング未経験文系出身、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側の設定をしていきます。

shell
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に切り替えます。

android-example-app/app/run_mix
#!/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を単体で走らせて、リリースビルドを作成しておきます。

android-example-app/app
./run_mix

run_mixをブランクにする

run_mixをそのままにしてAndroid StudioのRunボタン(Android Studioの画面右上にある、緑色の▷ボタン)を押すと、再びビルドが走ってしまいます。
現時点ではrun_mixを実行済みでリリースビルドが出来上がり済のため、run_mixはもう使用しません。
よって、run_mixは別名でバックアップとして取っておき、run_mixそのものはブランクにします。

shell
cp run_mix run_mix_build

image.png

Android Studioを起動

Android Studioを起動します。

shell
~/android-studio/bin/studio.sh

run_mixとrun_mix_buildがあることを確認してファイルを開きます。
image.png

Android Studioでapkファイルを作る

image.png

実機転送する

googleドライブにapkファイルをアップロード→実機でダウンロード
※セキュリティの問題が発生する場合はこちらをご参照ください

Phoenix1.7が起動しました!(^▽^)/
image.png


以降はエラーが出た場合にどう対応したかのログです。

エラー内容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'.

image.png

とはいえ、local.propertiesに記載はちゃんとされている。むむむ...
image.png

対応方法

Android Studioで開くディレクトリを変えた

image.png

image.png

...ということはAndroid StudioがSDKのある場所(path)を読み込めなかったのかな。

~Elixirの国のご案内~

↓Elixirって何ぞや?と思ったらこちらもどぞ。Elixirは先端のアレコレをだいたい全部できちゃいます:laughing::sparkles::sparkles:

↓ゼロからElixirを始めるなら「エリクサーチ」がおすすめ!私もエンジニア未経験から学習中です。

We Are The Alchemists, my friends!:bouquet:2
Elixirコミュニティは本当に優しくて温かい人たちばかり!
私が挫折せずにいられるのもこの恵まれた環境のおかげです。
まずは気軽にコミュニティを訪れてみてください。3

  1. 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.についてはコメントアウトして実施しないようにしている。

  2. @torifukukaiouさんのAwesomeな名言をお借りしました。Elixirコミュニティを一言で表すと、これに尽きます。

  3. @kn339264さんの素敵なスライドをお借りしました。Elixirコミュニティはいろんな形で活動中!

9
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?