1. トップ
  2. 新着ニュース
  3. IT
  4. IT総合

Windows Subsystem for Androidの進化を確認 エクスプローラーからのファイルのドラッグ&ドロップが可に

ASCII.jp / 2023年9月24日 10時0分

 Windows 11で、Androidアプリケーションを起動するWindows Subsystem for Android(以下、WSA)は、頻繁にアップデートされている。今年2月に当時の状況を紹介した後(「AndroidアプリがWindowsで動く、「Windows Subsystem for Android」は今どうなってる?」)、先月までに5回のアップデートもあった。また、細かなバグも修正もされている。今回は、この半年の間の改良を見ていくことにしよう。

Windows Subsystem for Android

4月の更新ではPIPやメモリ占有量を減らした常駐が可能に

 4月のアップデート(WSAバージョン2303.40000.3.0)では、「PIP(Picture-In-Picture)」と「Partially running」がサポートされた。PIPは、Android内では他のアプリなどの画面上に、小さなオーバーラップウィンドウでビデオ再生などを表示するものだ。

 PIPを有効にすると、Windowsのデスクトップの右下、システムトレイの上にウィンドウが移動し、PIPウィンドウとして表示される。もともとAndroidアプリは、独立したウィンドウで表示されているので、あまり代わり映えしないが、PIP状態に入ったアプリを通常状態に戻す、あるいはPIPを許可しないという使い方はできるようだ。

Windows Subsystem for Android
Androidのサンプルプログラムを改良してPIPを用いるアプリを作成した。PIPウィンドウを開くと、システムトレイの直上のコンパクトなウィンドウとして表示される。通常のWSAのAndroidアプリウィンドウと異なり、タイトルバー右上に「戻る」ボタン(左矢印)がない

 一方のPartially runningは、WSAの設定アプリ(Android用Windowsサブシステム)の「詳細設定」→「メモリとパフォーマンス」→「サブシステムリソース」の設定に追加された機能だ。従来は、「継続」「必要時」の2つしか設定がなく、WSAを常駐させるか、毎回起動するかの二択だったが、「部分的に実行中」(日本語版の表記)を選択すると、WSAを最小リソースで常駐させ、アプリの起動時間を短縮させつつ、メモリ専有量を減らすことができる。

 WSAは、仮想マシンで実現されており、おそらく仮想マシンを起動状態にしたまま、メモリ割り当てを減らすなどして、リソース占有量を減らしたものと考えられる。

 続いて、WSAバージョン2304.40000.5.0では、パッケージをインストールする前にウィルススキャンをする「パッケージ検証」機能と、URLからAndroidアプリを起動するAndroid AppLinkがサポートされた。

 このAppLinkが有効だと、アマゾンから来たメールにあるURLなどをクリックすると、WSAが1回起動してからブラウザでページが開くことがある。これは「Windowsの設定」→「アプリ」→「Webサイト用のアプリ」で、「Windows Subsystem for Android」のトグルスイッチをオフにして、AppLinkを禁止すれば止められる。

ドラッグ&ドロップとコピー/貼り付けによる ファイル転送に対応した

 6月に配布されたWSAバージョン2305.40000.4.0以降では、Androidアプリに対して、エクスプローラーからのドラッグ&ドロップやコピー/貼り付けでファイル転送が可能になった。

 ただし、Androidアプリ側は共有機能を公開している必要がある。Androidのアプリケーションの多くは、共有機能で情報を受け取ることができる。アプリは、インストール時にシステムにデータタイプ(MIMEタイプ)や呼び出しエントリポイントなどを登録する。これらはアプリの開発時に指定するもので、後から設定するものではない。

 通常はAndroidの共有機能から起動され、アプリが起動してデータが読み込まれる。ドラッグ&ドロップによるファイル転送機能は、これを応用したものだ。ドラッグ&ドロップが実行されたときWSAがアプリの共有機能を起動してファイルを転送する。このため、Androidアプリ側が、ファイルタイプを共有機能で受け入れ可能でなければならない。同様に「コピー/貼り付け」でファイルを転送するには、クリップボードからの情報読み込みに対応している必要がある。

 エクスプローラーなどでコピー、あるいはドラッグした対象データファイルのタイプと、Androidアプリ側の受け入れ可能なデータタイプが一致したときのみファイル転送機能が有効になる。

