コントリビュート

このドキュメントを編集

ドキュメントを翻訳するか、お使いのコンピューターでプロジェクト全体を開きます。

作業内容を送信するまで、何も公開されません。

Android

Android で Wails アプリケーションをビルドして実行する方法 — ツールチェーンのセットアップ、エミュレーター、APK の署名、Play ストア向けパッケージング、API リファレンス

Wails v3 アプリケーションは、Android 上でネイティブアプリとして動作します。Android のWebViewがフロントエンドをレンダリングし、アセットは Go アセットサーバーを基盤とするWebViewAssetLoaderを通じてインプロセスで配信されます(localhost サーバーも開放ポートも使用しません)。また、標準の@wailsio/runtimeは変更なしで動作し、サービスバインディング、イベント、ダイアログ、クリップボードは Go メッセージプロセッサーを経由します。

同じmain.goからデスクトップ向けと Android 向けの両方をビルドできます。Go コードは C 共有ライブラリ(libwails.so、GOOS=android + NDK ツールチェーン)としてコンパイルされ、小さな Java ホストによって読み込まれます。Android 固有の動作は、//go:build androidで保護されたプラットフォーム別の Go ファイルに実装されています。

要件

  • platform-tools、SDK プラットフォーム(API 35)、build-tools、NDK(26.3.x)を含むAndroid SDK — 検出された項目はwails3 doctorで確認できます
  • Gradle 用のJDK(例:OpenJDK 21)。javaがPATHに含まれていない場合は、JAVA_HOMEを設定してください
  • Go 1.25以降と npm
  • SDK を指すANDROID_HOME(またはANDROID_SDK_ROOT)

コマンドラインツールを使用して、必要な SDK コンポーネントをインストールします:

bash
sdkmanager "platform-tools" "platforms;android-35" "build-tools;35.0.0" \
           "ndk;26.3.11579264" "emulator" \
           "system-images;android-35;google_apis;arm64-v8a"
avdmanager create avd --name wails \
           --package "system-images;android-35;google_apis;arm64-v8a" \
           --device pixel_7

エミュレーターでの実行

プロジェクトディレクトリで次を実行します:

bash
wails3 task android:run

エミュレーターが実行されていない場合は起動し、バインディングの生成、フロントエンドのビルド、エミュレーターの ABI 向けの Go コードのlibwails.soへのコンパイル、Gradle によるデバッグ APK の作成を順に行ってから、その APK をインストールして起動します。

併用すると便利なコマンド:

bash
wails3 task android:logs    # stream the app's logcat output

デバッグビルドでは、Chrome のchrome://inspectから WebView を検査できます。

パッケージング

bash
wails3 task android:package             # production release APK
wails3 task android:deploy-emulator     # install + launch it
wails3 task android:bundle              # production release AAB (Android App Bundle)
wails3 task android:bundle:fat          # release AAB containing all ABIs
wails3 task android:run:device          # debug install + launch on a physical device
wails3 task android:deploy-device       # install + launch on a physical device
DEVICE_ID=<serial> wails3 task android:run:device
DEVICE_ID=<serial> wails3 task android:deploy-device

本番ビルドでは-tags production,androidを使用し、シンボルを除去するとともに、フレームワークの内部診断機能をコンパイル対象から除外します。wails3 task android:package:fatはarm64-v8aとx86_64の両方をビルドし、1 つの APK にまとめます。

Google Play では、新しいアプリの申請に Android App Bundle(.aab)形式が必要です。また、新規申請では Android 15(API 35)以降を対象にする必要があります。プロジェクトテンプレートでは、build/android/app/build.gradle内のcompileSdkとtargetSdkが35に設定されています。wails3 task android:bundle:fatを実行すると、両方の ABI を含むbin/<AppName>.aabが生成されます。Google Play はそこからデバイスごとに最適化された APK を生成するため、このファットバンドルがストアへのアップロードに適した成果物です。.aabはadbで直接インストールできないため、ローカルテストやエミュレーターでのテストには引き続き APK が最も手軽です。

