search
LoginSignup
4

posted at

updated at

Delphi 製アプリを WSA (Windows Subsystem for Android) で動作させるための要点

はじめに

Insider Preview 版でない Windows 11 でも WSA (Windows Subsystem for Android) が利用可能になりました。

WSA (Windows Subsystem for Android)

WSA (Windows Subsystem for Android) は Android アプリケーションを Windows 11 デバイスで実行できるようにするものです。

大雑把に言うと x86 向け Android が仮想環境で動作しています。基本的には x86 向けにビルドされたアプリケーションしか動作しないのですが、Native Bridge 1 という仕組みにより ARM 向けバイナリも一応動作します。

See also:

WSA のインストール

[Microsoft Store] から 『Amazon アプリストア』 を検索してインストールします。
image.png
『Amazon アプリストア』をインストールするとスタートメニューに 『Android 用 Windows サブシステム設定』 が追加されます。

インストール後は念のために Windows を再起動してください。

See also:

Delphi IDE から WSA を認識させる方法

1.まずは Delphi の IDE で Android ビルド向けの設定を終わらせておいてください。

2.スタートメニューから『Android 用 Windows サブシステム設定』を起動します。
image.png
3.開発者モードを ON にします。
image.png
4.[開発者向け設定の管理]をクリックします。
image.png
5.これで WSA が起動します 2
image.png
6.ADB.EXE のある場所 3 へ行き adb connect 127.0.0.1:58526 4 を実行します。
image.png
7. 正しく接続されると、Android プラットフォームの [ターゲット] に Subsystem for Android(TM) が表示されます。
image.png

サイドローディング

サイドローディングとはストアアプリを経由しないアプリのインストール方法です。非公式ですが Microsoft 謹製のサイドローディングツールもあります。

Delphi IDE によるサイドローディング

結論から言うと、そのままでは Delphi IDE を用いたサイドローディングはできません。デプロイ (配置) はできますが、正しく動作しません。

Delphi で作ったアプリを WSA で動作させる

以下、Delphi で作ったアプリをサイドローディングして WSA で動作させる方法です。

サイドローディング用スクリプトの登録

まずはサイドローディング用のスクリプトを Delphi IDE に登録します。

  1. スクリプト (manualadb.bat) を適当な場所に保存します。
  2. [ツール | ツールの構成] を選び、
    image.png
  3. [追加] ボタンを押します。
    image.png
  4. 次のように設定します。
    image.png
項目
タイトル Manual ADB
プログラム C:\Tools\manualadb.bat 5
作業ディレクトリ C:\Tools 5
パラメータ \$PATH(\$EXENAME) \$NAMEONLY(\$PROJECT)

このスクリプトを使うためには ADB.EXE のある場所にパスを通しておく必要があります。システム/ユーザー環境変数 PATH にパスを追加したくない場合にはスクリプトでパスを追加してください。以下に改変したスクリプトを示します。

manualadb.bat
@echo off
REM Call from Delphi/RAD Studio IDE with the following parameters
REM $PATH($EXENAME) $NAMEONLY($PROJECT)
set PATH=%PATH%;C:\Users\Public\Documents\Embarcadero\Studio\22.0\CatalogRepository\AndroidSDK-2525-22.0.46141.0937\platform-tools
set PACKAGE=com.embarcadero
echo =============================================================
echo Be sure you Compile Android 64 and Deploy [Shift-Ctrl-Alt-F9]
echo. 
echo Also set ^<application android:resizeableActivity=^"true^"^> in AndroidManifest.template.xml
echo =============================================================
echo Path: %1
set apk=%2\bin\%2.apk
echo APK: %apk%
cd %1
cd %2\bin
echo.
dir %2.apk
echo.
if exist %2.apk (
adb install -r --no-streaming %2.apk
adb shell am start -n %PACKAGE%.%2/com.embarcadero.firemonkey.FMXNativeActivity
echo You can close this window....
timeout /t 10
) else (
echo =============================================================
echo Your APK file is missing!
echo Be sure you Compile Android 64 and Deploy [Shift-Ctrl-Alt-F9]
echo =============================================================
pause
)

上記スクリプトのパスは Delphi 11.2 Alexandria 用です。お手持ちの Delphi の環境に合わせて書き換えてください。

manualadb.bat
set PATH=%PATH%;<あなたの環境で ADB.EXE の格納されているパス>

プロジェクトオプションで package を変更した場合にも、スクリプトを書き換える必要があります。
image.png

manualadb.bat
set PACKAGE=com.hogehoge

See also:

Delphi アプリケーションの作成とデプロイ

最低限の手順を示すため、新規プロジェクトで説明します。

  1. Delphi のプロジェクトを作成 ([ファイル | 新規作成 | マルチデバイスアプリケーション]) し、
    image.png
  2. [プロジェクトマネージャ] でターゲットプラットフォームを Android 64 ビット に変更します。[ターゲット] に Subsystem for Android(TM) がある事を確認してください。
    image.png
  3. [ファイル | プロジェクトに名前を付けて保存] でプロジェクトを一旦保存します。
  4. 〔Shift〕+〔F9〕([プロジェクト | Project1 をビルド]) でプロジェクトを一旦ビルドします。
  5. [ファイル | 開く]AndroidManifest.template.xml を開きます。
    image.png
  6. android:resizeableActivity の値を true に変更して保存します。
    image.png
  7. 適当なコントロールを貼ったりコードを書いてみてください。終わったら〔Shift〕+〔F9〕([プロジェクト | Project1 をビルド]) でプロジェクトをビルドします。
  8. 〔Shift〕+〔Ctrl〕+〔Alt〕+〔F9〕([プロジェクト | libProject1.so の配置]) で配置します。正しくビルド&配置されていれば、プロジェクトフォルダの Android64\Debug\Project1\bin に APK ができているはずです。
    image.png
  9. [ツール | Manual ADB] でサイドローディングを行います。
    image.png
    サイドローディングされたアプリケーションは正しく動作しましたか?
    image.png

サイドローディングしたアプリケーションのアンインストール

最初、サイドローディングしたアプリケーションのアンストール方法がわからずに焦りました。

その1

Windows 11 のスタートメニューからインストールされたアプリケーションのアイコンを右クリックして [アンインストール] を選びます。
image.png

その2

  1. 『Android 用 Windows サブシステム設定』を起動し、[開発者向けオプション] を表示。
  2. 右上の虫眼鏡アイコンをクリック。
    image.png
  3. アプリ と入力。アプリ (アプリ) を探してクリック。
    image.png
  4. アンインストールしたいアプリをクリック。
    image.png
  5. [アンインストール] をクリック。
    image.png
  6. [OK] をクリック。
    image.png

その2.5

[設定] 画面へ行くには ADB.EXE (Activity Manager) を使うのが簡単なようです。

adb shell am start -a android.intent.action.MAIN -n com.android.settings/.Settings

[設定] から [アプリ] へはすぐ行けます。
image.png

その3

ADB.EXE (Package Manager) を使ったアンインストールも可能です。

 adb shell pm uninstall -kパッケージ名

指定するパッケージ名は com.embarcadero.Project1 みたいな感じです。

おわりに

Delphi 製アプリを WSA (Windows Subsystem for Android) で動作させるための要点をまとめると、

  • 事前に WSA を起動しておく 2
  • adb connect 127.0.0.1:58526 4 で WSA へ接続する。
  • ターゲットプラットフォームを Android 64 ビット にする。
  • AndroidManifest.template.xmlapplication android:resizeableActivity の値を true に書き換える。
  • スクリプトを使ってサイドローディングする。

となります。

本記事はエンバカさんの記事の焼き直しです。日本語版の記事が無かったようなので書いてみました。細かい注意点などについては元記事及びスライドを参照してください。

  1. Native Bridge として Intel の Houdini (libhoudini.so) が使われているようです。

  2. 『Amazon アプリストア』や、そこからインストールしたアプリを実行する事でも WSA が起動します。 2

  3. Delphi 11.x の場合、デフォルトで C:\Users\Public\Documents\Embarcadero\Studio\22.0\CatalogRepository\AndroidSDK-2525-22.0.46141.0937\platform-tools です。

  4. WSA では 172.~ で始まる IP アドレスも割り当てられていますが、127.0.0.1 での接続の方が簡単です。 2

  5. manualadb.batC:\Tools に保存した場合。 2

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
What you can do with signing up
4