ローカルネットワークアクセス機能を搭載

 7月に公開されたバージョン2306.40000.4.0では、ローカルネットワークアクセス機能が搭載された。これはWSAからのネットワークアクセスを、Win32側のIPアドレスを用いて実行するものだ。設定は、WSA設定の「詳細設定」→「試験的な機能」→「ローカルネットワークアクセス」から。

Windows Subsystem for Android
WSAの設定アプリ。ローカルネットワークアクセスやユーザーフォルダ共有は現時点では「試験的な機能」になっている

 この設定が作られる以前は、WSAからのネットワークアクセスは、WSAをホストしている仮想マシンのネットワークスイッチ設定を使い、ホスト側とは異なるIPアドレスからLAN側をアクセスしていた。

 WSAは、仮想マシンで実行されるLinuxカーネルで動作する。このため、ホスト側Win32とはネットワークスタックが異なる。Windowsの仮想マシンでは、「仮想ネットワークスイッチ」を使って、違うネットワークアドレスを仮想マシンに割り当て、仮想的な内部ネットワークを介して、ホストやホストが接続するLANにアクセスする。このあたりの仕組みは、WSL2とまったく同じである。

 しかしWSAでは、IPアドレスをWin32側と同じにできる。ローカルネットワークアクセスを有効にするとAndroidのIPアドレスは、Win32側と同じになる。これは、Androidアプリデバッグ用のadb.exeで接続して、シェルを起動することで確認できる。また、アクセスされる側で調べても同様の結果が出る。

Windows Subsystem for Android
adbコマンドでシェルを起動してWSAのIPアドレスを調べた。ローカルネットワークアクセスをオンにすると、WSAのIPアドレスがWin32側のIPアドレスと同じになった

 一般に2つの異なるTCP/IPネットワークスタックが同一のIPアドレスを扱うことは困難だ。スタック内で接続状態を管理しなければならないからだ。だとすると、WSAではLinuxカーネル内のTCP/IPスタックではなく、Win32側のTCP/IPスタックを利用していることが想定される。このローカルネットワークアクセスの切り替えではWSAの再起動が必要になることから、カーネルやそれに近いモジュールが切り替えられていると想像される。

 ちなみにWSAでは、WSLとは異なるLinuxカーネルが使われている。これは、Linuxカーネルのバージョンが異なることから判断できる。WSAのカーネルバージョンは、前述のadb経由でシェルを起動することで確認できる。どちらも「uname -a」コマンドでカーネルバージョンを調べられる。原稿執筆時点では、WSAのカーネルバージョンは「5.15.104-windows-subsystem-for-android-20230710+」、WSLは「5.15.90.1-microsoft-standard-WSL2」だ。

Windows Subsystem for Android
WSAとWSLでは同一マシン内であっても、異なるバージョンを使う。これは、それぞれ専用のLinuxカーネルイメージを用いていることを意味している

フォルダ共有機能も強化される

 この7月のアップデートでは、フォルダ共有機能も強化された。1つ前のバージョンで「ユーザーフォルダ共有」機能として提供された機能は、任意のフォルダを共有できるフォルダ共有機能になった。これは、同じくWSA設定の「詳細設定」→「試験的な機能」→「ユーザーフォルダーを共有する」から可能。Androidアプリ側では「/sdcard/Windows」が共有フォルダとなる。

 名称はそのままだが、「フォルダーの変更」ボタンを使うことで、任意のフォルダーをWSAとWin32側で共有することが可能になる。「ユーザーフォルダー」の名前が残るのは、デフォルトがユーザーフォルダーになっていることに加え、隠しファイルなど動作に支障が出るファイルなどへのWSAからのアクセスが禁止されているからだ。

 なお、現時点で最新となるWSA バージョン 2307.40000.5.0は、Android 13のセキュリティアップデートやWebViewの更新で、そのほかの改良点としては、プラットフォームの安定性が向上とあるだけだ。これまでの更新でも、頻繁に安定性の向上が入るところを見ると、まだまだ不安定な部分が残るのであろう。

 WSA(Windows Subsystem Android)とWSL(Windows Subsystem Linux)は、名称が似ていて、仮想マシンを使って実現されているが、異なるLinuxカーネルを使うなど、実装には大きな違いがあるようだ。

この記事に関連するニュース

トピックスRSS

ランキング

記事ミッション中・・・

10秒滞在

記事にリアクションする

記事ミッション中・・・

10秒滞在

記事にリアクションする

デイリー: 参加する
ウィークリー: 参加する
マンスリー: 参加する
10秒滞在

記事にリアクションする

次の記事を探す

エラーが発生しました

ページを再読み込みして
ください