在 Mac OS 上创建 Android 虚拟设备
前言
当我们手边没有实体的调试设备时, 可能会使用第三方厂商的 Android 模拟器, 或者基于 VirtualBox 的 Genymotion 创建虚拟设备.
机缘巧合, 我发现了一种新的创建 Android 虚拟设备的方式, 可以通过命令行独立使用 Android Studio 的 Emulator 模拟器.
使用这种方式创建出来的虚拟设备, 兼容性要比 x86 的 Genymotion 要好, 不需要 Arm Translator 一类的东西, 性能也还不错, 虽然有些诡异的应用还是不能正常运行, 但是也能临时应付一下没有实体设备的场景.
下面就具体介绍一下安装方式.
安装 SDK
使用 home-brew 安装 jdk 和 android-sdk
1 | $ brew install openjdk@8 |
设置环境变量
将项目启动依赖的环境变量设置一下, 然后还需要将 emulator 所在的目录添加到环境变量 PATH 中
1 | $ export ANDROID_SDK_ROOT=/usr/local/share/android-sdk/ |
这里 openjdk@8 子目录的名称需要手动确认, 版本号可能随着时间的推移发生变更
安装 Android SDK 组件
在下载安装 Android 系统之前, 还需要安装必要的组件
1 | $ sdkmanager "platform-tools" |
我们可以再查看一下可选用的系统版本列表
1 | $ sdkmanager --list | grep system-images |
选择并安装 Android 系统
选择好系统之后, 我们可以选择安装指定版本的 Android API 和系统镜像
1 | $ sdkmanager "platforms;android-30" |
创建虚拟设备
完成上述所有准备工作后, 就可以开始创建一台 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 | skin.name=1080x1920 |
启动虚拟设备
接下来就可以根据配置的设备名称, 启动虚拟设备了.
1 | $ cd $ANDROID_SDK_ROOT/emulator |
这里有个遗留问题是, 虽然我们已经将 emulator 的目录添加到了环境变量中, 但是在任意位置启动时会抛出异常, 解决办法是先 cd 进 emulator 的目录, 然后再启动, 不知道这个问题以后会不会修复
这样, 我们就成功的在 Mac OS 上创建了一台可以用于调试的 Android 虚拟设备.
之后就可以使用 ADB 或者直接拖动 apk 文件到虚拟设备安装应用了.
附注
- 由于不同的镜像或 Android API 版本最终能获得的权限不同, 如果需要 root 权限还需要自行测试, 本文使用的示例是经过测试可以获取 root 权限的.
- 特定的 Android 9 和任意版本的 Android 11 镜像已经默认支持 ARM 指令集的应用.
- 更多详细内容可以参考 Android Studio Emulator相关的文档.
- 会有一些诡异的应用无法安装或者无法启动, 需要尝试才能知道.
参考资料
[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