
之前很多读者在后台问我像 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找到如下配置将状态改为 EnabledBIOS 选项名说明Intel Virtualization TechnologyIntel CPU 的虚拟化开关SVM ModeAMD CPU 的虚拟化开关VT-xIntel 平台另一种叫法AMD-VAMD 平台的虚拟化技术开启后按 F10 保存退出。再次进入系统后可以打开任务管理器点击“性能”选项卡查看右下角“虚拟化”是否显示“已启用”。如果 BIOS 里找不到 VT 选项可能是以下原因电脑品牌隐藏了高级选项需要先开启 BIOS 的高级模式。CPU 型号本身不支持虚拟化这种只能换设备。系统是虚拟机需要在宿主机上开启“虚拟化 Intel VT-x/EPT”或“虚拟化 AMD-V/RVI”选项。2.3 基础设置分辨率、CPU 与内存模拟器右上角打开“设置”推荐配置如下配置项推荐值说明性能设置中或高低配置电脑选“中”即可内存2GB 以上4GB 内存电脑可分配 2GB16GB 内存可分配 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 命令下面这些命令在做自动化脚本开发和日常调试时非常有用。安装 APKadb 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 及以上版本然后打开命令行安装 uiautomator2pip 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输出里第一个斜杠前的部分就是包名。例如输出mCurrentFocusWindow{a2b3c4 u0 com.example.pets/com.example.pets.MainActivity}包名就是com.example.petsActivity 是com.example.pets.MainActivity。4.5 控件查找与点击打开 weditor在命令行执行python -m weditor浏览器会自动打开一个本地页面顶部输入框填入http://127.0.0.1:5555点击连接。此时左侧会显示模拟器的实时屏幕右侧是控件树。接下来我们来编写自动化示例。假设目标应用主页面上有一个按钮文本是“开始打工”下面这段代码可以完成点击# 按文本查找并点击 d(text开始打工).click()如果按钮没有文本只有一个资源 ID可以通过 ID 查找d(resourceIdcom.example.pets:id/btn_work).click()如果需要等待按钮出现后再点击可以用wait方法# 每 0.5 秒检查一次最多等待 10 秒 if d(text开始打工).wait(timeout10): 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(textxxx).exists来判断控件是否存在。这是 uiautomator2 最常用的写法可以避免因为网络延迟、界面加载慢导致的“元素未找到异常”。4.7 坐标点击与滑动有些应用界面是游戏渲染引擎绘制的比如 Unity、Cocos这类界面里的按钮不会被解析成标准控件uiautomator2 无法通过文本或 ID 定位。此时只能退回到坐标点击。坐标点击的原理是通过截屏获取屏幕像素尺寸再用图片查看器找到按钮的中心坐标。例如截图分辨率为 1280x720按钮位置在 (640, 400)写法如下# 坐标点击 d.click(640, 400) # 坐标滑动 d.swipe(640, 800, 640, 300, duration0.2) # 截图保存 d.screenshot(screen.png)这里要再次提醒只有当你测试的是自己开发的应用并且确认坐标“点击”不会影响他人、不违反平台规则时才建议使用坐标点击。在面向公众平台运行自动化脚本时坐标点击极其容易误触广告或隐私弹窗风险较高。4.8 判断界面是否加载完成自动化脚本最容易出问题的地方是节奏控制。点击按钮后界面切换需要时间如果立即进行下一步操作很容易出现“点击无效”或“找不到控件”。推荐做法是每次操作后都加一个显式等待def wait_for_text(text, timeout10): 等待某个文本出现 start time.time() while time.time() - start timeout: if d(texttext).exists: return True time.sleep(0.5) return False # 使用示例 if wait_for_text(打工完成, timeout15): print(界面已切换到打工完成状态) else: print(等待超时)4.9 日志与异常处理自动化脚本如果跑在无人值守的情况下必须有日志记录和异常处理能力。一个最简单的日志结构如下import logging logging.basicConfig( levellogging.INFO, format%(asctime)s - %(levelname)s - %(message)s, filenameautomation.log, filemodea ) 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 连接成功后设备列表显示 offlineADB 版本过旧模拟器 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 脚本开发时碰到问题欢迎按本文的排查清单先自查一遍绝大多数问题都能自己解决。