android:runとandroid:deploy-emulatorはエミュレーター向けのタスクです。物理 Android デバイスでは、デバッグ APK にandroid:run:device、リリース APK にandroid:deploy-deviceを使用してください。どちらもarm64向けにビルドし、adb devicesに表示される接続済みの非エミュレーターエントリのうち最初のものを選択してインストールし、com.wails.app.MainActivityを起動します。特定のデバイスを対象にするには、DEVICE_ID=<serial>を渡してください。

署名とリリースビルド

キーストアがない場合、リリースビルドはテスト用にインストールできるよう、Android のデバッグキーストアで署名されます。独自のキーストアで署名するには、次を設定します:

bash
ANDROID_KEYSTORE_FILE=/path/to/release.jks \
ANDROID_KEYSTORE_PASSWORD=... \
ANDROID_KEY_ALIAS=... \
ANDROID_KEY_PASSWORD=... \
  wails3 task android:package

同じ変数を使用して App Bundle にも署名できます。これらを設定してwails3 task android:bundle:fatを実行すると、Play に提出可能な.aabが生成されます。設定しない場合、バンドルはデバッグキーストアで署名され、Google Play に拒否されるため、タスクは警告を表示します。

設定

フロントエンドは実行時にAndroidランタイムオブジェクトを介して、Android.Haptics.Vibrate(durationMs)、Android.Device.Info()、Android.Toast.Show(message)などの Android 機能を操作します。パッケージ名は、ビルドタスク内のAPP_IDで指定します。

動作する機能と動作しない機能

領域 状態
WebView + インプロセスアセット(WebViewAssetLoader) ✅
サービスバインディング、イベント(双方向) ✅
メッセージダイアログ ✅ ボタンコールバックに対応した AlertDialog
ファイルを開く/複数ファイルを開くダイアログ ✅ Storage Access Framework(ファイルはキャッシュのコピーとしてインポート)
ディレクトリを開く/ファイルを保存するダイアログ ❌ エラーを返す — 代わりにアプリのサンドボックス内へ書き込んでください
クリップボード ✅ ClipboardManager
画面 API ✅ システムバーを除いた作業領域を含む WindowMetrics
ライフサイクルイベント(events.Android.*) ✅
ハプティクス、デバイス情報、トースト ✅ Android.*ランタイム API
エミュレーターおよび物理デバイス向けビルド ✅ android:run、android:run:device、android:deploy-emulator、android:deploy-device
ウィンドウジオメトリ、メニュー、システムトレイ 意図的に何もしない処理
複数ウィンドウ 最初のウィンドウのみ表示

移植時の注意事項

  • デスクトップ用コードはGOOS=androidでも変更せずにコンパイルできます。Android アプリはフルスクリーンで動作するため、ジオメトリ、メニュー、トレイに対する呼び出しは何もしない処理になります。
  • androidはlinuxビルドタグを暗黙的に有効にします(Android は Linux カーネルを使用しています)。デスクトップ Linux 専用のファイルには//go:build linux && !androidが必要であり、実行時のruntime.GOOSは"android"になります。
  • ファイル保存ダイアログとディレクトリ選択ダイアログは、アプリのサンドボックスへの書き込みと、インテントを使った共有フローに置き換えてください。ファイルを開くダイアログは動作し、選択したドキュメントをキャッシュディレクトリ内のコピーとしてインポートするため、実際のファイルシステムパスを取得できます。
  • 実際のアプリは常に CGO_ENABLED=1 と NDK を使用してビルドします。cgo を使用しないパスは、wails3 generate bindings などのツールがパッケージを読み込めるようにするためだけに存在します。
  • フロントエンドはレスポンシブに設計してください。Screens の作業領域には、ステータスバーとナビゲーションバーは含まれません。
ページを編集

最終更新: