之前很多读者在后台问我,像 QQ 宠物这种已经停服的怀旧游戏,能不能通过安卓模拟器重新跑起来;又有人拿到了一些号称“全自动回踩、学习、打工、冒险、喂养”的 GG 宠物助手脚本,结果要么模拟器装不上,要么脚本闪退,要么设备被风控。说实话,这类第三方辅助工具水很深,很多脚本本身就捆绑了木马,或者要求你关闭系统防护、修改模拟器设备指纹,稍不注意就会泄露账号密码。为了满足大家“用雷电模拟器运行怀旧应用 + 学习自动化脚本书写原理”的需求,我整理了这篇保姆级教程。
本文将围绕雷电模拟器的完整安装配置、ADB 连接与调试、基于 Python + uiautomator2 的自动化脚本开发实战展开,并在文末给出合规使用与安全防护建议。全文代码可直接复制,步骤按顺序执行即可。
1. 背景与核心概念
1.1 为什么怀旧游戏需要安卓模拟器
以 QQ 宠物为例,它原本是 PC 端 Flash 小游戏,官方早已停止运营。现在想要重新体验,通常只能找社区维护的怀旧资源、仿官服或者单机版本。这类资源大多以 APK 形式存在,手机安装容易,但屏幕小、操作不便,而且很多老版本 APK 对高版本安卓系统兼容性极差,会闪退、白屏。
雷电模拟器是 Windows 平台上一款安卓模拟器,它相当于在你的电脑里虚拟出一台完整的安卓手机。因为模拟器有独立的安卓系统镜像,可以自由调整 Android 版本、CPU 核心数、内存大小,还能自定义屏幕分辨率,所以特别适合运行老版本 APK。
从技术原理上看,雷电模拟器不是简单的“窗口容器”,它底层是 VirtualBox 虚拟机,通过硬件虚拟化技术(VT)对 CPU 指令集做转换和加速。开启 VT 后,模拟器性能会大幅提升,这也是后面安装时最容易踩坑的点。
1.2 什么是 ADB 与自动化脚本
ADB 的全称是 Android Debug Bridge,中文叫“安卓调试桥”。它是 Google 官方提供的命令行工具,让电脑通过网络或 USB 与安卓设备建立连接,之后可以执行安装 APK、模拟点击、滑动屏幕、截图、查看日志等一系列操作。
自动化脚本的工作流程是:通过 ADB 或自动化测试框架,向模拟器发送指令,模拟人类手指在屏幕上的点击、滑动、输入文本等操作,从而实现“自动喂食、自动回踩、自动打工”等重复性操作。
这里要特别说明一个概念:很多人分不清“自动化脚本”和“外挂”。自动化测试脚本是软件开发和测试中的标准技术手段,比如 Appium、uiautomator2、Airtest 都归属于自动化测试框架,用于帮助开发者在自己的 App 上做回归测试、压测、兼容性验证。而针对其他游戏或平台的“全自动脚本”,如果绕过用户协议、修改内存数据、伪造设备指纹,那就属于灰色甚至违规行为。本文只讲自动化测试技术本身,重点是把模拟器环境、ADB 操作、自动化框架的用法讲清楚;用这些技术去做什么,请大家务必遵守平台规则和法律法规,不要用于非法或违规场景。
2. 雷电模拟器环境准备与安装
2.1 下载与安装
雷电模拟器官网提供标准版和安卓 9 版本。如果你要运行老版本 APK,建议优先装兼容性更好的安卓 7 或安卓 9 镜像。
安装时需要注意以下几点:
- 安装路径不要带中文和空格,例如不要装在
D:\游戏工具\雷电模拟器,建议改成D:\LDPlayer\。因为后续 ADB 连接时,路径含中文可能导致环境变量和命令解析出错。 - 安装完成后,首次启动会提示是否开启“雷电中心”或自动安装推荐应用。这些推荐包属于推广广告,可以关闭。
- 模拟器界面右上角有最小化、窗口最大化、关闭等按钮,和普通软件无差别,不用额外学习。
安装完成后的默认界面会预装两个常用应用:文件管理器、浏览器。我们后续会通过 ADB 命令往模拟器里安装自己的 APK。
2.2 开启 VT 虚拟化
雷电模拟器性能瓶颈主要在 CPU 虚拟化。如果你在安装完成后启动模拟器时看到这样的提示:
未开启VT,请先进入BIOS开启VT,否则模拟器运行速度会非常慢。解决办法是重启电脑,在开机时按 Del 或 F2 进入 BIOS,找到如下配置,将状态改为 Enabled:
| BIOS 选项名 | 说明 |
|---|---|
| Intel Virtualization Technology | Intel CPU 的虚拟化开关 |
| SVM Mode | AMD CPU 的虚拟化开关 |
| VT-x | Intel 平台另一种叫法 |
| AMD-V | AMD 平台的虚拟化技术 |
开启后按 F10 保存退出。再次进入系统后,可以打开任务管理器,点击“性能”选项卡,查看右下角“虚拟化”是否显示“已启用”。
如果 BIOS 里找不到 VT 选项,可能是以下原因:
- 电脑品牌隐藏了高级选项,需要先开启 BIOS 的高级模式。
- CPU 型号本身不支持虚拟化,这种只能换设备。
- 系统是虚拟机,需要在宿主机上开启“虚拟化 Intel VT-x/EPT”或“虚拟化 AMD-V/RVI”选项。
2.3 基础设置:分辨率、CPU 与内存
模拟器右上角打开“设置”,推荐配置如下:
| 配置项 | 推荐值 | 说明 |
|---|---|---|
| 性能设置 | 中或高 | 低配置电脑选“中”即可 |
| 内存 | 2GB 以上 | 4GB 内存电脑可分配 2GB,16GB 内存可分配 4GB |
| 分辨率 | 平板 1280x720 或手机 720x1280 | 分辨率越高越耗性能 |
| 帧率 | 60 或跟随系统 | 老游戏 30 帧足够,不需要拉高 |
这里重点关注 CPU 核心数。如果你的电脑是 6 核 CPU,模拟器里分配 4 核即可;如果是 4 核,分配 2 核比较稳妥。分配的核数太多,会导致电脑本机卡顿。
2.4 关闭模拟器自带广告
雷电模拟器版本不同,广告位置有差别。常见入口是模拟器右侧工具栏的“设置”,打开后找“其他设置”,里面会有“关闭推荐广告”“关闭雷电中心”这类选项。把能找到的推荐位都关掉就行。
需要注意:不要为了关闭广告去网上找所谓的“去广告破解脚本”“修改版模拟器”,这种修改版通常被植入了挖矿和盗号代码,安全性没有任何保障。官方设置能关多少关多少,关不掉的就当没看到。
3. ADB 连接与模拟器管理实战
3.1 ADB 工具安装
ADB 是 Android SDK Platform-Tools 里的核心程序,单独下载即可。安装配置步骤:
- 下载 Platform-Tools 压缩包,解压到
D:\platform-tools。 - 按 Win 键,输入“环境变量”,打开“编辑系统环境变量”。
- 点击“环境变量”,在“系统变量”里找到
Path,点击“编辑”。 - 新建一行,填入
D:\platform-tools,确定保存。 - 重启命令行窗口,输入
adb version,出现类似下面的输出就说明配置成功:
Android Debug Bridge version 1.0.41 Version 33.0.3-8952118如果你不想配置环境变量,也可以直接在D:\platform-tools目录下打开命令行窗口运行 adb 命令,效果相同。
3.2 连接雷电模拟器
雷电模拟器的 ADB 调试端口默认是 5555,部分版本可能是 5554 或 5556。可以在模拟器安装目录下找到ldconsole.exe,或者直接记住默认端口,先执行连接试试:
adb connect 127.0.0.1:5555成功输出如下:
connected to 127.0.0.1:5555如果提示连接失败,需要使用雷电模拟器安装目录下的ldconsole.exe命令来查询当前模拟器端口:
adb devices先看设备列表里有没有显示127.0.0.1:5555 device。如果列表为空,说明连接端口不对。打开模拟器的“设置”,在“其他设置”里找到“ADB 调试端口”,改成 5555,重启模拟器后重新连接。
连接成功后,再执行一次adb devices,应该能看到类似如下输出:
List of devices attached 127.0.0.1:5555 device这里device表示设备已就绪;如果显示offline,说明 ADB 版本与模拟器不匹配,建议重装最新版 Platform-Tools。
3.3 常用 ADB 命令
下面这些命令在做自动化脚本开发和日常调试时非常有用。
安装 APK:
adb install -r D:\apps\pets.apk-r表示允许覆盖安装,适合更新应用的场景。安装成功会输出Success。
卸载应用:
adb uninstall com.example.pets启动应用:
adb shell am start -n com.example.pets/.MainActivity模拟点击屏幕上的某个坐标点,例如点击 (500, 800) 位置:
adb shell input tap 500 800模拟滑动操作:
adb shell input swipe 500 1500 500 500 300这行命令表示从 (500, 1500) 滑到 (500, 500),整个过程耗时 300 毫秒。
点击返回键:
adb shell input keyevent 4点击 Home 键:
adb shell input keyevent 3截屏并保存到电脑:
adb exec-out screencap -p > D:\screen.png查看当前界面的 Activity 名称:
adb shell dumpsys window windows | grep mCurrentFocus这条命令在后续写自动化脚本时非常关键,因为你需要确认打开应用后,当前焦点界面是不是目标页面。
3.4 模拟器多开与端口管理
雷电模拟器支持多开,也就是同时运行多个模拟器。第一次多开时,会复制当前模拟器的数据,复制完成后,新模拟器的 ADB 端口会自动加一。
如果你开了两个模拟器,第一个端口是 5555,第二个端口就是 5556。通过adb connect连接不同的端口,就可以分别控制每个模拟器,实现多账号同时操作。
adb connect 127.0.0.1:5555 adb connect 127.0.0.1:5556注意:连接多个设备后,执行adb install或adb shell命令必须加上-s 设备名参数,否则会报more than one device/emulator错误:
adb -s 127.0.0.1:5555 install D:\apps\pets.apk4. 基于 Python + uiautomator2 编写自动化脚本
4.1 为什么不用纯 ADB 写脚本
纯 ADB 的input tap命令确实可以模拟点击,但它有一个致命问题:当你点击的坐标是固定写死的,一旦模拟器分辨率改变,或者目标应用更新了界面布局,脚本就全部失效。而且这类脚本没有“找元素”的能力,就像闭着眼睛乱按,成功率极低。
uiautomator2 是网易开源的一个安卓自动化测试框架,它会把当前屏幕解析成一颗控件树,脚本可以按照控件的文本、ID、类名等属性去查找目标元素。比如有一个按钮的文本是“开始打工”,用 uiautomator2 可以直接写d(text="开始打工").click(),不管按钮在屏幕哪个位置,脚本都能找到它。
4.2 环境准备
在电脑上安装 Python 3.8 及以上版本,然后打开命令行,安装 uiautomator2:
pip install uiautomator2同时建议安装 weditor,它是 uiautomator2 配套的可视化界面查看器,能像浏览器开发者工具一样查看模拟器当前界面的控件结构:
pip install weditor安装完成后,先让模拟器连接 ADB(参考第 3 节),然后执行以下命令初始化 uiautomator2 的 ATX 应用:
python -m uiautomator2 init初始化成功后会输出类似下面的信息:
2024-01-01 12:00:00.123 I uiautomator2 __init__.py:234 - uiautomator2 version: 3.0.3 2024-01-01 12:00:01.456 I uiautomator2 __init__.py:245 - Install minicap ... Success初始化只需要执行一次,它会往模拟器里安装两个辅助 APK。如果初始化过程卡住不动,通常是因为模拟器的网络无法访问 GitHub,此时需要检查模拟器网络或稍后重试。
4.3 连接模拟器
在 Python 脚本里连接模拟器,只需要用设备地址:
import uiautomator2 as u2 # 连接雷电模拟器,端口与 adb connect 保持一致 d = u2.connect("127.0.0.1:5555") # 检查连接是否成功 print(d.info)运行这段代码后,如果输出中包含currentPackageName、displayRotation、displaySizeDp等字段的字典,说明连接成功。
4.4 打开应用
确认目标应用的包名和启动 Activity:
# 通过包名启动应用 package_name = "com.example.pets" d.app_start(package_name) # 等待界面加载 d.wait(2)如果你不知道应用的包名,可以在应用启动后,用 ADB 命令查看:
adb shell dumpsys window windows | grep mCurrentFocus输出里第一个斜杠前的部分就是包名。例如输出mCurrentFocus=Window{a2b3c4 u0 com.example.pets/com.example.pets.MainActivity},包名就是com.example.pets,Activity 是com.example.pets.MainActivity。
4.5 控件查找与点击
打开 weditor,在命令行执行:
python -m weditor浏览器会自动打开一个本地页面,顶部输入框填入http://127.0.0.1:5555,点击连接。此时左侧会显示模拟器的实时屏幕,右侧是控件树。
接下来我们来编写自动化示例。假设目标应用主页面上有一个按钮,文本是“开始打工”,下面这段代码可以完成点击:
# 按文本查找并点击 d(text="开始打工").click()如果按钮没有文本,只有一个资源 ID,可以通过 ID 查找:
d(resourceId="com.example.pets:id/btn_work").click()如果需要等待按钮出现后再点击,可以用wait方法:
# 每 0.5 秒检查一次,最多等待 10 秒 if d(text="开始打工").wait(timeout=10): d(text="开始打工").click() else: print("未找到按钮")4.6 完整示例:自动打工 + 自动喂养
下面给出一个完整可运行的示例。这个示例属于自动化测试场景的演示,假设你在测试自己的怀旧应用,通过模拟器完成重复性操作验证。
import uiautomator2 as u2 import time # 1. 连接模拟器 d = u2.connect("127.0.0.1:5555") # 2. 启动应用 package_name = "com.example.pets" d.app_start(package_name) d.wait(3) # 3. 点击“开始打工” def start_work(): if d(text="开始打工").exists: d(text="开始打工").click() print("已点击开始打工") return True return False # 4. 点击“喂养宠物” def feed_pet(): if d(text="喂食").exists: d(text="喂食").click() print("已点击喂食") return True return False # 5. 循环执行 for i in range(5): print(f"第 {i + 1} 轮操作") start_work() time.sleep(2) feed_pet() time.sleep(2) # 按返回键回到主页 d.press("back") time.sleep(1) # 6. 退出应用 d.app_stop(package_name) print("全部操作完成")细心的读者会发现,这里我用了if d(text="xxx").exists来判断控件是否存在。这是 uiautomator2 最常用的写法,可以避免因为网络延迟、界面加载慢导致的“元素未找到异常”。
4.7 坐标点击与滑动
有些应用界面是游戏渲染引擎绘制的,比如 Unity、Cocos,这类界面里的按钮不会被解析成标准控件,uiautomator2 无法通过文本或 ID 定位。此时只能退回到坐标点击。
坐标点击的原理是:通过截屏获取屏幕像素尺寸,再用图片查看器找到按钮的中心坐标。例如截图分辨率为 1280x720,按钮位置在 (640, 400),写法如下:
# 坐标点击 d.click(640, 400) # 坐标滑动 d.swipe(640, 800, 640, 300, duration=0.2) # 截图保存 d.screenshot("screen.png")这里要再次提醒:只有当你测试的是自己开发的应用,并且确认坐标“点击”不会影响他人、不违反平台规则时,才建议使用坐标点击。在面向公众平台运行自动化脚本时,坐标点击极其容易误触广告或隐私弹窗,风险较高。
4.8 判断界面是否加载完成
自动化脚本最容易出问题的地方是节奏控制。点击按钮后,界面切换需要时间,如果立即进行下一步操作,很容易出现“点击无效”或“找不到控件”。
推荐做法是每次操作后都加一个显式等待:
def wait_for_text(text, timeout=10): """等待某个文本出现""" start = time.time() while time.time() - start < timeout: if d(text=text).exists: return True time.sleep(0.5) return False # 使用示例 if wait_for_text("打工完成", timeout=15): print("界面已切换到打工完成状态") else: print("等待超时")4.9 日志与异常处理
自动化脚本如果跑在无人值守的情况下,必须有日志记录和异常处理能力。一个最简单的日志结构如下:
import logging logging.basicConfig( level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s", filename="automation.log", filemode="a" ) try: d(text="开始打工").click() logging.info("点击开始打工成功") except Exception as e: logging.error(f"点击开始打工失败: {e}") d.screenshot("error_screen.png")每次失败时截屏保存,方便事后排查脚本是在哪一步崩溃的。日志文件要按日期滚动,避免单个文件过大。
5. 常见问题与排查思路
| 问题现象 | 常见原因 | 解决思路 |
|---|---|---|
| 模拟器启动后非常卡顿 | 未开启 VT 虚拟化 | 进入 BIOS 开启 VT-x 或 SVM,保存重启 |
| 模拟器提示“无法启动” | 内存不足;Hyper-V 冲突 | 关闭 Windows 的 Hyper-V 和内存完整性功能 |
| adb 连接成功后,设备列表显示 offline | ADB 版本过旧;模拟器 ADB 服务异常 | 更新 Platform-Tools;重启模拟器 ADB 服务 |
| adb install 时提示 INSTALL_FAILED_UPDATE_INCOMPATIBLE | 已安装的应用签名不一致 | 使用adb uninstall 包名卸载后重新安装 |
| uiautomator2 初始化卡住 | 模拟器访问外网受限 | 检查模拟器网络;或使用国内镜像源 |
| 脚本找不到控件 | 界面不是 Android 原生控件;控件可点击属性为 false | 改用坐标点击;或通过weditor查看控件属性 |
| 文本框输入中文乱码 | 输入法切换异常 | 优先使用剪贴板方式输入,或用set_text方法 |
| 模拟器打开后自动弹出广告 | 模拟器预装的推广组件 | 在模拟器“设置”中关闭推荐广告选项 |
5.1 ADB 连不上模拟器排查清单
如果adb connect一直失败,按以下顺序排查:
- 执行
adb kill-server然后adb start-server,重启 ADB 服务,排除端口被占用。 - 打开模拟器“设置”,查看 ADB 调试端口是否开启,未开启则打开。
- 执行
netstat -ano | findstr 5555,确认本机 5555 端口是否被监听。 - 关闭电脑上的手机助手类软件,例如 360 手机助手、某手机管家,这类工具会抢占 ADB 服务。
- 重启模拟器,等待显示完全加载后再连接。
5.2 uiautomator2 初始化失败原因
初始化失败最常见的原因是模拟器无法从 GitHub 下载 ATX 依赖。解决方法是改用国内镜像地址:
pip install uiautomator2 -i https://pypi.tuna.tsinghua.edu.cn/simple如果 init 过程仍然失败,可以手动下载 ATX 的 APK 到本地,再通过adb install安装。这里不再展开,重点是确认模拟器网络本身能正常解析外网地址。
6. 合规开发与安全建议
6.1 明确自动化脚本的使用边界
自动化测试技术是用来提升开发效率的。你可以用 uiautomator2 对自己开发的应用做回归测试、稳定性测试、兼容性测试;也可以在测试环境里模拟大量用户操作,验证服务器承载能力。
但如果把脚本用在公众平台上,尤其是用于批量注册账号、刷取资源、绕过风控、模拟真人行为,这类行为轻则违反平台用户协议,重则涉及非法获取计算机信息系统数据罪。请不要为了“免费领取”或“自动升级”等利益去写这类脚本。
6.2 警惕第三方辅助工具的安全风险
文章开头提到的“GG宠物助手”这类第三方工具,无论是脚本文件还是打包好的 APK,都存在巨大风险:
- 捆绑木马:很多脚本运行时会请求设备管理器权限、无障碍服务权限,借此读取你的短信验证码、键盘记录等敏感信息。
- 账号被盗:工具要求你登录 QQ 或其他账号,而开发者可以在代码里偷偷把账号密码发送到自己的服务器。
- 设备指纹修改:为了绕过风控,工具会改写系统属性,轻则导致模拟器无法启动,重则抹掉 IMEI、设备 ID 等硬件信息。
记住一个原则:任何要求关闭安全软件、授予无障碍权限、修改系统文件才能运行的辅助脚本,都是高危程序。
6.3 受控环境跑脚本的通用安全规范
如果你确实在做自动化测试,请遵守以下规范:
- 使用专门的测试模拟器,不把个人真实账号信息存入模拟器。
- 脚本运行前,先备份模拟器镜像。雷电模拟器支持多开和备份,可以创建多个快照。
- 不在生产环境或日常使用环境里渲染自动化脚本,尤其是涉及支付、隐私、聊天等敏感场景。
- 对外发送的任何网络请求,都要经过抓包确认,不添加未知第三方 SDK。
- 模拟器里安装的应用只从官方渠道下载,不安装所谓的“破解版”。
7. 总结与学习路线
这篇文章围绕雷电模拟器、ADB、uiautomator2 自动化测试,完整梳理了一条从环境搭建到脚本开发的学习路线。
重点回顾一下:
- 雷电模拟器是一个基于 VirtualBox 的安卓模拟器,开启 VT 虚拟化是性能关键。
- ADB 是连接模拟器和电脑的桥梁,掌握
adb connect、adb install、adb shell基础命令后,就能完成大部分设备管理操作。 - uiautomator2 把屏幕解析成控件树,让脚本可以通过文本、ID 定位控件,比纯坐标点击稳定得多。
如果你对自动化测试感兴趣,下一步可以学习:
- Pytest 测试框架,把 uiautomator2 脚本组织成规范的测试用例。
- Appium 框架,它是跨平台的自动化测试方案,除了安卓还支持 iOS。
- Airtest 框架,网易出品的图形化自动化工具,对游戏场景的识别更友好。
- JSON 配置文件与装饰器模式,把脚本参数和业务逻辑分离,提高工程化水平。
在动手实践时,始终牢记权限最小化、数据备份、合法授权这三个原则。模拟器技术本身是中性工具,它的价值取决于使用方式。
希望这篇文章能帮你少踩一些安装和连调上的坑。如果后续你在雷电模拟器 ADB 连接或者 uiautomator2 脚本开发时碰到问题,欢迎按本文的排查清单先自查一遍,绝大多数问题都能自己解决。