在 Mac OS 上创建 Android 虚拟设备

前言

当我们手边没有实体的调试设备时, 可能会使用第三方厂商的 Android 模拟器, 或者基于 VirtualBox 的 Genymotion 创建虚拟设备.
机缘巧合, 我发现了一种新的创建 Android 虚拟设备的方式, 可以通过命令行独立使用 Android Studio 的 Emulator 模拟器.

使用这种方式创建出来的虚拟设备, 兼容性要比 x86 的 Genymotion 要好, 不需要 Arm Translator 一类的东西, 性能也还不错, 虽然有些诡异的应用还是不能正常运行, 但是也能临时应付一下没有实体设备的场景.

下面就具体介绍一下安装方式.


安装 SDK

使用 home-brew 安装 jdk 和 android-sdk

1
2
$ brew install openjdk@8
$ brew install android-sdk


设置环境变量

将项目启动依赖的环境变量设置一下, 然后还需要将 emulator 所在的目录添加到环境变量 PATH 中

1
2
3
4
$ export ANDROID_SDK_ROOT=/usr/local/share/android-sdk/
$ export JAVA_HOME=/usr/local/Cellar/openjdk@8/1.8.0+322/
$ export ANDROID_AVD_HOME=$HOME/.android/avd
$ export PATH=$ANDROID_SDK_ROOT/emulator:$PATH

这里 openjdk@8 子目录的名称需要手动确认, 版本号可能随着时间的推移发生变更


安装 Android SDK 组件

在下载安装 Android 系统之前, 还需要安装必要的组件

1
$ sdkmanager "platform-tools"

我们可以再查看一下可选用的系统版本列表

1
$ sdkmanager --list | grep system-images


选择并安装 Android 系统

选择好系统之后, 我们可以选择安装指定版本的 Android API 和系统镜像

1
2
$ sdkmanager "platforms;android-30"
$ sdkmanager --install "system-images;android-30;google_apis;x86_64"


创建虚拟设备

完成上述所有准备工作后, 就可以开始创建一台 Android 虚拟设备了

1
$ echo "no" | avdmanager --verbose create avd --force --name "android11" --package "system-images;android-30;google_apis;x86_64" --tag "google_apis" --abi "x86_64"


提前配置启动参数

如果直接启动的话, 还需要通过命令行添加一些参数.
为了方便, 可以将这些常用参数直接写入配置文件中, 避免每次设置.

将如下几行配置追加到 $ANDROID_AVD_HOME/android11.avd/config.ini 文件中

1
2
3
skin.name=1080x1920
hw.lcd.density=480
hw.keyboard=yes


启动虚拟设备

接下来就可以根据配置的设备名称, 启动虚拟设备了.

1
2
$ cd $ANDROID_SDK_ROOT/emulator
$ emulator -avd android11

这里有个遗留问题是, 虽然我们已经将 emulator 的目录添加到了环境变量中, 但是在任意位置启动时会抛出异常, 解决办法是先 cd 进 emulator 的目录, 然后再启动, 不知道这个问题以后会不会修复

这样, 我们就成功的在 Mac OS 上创建了一台可以用于调试的 Android 虚拟设备.
之后就可以使用 ADB 或者直接拖动 apk 文件到虚拟设备安装应用了.


附注

  1. 由于不同的镜像或 Android API 版本最终能获得的权限不同, 如果需要 root 权限还需要自行测试, 本文使用的示例是经过测试可以获取 root 权限的.
  2. 特定的 Android 9 和任意版本的 Android 11 镜像已经默认支持 ARM 指令集的应用.
  3. 更多详细内容可以参考 Android Studio Emulator相关的文档.
  4. 会有一些诡异的应用无法安装或者无法启动, 需要尝试才能知道.


参考资料

[1] Install and Create Emulators using AVDMANAGER and SDKMANAGER
[2] Android Studio - Command line tools
[3] Android Studio - Start the emulator from the command line
[4] Support for ARM binaries on Android 9 and 11 system images