Skip to content

使用 Windows 安卓子系统 ​

失去维护

WSA 项目已经被微软官方放弃维护,不再提供更新。

1. 安装官方版本的 WSA ​

Windows 安卓子系统(Windows Subsystem for Android™,WSA)使 Windows 11 能够运行 Android 应用程序。

首先确认你的 Windows 版本是否支持 WSA:

  • x64 或 ARM64 架构的现代处理器
  • Windows 11
  • 至少 8 GB 的 RAM

确认后,需要 Windows 开启 虚拟机平台,如果没有打开,请在 启用或关闭 Windows 功能 中打开 虚拟机平台,然后重启。

目前 WSA 还处于预览阶段,仅在部分地区可用,需要将 Windows 地区设置为 美国,然后在 Microsoft Store 安装 Amazon Appstore 即可,相信不久 WSA 就可以开放使用。

安装完成后,系统将出现 适用于 Android™ 的 Windows 子系统 的应用,打开即可。

现在,你的 Windows 11 可以安装任何 Android 应用了,Android 应用和已经安装的 Windows 应用看起来一模一样。

然后进行一些配置,例如,如果你需要使用 WSA 进行开发,那么打开 开发人员模式 选项。

可选配置:图形和性能,可指定显卡运行 Android 子系统,例如指定为 NVIDIA GeForce RTX 3070 Ti Laptop GPU,以提升性能。

版本信息

通过查看系统版本,我们发现此系统是 Android 13,内核版本如下:

text
5.10.117-windows-subsystem-for-android-20220906
#1 Tue Sep 6 23:23:03 UTC 2022

使用 Termux 命令 uname -a 的输出如下:

text
Linux localhost 5.10.117-windows-subsystem-for-android-20220906
#1 SMP PREEMPT Tue Sep 6 23:23:03 UTC 2022 x86_64 Android

这不是意味着 WSA 使用 x86_64 架构,WSA 使用 Intel Bridge 技术在基于 x86 的处理器上模拟 ARM 应用程序,这可以让其兼容 x86 和 ARM 架构的应用程序。

WSA 和 WSL 2 使用的不是一张网卡,WSA 使用 以太网适配器 vEthernet (WSLCore),而 WSL 2 使用 以太网适配器 vEthernet (WSL)。

2. 使用 ADB 连接 ​

ADB

下面的所有操作需要 ADB 工具,如果没有安装,请先安装 ADB 工具。

如果不希望使用开启调试,可以直接阅读 3. 使用 WSA 中的相关说明进行使用。

确保已经打开 开发人员模式。

查看 ADB 版本:

bash
adb version

设置开发者模式后,现在可以直接连接 WSA:

bash
adb connect 127.0.0.1:58526

第一次连接会提示是否授权,勾选 总是允许来自此计算机的连接,然后点击 允许 即可。

使用下面的命令安装 APK:

bash
adb install <apk-file>

3. 使用 WSA ​

通常启动一个应用需要知道其包名,如果你已经知道包名,那么直接在文件管理器中输入 wsa://<package-name> 即可启动应用。

如果不知道,可以使用下面的命令查看所有已安装的应用的包名:

bash
adb shell pm list packages

所有的 Android 都可以使用下面的命令启动应用:

bash
adb shell am start -n <package-name>/<activity-name>

但是获取一个应用的首屏 Activity 名称比较麻烦,可以使用下面的命令查看应用的详细信息:

bash
adb shell dumpsys package <package-name>

由于 Windows 11 支持从包名启动,所以可以使用 CMD 命令行来启动应用,例如启动设置:

bash
start wsa://com.android.settings

由于 WSA 没有桌面,操作有点麻烦,我们可以给其安装一个 微软桌面,然后新建一个快捷方式,地址是:

yml
wsa://com.microsoft.launcher

这样双击就可以打开 Android 子系统的桌面了,但是不能设置为默认桌面,也不能更换壁纸,原因是 WSA 的默认应用指向了 Windows 默认应用。

4. 配合 Android Studio 进行开发 ​

如果已经使用 ADB 连接到 WSA,那么就可以使用 Android Studio 会自动识别,并在设备中显示 Microsoft Corporation Subsystem for Android(TM),可以像正常开发 Android 应用一样开发。

如何置顶窗口?Windows 10 和以前窗口置顶可以通过一些小工具实现(如 ViewWizard),Windows 11 现在可以使用最新的 PowerToys 来实现。[1]

在 PowerToys 项目的 Releases 中下载安装最新版本即可直接使用。在任意窗口中按 Win + Ctrl + T 切换置顶即可。

如果需要锁定大小,可以在 WSA 的设置界面给每个应用程序单独设置。

闪退

注意:部分应用随意调整大小时可能闪退。

如果使用 Android Studio 进行开发时,调整应用大小出现闪退,则可能是空指针异常。部分视图事件在重绘时没有传入 view,因此调整出错事件的视图对象,类型是 View?(Kotlin)或 Optional<View>(Java),需要进行判空处理。

还有一些行为和实体机不一致:例如 Toast,实体机上 Toast 会显示在最上层,但是在 WSA 上 Toast 将发送到 Windows 通知栏。如果没有显示 Toast,可以检查 Windows 通知栏是否有通知或者是否开启了通知。

5. 安装 Google Play 版本的 WSA ​

如果你不想使用 Amazon Appstore,或者你需要自定义一些配置(如可 Root、安装面具等)可以安装 Google Play 版本的 WSA。

WSA 的社区维护版本下载:MustardChef/WSABuilds。

甚至可以安装一些极客软件:

  • Termux
  • Magisk
  • SuperSU
  • TaiChi
  • Xposed
  • LSposed
  • KernelSU
  • Kernel Flasher
  • Mono

甚至能安装其他虚拟化软件(Android 容器和虚拟机),或者使用 Termux 安装其他 Linux 系统,使用自编译的 Linux 内核替换现有内核,运行更多自定义守护进程,甚至运行 Docker 容器。

6. 卸载和备份 ​

6.1 卸载 ​

如果需要安装其他发行版的 WSA(如官方版本),需要卸载现有版本的 WSA。

  1. 打开 适用于Android(TM) 的 Windows 子系统
  2. 关闭 WSA:系统 -> 关闭适用于Android(TM) 的 Windows 子系统 -> 关闭
  3. 右键卸载此应用

6.2 备份数据 ​

如果是更新 Google Play 版本的 WSA,可以直接在安装新版本的 WSA 时选择保留数据。

用户数据在此文件中:

bash
%LOCALAPPDATA%\Packages\MicrosoftCorporationII.WindowsSubsystemForAndroid_8wekyb3d8bbwe\LocalCache\userdata.vhdx

复制此文件夹名称,然后使用 Win + R 打开 运行,粘贴回车即可打开此文件夹。

6.3 备份 APK 文件 ​

可以使用 Adb 批量备份 APK 文件。

列出包名:

bash
adb shell pm list package

列出 APK 文件路径:

bash
adb shell pm path ${package_name}

复制文件到电脑上:

bash
adb pull ${device_path} ${host_path}
批量备份脚本

查看哪些包需要备份,通常是没有 android 和 windows 的包名:

bash
adb shell pm list package | sed s/package://g | sed /android/d | sed /windows/d

Windows 下使用 Linux 工具可以参考 Git 提供的工具包。

使用 Git 提供的 bash 支持命令,将下列脚本保存为 wsa-copy-apk.sh,然后在 bash 中运行即可。

bash
packages=$(adb shell pm list packages | cut -d ":" -f 2 | sed 's/ //g' | grep -v "android" | grep -v "windows" | grep -v "google")

for package in $packages; do
    echo "[INFO] Backup" $package "now ..."
    apk_path=$(adb shell pm path $package | grep "/base.apk" | cut -d ":" -f 2 | sed 's/ //g')
    if [ ! -z "$apk_path" ]; then
        echo "[INFO] Saving" $apk_path "->" $package.apk
        adb pull $apk_path $package.apk
    else
        echo "[WARN] Not normal package" $package
    fi
done

WSL 2 的提供了一个 bash 命令和 Git 提供的是不兼容的,WSL 2 连接 WSA 较为繁琐。

7. 使用 ROOT 权限 ​

可以通过安装 Root Checker Basic 来检查 ROOT 权限。如果你已经安装过 Magisk,会弹出授权界面,对此应用授权即可。

在 Termux 中可以通过安装 tsu 来模拟 su 命令:

bash
pkg install tsu

然后使用 tsu 命令即可获取 ROOT 权限。

bash
tsu

  1. PowerToys 是微软开发的一系列实用工具,包括窗口置顶功能。 ↩︎