Tauri でプロジェクトを作成して Android エミュレーターを起動するまで
前々からモバイルアプリを実装したいと思いつつ、そのためのフレームワークや言語・ツール類に興味をもてずにいた。
そんな中、昨年 10 月に Tauri が正式にモバイル対応していた( https://v2.tauri.app/blog/tauri-20/ )。デスクトップアプリの開発で少し触れたことがあり、そのときの開発体験がけっこうよかったので、モバイル対応しないかなあと思っていたところだった。Frontend に Vue を使えるというのもあり、ようやく重い腰をあげて環境構築をする気になった。ということでそのときのメモ。
Tauri のインストールとプロジェクトセットアップ
これはドキュメントを参照すればよい。
https://tauri.app/start/create-project/
npm create tauri-app@latest
上記のコマンドを実行し、あとは適当に指示にしたがって進めていけば、プロジェクトが作成される。
以前試したときに気づいていなかったポイントとして、Frontend の実装に Rust も使用できるっぽい。
? Choose which language to use for your frontend ›
Rust (cargo)
TypeScript / JavaScript (pnpm, yarn, npm, bun)
.NET (dotnet)
Rust 自体にもうちょい習熟したらそっちも試したいなあと思いつつ、今の自分が手を出したら何も進まずに終わる未来が見えているのでおとなしく TypeScript / JavaScript を選択。
cmdline-tools のダウンロード
https://developer.android.com/studio?hl=ja から、「コマンドラインツールのみ」というセクションにある zip をダウンロードする。
zip を解凍して好きな位置に配置すればよいが、ツール内のsdkmanager
を使うと、cmdline-tools と同じ階層にパッケージがインストールされる。ホームディレクトリ内にandroid-sdk
のようなディレクトリを作成して隔離するのがよいかも。
配置したら、cmdline-tools 直下に latest というディレクトリを作成し、cmdline-tools 内に存在するファイルやディレクトリをすべて latest 直下に移動する。これをしないと、「latest ディレクトリをつくって...」みたいなエラーがでてsdkmanager
などが動かない。
- before
./cmdline-tools ├── NOTICE.txt ├── bin ├── lib └── source.properties
- after
./cmdline-tools └── latest // <- これをつくる ├── NOTICE.txt ├── bin ├── lib └── source.properties
PATH
に cmdline-tools へのパスを追加する。
export PATH=$PATH:/path/to/android-sdk/cmdline-tools/latest/bin
ここまでできたら、sdkmanager
を実行して確認しておく。
sdkmanager --version
Android SDK のインストール
sdkmanager
を利用して Android SDK をインストールする。
まずはインストールできるパッケージを確認する。
sdkmanager --list | grep platform
インストールする。
sdkmanager "platform-tools" "platforms;android-36" # android-xxはとりあえず最新のもの
sdkmanager "build-tools;36.0.0" # たぶんビルドに必要
- インストール実行時に下記のようなエラーが出た場合、パーミッションの問題らしい?cmdline-tools の配置をホームディレクトリなど確実にパーミッションに問題がなさそうなところに移動する
Accept? (y/N): y Warning: Failed to read or create install properties file.
- 当初は
/usr/local
内にインストールしていたが、どうパーミッションを変更しても(ヤケクソでchmod -R 777 /usr/local/cmdline-tools
とかやっても)解消しなかった。ホームディレクトリに移動したら解消。 - なお、
--sdk_root
オプションを使ってインストール先を指定することも可能だが、後述のavdmanager
で system-images を指定する際にうまく見つけてくれなくなる。--sdk_root
を指定せずにインストールできるように cmdline-tools の場所を変更する方が無難。
- 当初は
エラーなくインストールできたら、確認。Installed packages に表示されていれば OK。
sdkmanager --list
Installed packages:
Path | Version | Description | Location
------- | ------- | ------- | -------
build-tools;36.0.0 | 36.0.0 | Android SDK Build-Tools 36 | build-tools/36.0.0
platform-tools | 35.0.2 | Android SDK Platform-Tools | platform-tools
platforms;android-36 | 1 | Android SDK Platform 36 | platforms/android-36
ここで一旦 tauri のプロジェクトを android 用に初期化してみる。
npm run tauri android init
> [email protected] tauri
> tauri android init
action request: to initialize Android environment; Android support won't be
usable until you fix the issue below and re-run `tauri android init`!
Have you installed the Android SDK? The `ANDROID_HOME` environment
variable isn't set, and is required: environment variable not found
victory: Project generated successfully!
Make cool apps! 🌻 🐕 🎉
ということでANDROID_HOME
を PATH に追加する。
cmdline-tools を含んでいるディレクトリへのパスを指定する。
export ANDROID_HOME=/path/to/android-sdk
メッセージがNDK_HOME
についてのものに変わっていれば、ANDROID_HOME
については OK。
> [email protected] tauri
> tauri android init
action request: to initialize Android environment; Android support won't be usable until you fix the issue below and re-run `tauri android init`!
Have you installed the NDK? The `NDK_HOME` environment variable isn't set, and is required: environment variable not found
victory: Project generated successfully!
Make cool apps! 🌻 🐕 🎉
NDK のインストール
前述のようにNDK_HOME
をセットしろといわれているので、まずはndk
をインストールする。
sdkmanager --list | grep ndk
sdkmanager "ndk;29.0.13113456" # とりあえず最新
ANDROID_HOME
内にインストールされるので、NDK_HOME
を PATH に追加する。
export NDK_HOME=$ANDROID_HOME/ndk/29.0.13113456
npm run tauri android init
が通れば OK。
エミュレーターのインストールと起動
ここで android 用の開発サーバーを起動してみると、エミュレーターが見つからないというエラーがでる。
npm run tauri android dev
> [email protected] tauri
> tauri android dev
Error No available Android Emulator detected
Running BeforeDevCommand (`npm run dev`)
ということで emulator をインストールする。
sdkmanager "emulator"
また、エミュレーターで起動する avd(Android Virtual Device)を作成する必要がある。
作成に必要なsystem-image
をインストールする。
sdkmanager --list | grep system-images #確認
sdkmanager "system-images;android-36;google_apis;arm64-v8a"
avdmanager
を使用して作成する。
avdmanager create avd -n Pixel_4_API_30 -k "system-images;android-36;google_apis;x86_64" -d pixel_4
- 前述の
--sdk_root
を使用していると、avd 作成時に system-images を見つけられず下記のようなエラーが発生するavdmanager create avd -n Pixel_4_API_30 -k "system-images;android-36;google_apis;x86_64" -d pixel_4 [=======================================] 100% Fetch remote repository... Error: Package path is not valid. Valid system image paths are: null
ここまでできたら再度npm run tauri android dev
を実行する。
成功!!!
終わり
モバイルアプリ開発について何にも知らん状態だったのもあって、ここまででだいぶ苦労した。
こういうのはまだ AI も解決してくれないなあ......
あとは、ビルドして実端末で起動できるかを確認したい。あとは iOS か。