This Android Studio project wraps the Desktop Sample App to run on an Android phone.
The pre-built Erlang runtime for Android ARM/ARM64/x86 is embedded in this example git repository. These native runtime files include Erlang/OTP and the exqlite nif to use SQLite on the mobile. These runtimes are generated using the CI of the Desktop Runtime repository.
Because Erlang/OTP has many native hooks for networking and cryptographics the Erlang version used to compile your App must match the pre-built binary release that is embedded. In this example that is Erlang/OTP 26.2.5. This sample is shipping with a .tool-versions file that asdf will automatically use to automate this requirement.
-
Install Android Studio + NDK.
-
Install asdf, for example:
sudo apt install curl curl --silent --location -o - https://github.com/asdf-vm/asdf/releases/download/v0.18.0/asdf-v0.18.0-linux-amd64.tar.gz | tar xzf - -C ~/bin/ export PATH="$PATH:~/bin"
-
Install Erlang/OTP (with openssl) in the same version as the bundled runtime edition:
asdf plugin add erlang asdf plugin add elixir asdf plugin add nodejs cd app && asdf install
-
Go to "Files -> New -> Project from Version Control" and enter this URL: [https://github.com/elixir-desktop/android-example-app/] or open your locally cloned directory.
-
Start the App
Update these places with your package name:
- App name in strings.xml and settings.gradle
- Package names in Bridge.kt:1 and MainActivity.kt:1 (rename
package io.elixirdesktop.example->com.yourapp.nameor use the Android Studios refactor tool) - App icon: ic_launcher_foreground.xml and ic_launcher-playstore.png
- App colors: colors.xml and launcher background ic_launcher_background.xml
Running the app for the first time will extract the full Elixir & App runtime at start. On my Phone this takes around 10 seconds. After that a cold app startup takes ~3-4 seconds.
This sample only launch the elixir app and shows it in an Android WebView. There is no integration yet with the Android Clipboard, sharing or other OS capabilities. They can though easily be added to the Bridge.kt file when needed.
-
Android specific settings, icons and metadata are all contained in this Android Studio wrapper project.
-
Bridge.ktand the native library are doing most of the wrapping of the Elixir runtime.
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.

