20
3

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.

#NervesJPAdvent Calendar 2021

Day 3

ElixirDesktopのAndroidサンプルをイゴかす

Last updated at Posted at 2021-12-02

2021/12/03(金)の回です。

@MzRyuKa さんの
【無料版】Elixirへのいざない ネイティブアプリを錬金しよう(free版):book:
の中でこの記事(コラム)が紹介されています!!! :congratulations:
原題のまま「イゴかす1」で掲載されているのが、これまたよい:thumbsup::thumbsup_tone1::thumbsup_tone2::thumbsup_tone3::thumbsup_tone4::thumbsup_tone5:です。

はじめに

Nervesを楽しんでいますか:bangbang::bangbang::bangbang:
空いていたので埋めます。
Nervesのことではないです。

Elixirですし、Youngなプロジェクトの紹介です。
$\huge{すげー}$のがでてきました。

なにがすげーって、あのコントリビュート(畏敬の念を込めて「草」)の量がハンパないKian Meng Angさんがすでにコントリビュートされている注目のプロジェクトです。

Building native-like Elixir apps for Window, MacOS, Linux, iOS and Android using Phoenix LiveView!

Phoenix LiveViewひとつで、Windows、MacOS、Linux、iOS、Android全部のアプリが作れちゃうよ〜:rocket::rocket::rocket:

まさに.NET マルチプラットフォーム アプリ UI (.NET MAUI) Elixir版です。

androidアプリのサンプルをイゴかしてみました1

をイゴかしてみました。
開発マシンはmacOSです。
asdfでErlangやElixirをインストールできるだけの準備(各種ライブラリ? ミドルウェア?)は整えてあるマシンです。

  1. Android Studioをインストールします
  2. Android Studioで、NDK と CMake をインストールする
  3. Android Studioで、「Go to "Files -> New -> Project from Version Control" and enter this URL: https://github.com/elixir-desktop/android-example-app/
  4. 必要に応じて「Android Gradle plugin requires Java 11と言われてSyncできないときの対処法」を実施2
  5. brew install kerl
  6. さっぱりわからんけど、サンプル通り~/projectsフォルダを作って、kerl buildして〜、kerl installします
mkdir -p ~/projects/
kerl build git https://github.com/diodechain/otp.git diode/beta 24.beta
kerl install 24.beta ~/projects/24.beta

2022-07-20 追記

以降、run_mixでPhoenixアプリ(TodoApp: A Desktop Sample App)のダウンロードを行います。
2022-07-20現在、android-example-appTodoApp: A Desktop Sample App最新の組み合わせでは以下のエラーに遭遇します。

% ./run_mix
warning: use Mix.Config is deprecated. Use the Config module instead
  config/prod.exs:1

==> desktop
Compiling 1 file (.erl)
src/desktop_wx.erl:13:22: undefined macro 'wxID_EXIT'
%   13|   get(wxID_EXIT) -> ?wxID_EXIT;
%     |                      ^

src/desktop_wx.erl:3:4: function get/1 undefined
%    3|   -export([get/1]).
%     |    ^

could not compile dependency :desktop, "mix compile" failed. Errors may have been logged above. You can recompile this dependency with "mix deps.compile desktop", update it with "mix deps.update desktop" or clean it with "mix deps.clean desktop"

そこで、ビルドが通るリビジョンのTodoApp: A Desktop Sample Appを使うことでこの問題を回避します。
具体的には、run_mixファイルを以下のように書き換えてください。

if [ ! -d "elixir-app" ]; then
  git clone https://github.com/elixir-desktop/desktop-example-app.git elixir-app
  cd elixir-app
  git checkout -b hoge 2f0ce926cc5c258fbc0c60b3c0d557d3023fe1e7
  mix deps.get
else
  cd elixir-app
fi

git checkout -b hoge 2f0ce926cc5c258fbc0c60b3c0d557d3023fe1e7を追加しています。


ここからはREADMEの通りにはうまくいかなかったので、私独自です。
androidアプリの開発経験はそれなりにあって、それなりの心得があることが幸いしました。

  1. run_mixファイルを書き換える。https://github.com/elixir-desktop/android-example-app/pull/2/files たぶんパスの誤り? だとおもうのでプルリクをしたためて出してみました
  2. どうもうまくいかんので、 https://github.com/elixir-desktop/android-example-app/blob/4cb9b92cd3dfe5edf92f3ec5bd1ff20ab78ce623/app/build.gradle#L10-L16 はざっくり消してしまう(ガセネタかも?)
  3. ./run_mixをターミナルで実行する => /app/src/main/assets/app.zip.xzなるものができる(おそらく、たぶんErlangやElixir、LiveViewアプリそんなものたちがよしなに詰め込まれているのだとおもう。3)
  4. Connect your Phone to Android Studio
  5. Android Studioで、緑のRunボタンを押す

そうするとTODOアプリが立ち上がりますよ。

Screenshot_20211202_002205_io.elixirdesktop.example.jpg

Phoenix LiveViewのアプリがイゴきます1:tada::tada::tada:
$\huge{オフラインモードでもイゴきます!!!}$

/app/src/main/assets/app.zip.xzなるものができる(おそらく、たぶんErlangやElixir、LiveViewアプリそんなものたちがよしなに詰め込まれているのだとおもう

The Android App is initializing the Erlang VM and starting it up with a new environment variable BRIDGE_PORT. This environment variable is used by the Bridge project to connect to a local TCP server inside the android app. Through this new TCP communication channel all calls that usually would go to wxWidgets are now redirected. The Android side of things implements handling in Bridge.kt.

image.png

たぶん、想像通りで合っているのだとおもいます。

Wrapping up :lgtm::lgtm::lgtm::lgtm::lgtm:

ちょっと雑ですが、とりあえず、俺「#NervesJPアドベントカレンダーを全日埋めたいっす:smile:」という気持ちでいっぱいという気持ちをいっぱいにして書くという気持ちを大切にするという気持ちで書きました。

Enjoy Elixir :bangbang::bangbang::bangbang:

  1. 「動かしてみました」の意。おそらく、西日本の方言、たぶん。NervesJPではおなじみ。少し古いオートレースの映像ですが、実況アナウンサーが「針4イゴきます」とはっきり言っています。https://autorace.jp/netstadium/SearchMovie/Movie/iizuka?date=2017-01-04&p=5&race_number=11&pg= 2 3 4 5

  2. めちゃくちゃ助かりました! @takahiromさんありがとうございます!

  3. androidスマホをオフラインモードにしてもTODOアプリはイゴきました1。そのため、スマホがどこかのサーバと通信をしてサーバの上でイゴいている1LiveViewアプリケーションをスマホで動かしているわけではなく、androidアプリ(.apk)の中にErlangやElixir、LiveViewアプリそんなものたちがよしなに詰め込まれているのだとおもいました。

  4. 大時計の針のこと。針がイゴいてある地点まで到達すると選手はスタートを切って良い発走の合図。針がイゴきはじめると(おそらく)選手は緊張するし、スタートはその後のレース展開に大きく影響するので、車券を握りしめている観客たちがもっとも緊張する瞬間であるため、先の尖った鋭いものを連想させる針は緊張の暗喩としても言い得て妙。

20
3
3

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
20
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?