Linux 使用 Docker 部署 Android 模拟器及远程访问配置
Linux Ubuntu 系统上使用 Docker 部署 Android 模拟器的方法,并通过内网穿透工具配置公网地址以实现远程访问。主要步骤包括虚拟化环境检查、Docker 镜像拉取与容器运行、VNC 端口映射以及隧道服务配置。该方案无需公网 IP 或云服务器即可让外部设备访问本地开发环境。

Linux Ubuntu 系统上使用 Docker 部署 Android 模拟器的方法,并通过内网穿透工具配置公网地址以实现远程访问。主要步骤包括虚拟化环境检查、Docker 镜像拉取与容器运行、VNC 端口映射以及隧道服务配置。该方案无需公网 IP 或云服务器即可让外部设备访问本地开发环境。

随着 Android 应用的普及,测试和部署变得越来越重要。Docker-Android 将 Android 开发环境封装在 Docker 容器中,简化了流程。通过建立安全隧道,可以让本地环境变身为公网服务,便于团队协作。
执行下面命令安装检查工具:
sudo apt install cpu-checker
然后执行下面命令检查是否支持虚拟化:
kvm-ok
提示正常信息表示支持虚拟化环境。如果不是出现如下信息,需要检查设备开启虚拟化支持,然后再进行 Android 模拟器部署。

本文采用 Docker 方式部署,首先拉取一个镜像。官方提供很多种安卓版本,具体可以访问 Github 查看。理论上版本越高运行的开销会越大,所以本例以运行一个低版本的 Android 来演示,执行下面命令拉取一个 Android 9.0 版本镜像。
sudo docker pull budtmo/docker-android:emulator_9.0
拉取后开始运行容器,下面命令指运行一台 Samsung Galaxy S7 的安卓设备,其他机型可以去看一下官方教程,对外访问端口是 6080。
docker run -d -p 6080:6080 -e EMULATOR_DEVICE="Samsung Galaxy S7" -e WEB_VNC=true --device /dev/kvm --name android-container budtmo/docker-android:emulator_9.0
运行后,输入 sudo docker ps 可以看到运行的容器,UP 状态表示正常。

运行后,在浏览器访问 Linux Ubuntu 6080 端口,即可成功看到 Android 模拟器界面。首次启动可能会比较慢,如果觉得卡,可以部署更低的机型,如 S6。本地测试访问成功后,下面我们安装内网穿透工具,实现远程访问。

上面在本地 Docker 中成功部署了 Android 模拟器,并局域网访问成功。下面我们在 Linux 安装内网穿透工具,通过转发本地端口映射的 HTTP 公网地址,我们可以很容易实现远程访问,而无需自己注册域名购买云服务器。下面是安装步骤:
curl -L https://www.cpolar.com/static/downloads/install-release-cpolar.sh | sudo bash
# 加入系统服务设置开机启动
sudo systemctl enable cpolar
# 启动 cpolar 服务
sudo systemctl start cpolar
# 重启 cpolar 服务
sudo systemctl restart cpolar
# 查看 cpolar 服务状态
sudo systemctl status cpolar
# 停止 cpolar 服务
sudo systemctl stop cpolar
安装和成功启动服务后,内部或外部浏览器上通过局域网 IP 加 9200 端口即:http://192.168.xxx.xxx:9200 访问管理界面,使用账号登录,登录后即可看到 Web 配置界面,接下来在 Web 界面配置即可。

点击左侧仪表盘的隧道管理——创建隧道,创建一个 Android 模拟器的公网 HTTP 地址隧道!
点击 创建。

隧道创建成功后,点击左侧的状态——在线隧道列表,查看所生成的公网访问地址,有两种访问方式,一种是 http 和 https,两种都可以访问,下面选择其中一种进行远程访问。

使用上面生成的 HTTPS 公网地址,在任意设备的浏览器进行访问,即可成功看到我们 Android 模拟器,简单几步即可实现无需云服务器,无需公网 IP 实现远程访问。

为了更好地演示,我们在前述过程中使用了内网穿透工具生成的隧道,其公网地址是随机生成的。
这种随机地址的优势在于建立速度快,可以立即使用。然而,它的缺点是网址由随机字符生成,不太容易记忆。另外,这个地址在 24 小时内会发生随机变化,更适合于临时使用。
我一般会使用固定二级子域名,原因是希望将网址发送给同事或客户时,它是一个固定、易记的公网地址,这样更显正式,便于流交协作。
由于以上使用的隧道使用的是随机公网地址,24 小时内会随机变化,不利于长期远程访问。因此我们可以为其配置二级子域名,该地址为固定地址,不会随机变化。
注意需要将套餐升级至基础套餐或以上,且每个套餐对应的带宽不一样。
点击预留,选择保留二级子域名,设置一个二级子域名名称,点击保留,保留成功后复制保留的二级子域名名称。

保留成功后复制保留成功的二级子域名的名称。

返回登录 Web UI 管理界面,点击左侧仪表盘的隧道管理——隧道列表,找到所要配置的隧道,点击右侧的编辑。

修改隧道信息,将保留成功的二级子域名配置到隧道中。
点击 更新(注意,点击一次更新即可,不需要重复提交)。

更新完成后,打开在线隧道列表,此时可以看到公网地址已经发生变化,地址二级名称变成了我们自己设置的二级子域名名称。

最后,我们使用固定的公网 HTTPS 地址访问,可以看到同样访问成功,这样一个固定且永久不变的公网地址就设置好了,随时随地都可以远程访问本地 Android 模拟器,无需公网 IP,无需云服务器!


微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online