はじめに
Insider Preview 版でない Windows 11 でも WSA (Windows Subsystem for Android) が利用可能になりました。
- ついに日本でもAndroidアプリがWindows上で動作 ~「Amazon アプリストア」プレビュー版が一般提供 (窓の杜)
- Windows 11で動くAndroidアプリ ~ その背景にあるもの (ITmedia)
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 アプリストア』 を検索してインストールします。
『Amazon アプリストア』をインストールするとスタートメニューに 『Android 用 Windows サブシステム設定』 が追加されます。
インストール後は念のために Windows を再起動してください。
See also:
Delphi IDE から WSA を認識させる方法
1.まずは Delphi の IDE で Android ビルド向けの設定を終わらせておいてください。
2.スタートメニューから『Android 用 Windows サブシステム設定』を起動します。
3.開発者モードを ON にします。
4.[開発者向け設定の管理]をクリックします。
5.これで WSA が起動します 2。
6.ADB.EXE のある場所 3 へ行き adb connect 127.0.0.1:58526
4 を実行します。
7. 正しく接続されると、Android プラットフォームの [ターゲット] に Subsystem for Android(TM) が表示されます。
unauthorized
adb connect で 127.0.0.1:58526 unauthorized
が出て、接続はされてるけど許可されていない状態になる場合は、一旦 adb kill-server
で接続を切り、開発者向けオプションで、
- USB デバッグ OFF
- USB デバッグの許可の取り消し
- USB デバッグ ON
と操作し、そして再度
adb connect 127.0.0.1:58526
C:\Users\Public\Documents\Embarcadero\Studio\22.0\CatalogRepository\AndroidSDK-2525-22.0.46141.0937\platform-tools> adb connect 127.0.0.1:58526
connected to 127.0.0.1:58526
このような表示になれば OK です。
サイドローディング
サイドローディングとはストアアプリを経由しないアプリのインストール方法です。非公式ですが Microsoft 謹製のサイドローディングツールもあります。
Delphi IDE によるサイドローディング
結論から言うと、そのままでは Delphi IDE を用いたサイドローディングはできません。デプロイ (配置) はできますが、正しく動作しません。
Delphi で作ったアプリを WSA で動作させる
以下、Delphi で作ったアプリをサイドローディングして WSA で動作させる方法です。
サイドローディング用スクリプトの登録
まずはサイドローディング用のスクリプトを Delphi IDE に登録します。
- スクリプト (manualadb.bat) を適当な場所に保存します。
-
[ツール | ツールの構成]
を選び、
- [追加] ボタンを押します。
- 次のように設定します。
項目 | 値 |
---|---|
タイトル | Manual ADB |
プログラム | C:\Tools\manualadb.bat 5 |
作業ディレクトリ | C:\Tools 5 |
パラメータ | \$PATH(\$EXENAME) \$NAMEONLY(\$PROJECT) |
このスクリプトを使うためには ADB.EXE
のある場所にパスを通しておく必要があります。システム/ユーザー環境変数 PATH
にパスを追加したくない場合にはスクリプトでパスを追加してください。以下に改変したスクリプトを示します。
@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 の環境に合わせて書き換えてください。
set PATH=%PATH%;<あなたの環境で ADB.EXE の格納されているパス>
See also:
Delphi アプリケーションの作成とデプロイ
最低限の手順を示すため、新規プロジェクトで説明します。
- Delphi のプロジェクトを作成 (
[ファイル | 新規作成 | マルチデバイスアプリケーション]
) し、
- [プロジェクトマネージャ] でターゲットプラットフォームを
Android 64 ビット
に変更します。[ターゲット] に Subsystem for Android(TM) がある事を確認してください。
-
[ファイル | プロジェクトに名前を付けて保存]
でプロジェクトを一旦保存します。 - 〔Shift〕+〔F9〕(
[プロジェクト | Project1 をビルド]
) でプロジェクトを一旦ビルドします。 -
[ファイル | 開く]
でAndroidManifest.template.xml
を開きます。
-
android:resizeableActivity
の値をtrue
に変更して保存します。
- 適当なコントロールを貼ったりコードを書いてみてください。終わったら〔Shift〕+〔F9〕(
[プロジェクト | Project1 をビルド]
) でプロジェクトをビルドします。 - 〔Shift〕+〔Ctrl〕+〔Alt〕+〔F9〕(
[プロジェクト | libProject1.so の配置]
) で配置します。正しくビルド&配置されていれば、プロジェクトフォルダのAndroid64\Debug\Project1\bin
に APK ができているはずです。
-
[ツール | Manual ADB]
でサイドローディングを行います。
サイドローディングされたアプリケーションは正しく動作しましたか?
サイドローディングしたアプリケーションのアンインストール
最初、サイドローディングしたアプリケーションのアンストール方法がわからずに焦りました。
その1
Windows 11 のスタートメニューからインストールされたアプリケーションのアイコンを右クリックして [アンインストール] を選びます。
その2
- 『Android 用 Windows サブシステム設定』を起動し、[開発者向けオプション] を表示。
- 右上の虫眼鏡アイコンをクリック。
-
アプリ
と入力。アプリ (アプリ)
を探してクリック。
- アンインストールしたいアプリをクリック。
- [アンインストール] をクリック。
- [OK] をクリック。
その2.5
[設定]
画面へ行くには ADB.EXE (Activity Manager) を使うのが簡単なようです。
adb shell am start -a android.intent.action.MAIN -n com.android.settings/.Settings
その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.xml
のapplication android:resizeableActivity
の値を true に書き換える。 - スクリプトを使ってサイドローディングする。
となります。
本記事はエンバカさんの記事の焼き直しです。日本語版の記事が無かったようなので書いてみました。細かい注意点などについては元記事及びスライドを参照してください。
- Android on Windows 11: A Developer’s Perspective (blogs.embarcadero.com)
- Slides: Android on Windows 11 – A Developer’s Perspective (blogs.embarcadero.com)
- [RSP-32093] Android 11 Emulator Support (Quality Portal)
-
Native Bridge として Intel の Houdini (libhoudini.so) が使われているようです。 ↩
-
Delphi 11.x の場合、デフォルトで
C:\Users\Public\Documents\Embarcadero\Studio\22.0\CatalogRepository\AndroidSDK-2525-22.0.46141.0937\platform-tools
です (またはC:\Users\Public\Documents\Embarcadero\Studio\22.0\CatalogRepository\AndroidSDK-2525-22.0.47991.2819\platform-tools
)。 ↩ -
WSA では
172.~
で始まる IP アドレスも割り当てられていますが、127.0.0.1
での接続の方が簡単です。 ↩ ↩2