About AnkioTomas/qqpet
AnkioTomas/qqpet is an open-source project on GitHub, mainly written in TypeScript. QQ宠物单机复刻版(AI) It currently holds 341 stars and 64 forks with 0 open issues, and was last pushed on an unknown date (repository created unknown).
Project Overview
AI Homed tracks it on the Today's Trending board.
GitHub Repository Details
README
QQPet
QQ 宠物跨平台复刻(Windows / macOS / Linux / Android / HarmonyOS),基于 Arctic Penguin T800 逆向重建。Flash 内容由 Ruffle 播放。
版权声明:QQ 宠物的美术资源与 SWF 版权归腾讯所有;旅行照片素材版权归《旅行青蛙·中国之旅》所有。本项目仅供学习交流,请勿用于商业用途。
截图
![]() 桌面宠物与右键菜单 |
![]() 商城与背包 |
![]() 宠物资料 |
![]() 图鉴与签到 |
![]() 今日任务 |
![]() 全国旅游 |
![]() 系统设置 |
功能
- 养成:选蛋领养、成长与升级、饥饿/清洁/心情/健康、生病就医、死亡与复活、重生(可换性别)。
- 日常:打工、上学(含升学考试)、全国旅游(奇遇、纪念品、旅行相簿明信片),关闭应用期间的进度照常计时。
- 物品:商城与购物车、背包、食物/清洁/药品/玩具、限时物品、粉钻与甜蜜情侣。
- 任务与邮件:今日任务(按宠物需求和节假日生成)、逗逗我、学习打工、旅游任务;签到与图鉴;节日、生日、旅行明信片邮件。
- 活动:池塘(养鱼)、农场(QQFarm,金币即元宝)、密室探险、6 类 101 个小游戏(独立窗口,按游戏时长奖励)。
- AI(可选):接入任意 OpenAI 兼容接口,宠物闲聊、改写台词、点评或翻译剪贴板文字。
- 其他:天气播报、节日问候、免打扰、透明度、开机自启、全屏应用(看视频、玩游戏)在前台时自动隐藏宠物、高清画质(重绘的 @2x 素材,适配高分屏,重启后生效)、存档导入导出(兼容原版
config.json,首次启动的选蛋页也可直接导入)。
userData/save.json,导入时旧存档备份为 save.json.bak。
桌面版支持将宠物拖到其他显示器(包括主屏左侧或上方、不同缩放比例的屏幕),重启后回到上次所在的显示器;该显示器断开时回到主屏幕。
Android
宠物以悬浮窗形式显示在桌面和其他应用上方,功能与桌面版一致,另有以下适配:
- 首次打开需允许「显示在其他应用的上层」和通知权限;通知栏常驻的通知代替桌面版的托盘图标。
- 宽面板在竖屏手机上自动旋转并铺满屏幕;横竖屏切换后宠物保持在屏幕内。
- 小游戏和密室探险全屏横屏运行,并显示可改键的虚拟手柄。
- 系统不允许后台读取剪贴板:在其他应用里选中文字后,从选择菜单或分享面板选「QQ宠物」,交给宠物点评或翻译。
HarmonyOS
纯血鸿蒙(HarmonyOS NEXT / 5 及以上,在 7 模拟器上验证过)不能装 Android APK。宠物同样以悬浮窗显示,JS 桥和 Android 是同一份 QQPetNative 契约,原生壳在 harmony/,渲染层不改。
- 首次打开需允许「显示在其他应用的上层」和通知;通知栏通知代替桌面版的托盘图标。
- 小游戏和密室探险全屏横屏运行(
GameAbility)。 - 系统不允许后台读剪贴板:在其他应用里分享文字给「QQ宠物」,交给宠物点评或翻译。
- 没有开机自启:当前 SDK 没有可用的开机广播扩展。
- 窗口按页面可见内容裁剪;拖动时会铺满屏幕,避免跟手错位。
npm run harmony,需要本机 DevEco Studio(harmony/hvigorw 默认使用 /Applications/DevEco-Studio.app,可用 DEVECO_SDK_HOME / NODE_HOME / JAVA_HOME 覆盖)。产物在 harmony/entry/build/default/outputs/default/。
GitHub Actions 打 v* 标签时产出未签名 HAP 并放进 Release。和桌面包一样没有商店签名;用 hdc 装到模拟器或已开启调试的真机。上架或普通真机日常安装要在 DevEco 里配签名,目前仓库没有这份材料。
下载安装
从 Releases 下载对应平台的安装包:
| 平台 | 文件 |
|---|---|
| Windows | QQPet.Setup.<版本>.exe |
| macOS(Apple 芯片) | QQPet-<版本>-arm64.dmg |
| macOS(Intel) | QQPet-<版本>.dmg |
| Linux | QQPet-<版本>.AppImage 或 qqpet_<版本>_amd64.deb |
| Android(11 及以上) | QQPet-<版本>.apk |
| HarmonyOS(5 及以上) | QQPet-<版本>.hap |
安装包没有代码签名,系统会拦截首次运行:
- Windows:SmartScreen 提示「Windows 已保护你的电脑」时,点「更多信息」→「仍要运行」。
- macOS:把 QQPet 拖进「应用程序」后,若提示「已损坏,无法打开」或「无法验证开发者」,在终端执行一次:
xattr -cr /Applications/QQPet.app
也可以先打开一次,再到「系统设置 → 隐私与安全性」底部点「仍要打开」。
- Linux:AppImage 需要可执行权限,
chmod +x QQPet-*.AppImage后运行;Ubuntu 22.04 起若报缺少 FUSE,安装libfuse2(24.04 为libfuse2t64)。deb 包用sudo apt install ./qqpet_*_amd64.deb安装。 - Android:在浏览器或文件管理器中打开 APK,按提示允许「安装未知应用」。
- HarmonyOS:下载 HAP 后用 hdc 安装(需开发者模式):
hdc install QQPet-*.hap。未签名,不能走应用市场那套安装。
征集素材
社区里能找到的 QQ 宠物原版资料很少,大量游戏画面和素材已经缺失,复刻时只能靠猜。如果你手上有下面这些东西,欢迎提供:
- 老版本客户端:QQ 宠物的安装包或安装目录,以及老版本 QQ 留下的宠物缓存目录(里面的 SWF、图片、音效、配置文件都有用)。
- 游戏画面:当年的截图、录屏、视频,尤其是打工、上学、旅游、小游戏、商城、节日活动等界面。
- 其他资料:物品与宠物数据、台词文本、活动说明,或者你记得的玩法细节。
开发
git lfs install && git lfs pull # resources/pet 由 Git LFS 管理
npm ci
npm run dev
构建
npm run dist # 类型检查 + 构建 + 打包当前平台安装包到 dist/
npm run android # Android debug APK
npm run harmony # HarmonyOS debug HAP(需要本机 DevEco Studio)
推送 v* 标签时由 GitHub Actions 打出三平台安装包、Android APK 和 Harmony HAP 并发布 Release。其他推送不触发构建。
Android 版本地调试用 npm run android(debug 包,输出到 android/app/build/outputs/apk/debug/),需要 Android SDK 和 JDK 17(Gradle 8 不支持更新的 JDK,可用 JAVA_HOME 指定)。CI 打的 release 包需要在仓库 Secrets 中配置签名密钥:
| Secret | 内容 |
|---|---|
| ANDROID_KEYSTORE_BASE64 | keystore 文件的 base64(base64 -i release.jks) |
| ANDROID_KEYSTORE_PASSWORD | keystore 密码 |
| ANDROID_KEY_ALIAS | 密钥别名 |
| ANDROID_KEY_PASSWORD | 密钥密码 |
每次发布都必须用同一个 keystore,否则已安装的用户无法覆盖升级。
改过的 SWF
以下文件用 JPEXS FFDec 打过补丁,重新导入资源时不要覆盖:
| 文件 | 改动 |
|---|---|
| resources/pet/mstx/qq_mstx.swf | 隐藏需要联网的「兑换礼包」「魔法爱情石」按钮 |
| resources/pet/qqfarm/Farm.swf | 允许在 file:// 之外启动;「金币」改为「元宝」;商店可买的种子排前、其余置灰,购买后弹出提示;商店、仓库的弹出动画改为缩放比例,不再被异步加载的图片压窄;不绘制房屋、篱笆、狗窝 |
| resources/pet/qqfarm/props.swf | 素材中的「金币」文字改为「元宝」 |
| resources/pet/smallGame/{100ceng,ball,paopao2}/ 下读屏幕尺寸的 26 个 SWF | Capabilities.screenResolutionX/Y 改为 ExternalInterface.call("API.GetScreenWidth/Height")(Ruffle 返回的是播放器自身尺寸) |
目录
| 路径 | 说明 |
|---|---|
| src/main | 主进程:窗口、托盘、app:// 协议、存档、AI 与天气请求 |
| src/preload | window.qqpet 接口 |
| src/renderer | 界面(原生 TypeScript),pet/ 为养成逻辑,ui/ 为各窗口,swf/ 为 Ruffle 封装 |
| src/shared | 主进程与渲染层共享的 IPC 与存档类型 |
| src/android | Android 版的 window.qqpet 实现,经 WebView 接口调用原生层 |
| android/ | Android 原生工程:悬浮窗服务、游戏页、文件选择、文字分享入口、开机自启 |
| src/harmony | HarmonyOS 版的 window.qqpet 实现,经 ArkWeb 接口调用原生层 |
| harmony/ | HarmonyOS 原生工程:浮动窗、游戏页、存档选择、分享入口 |
| resources/pet | 原版资源,npm run import-assets -- 可重新导入 |
| tools/ | 反混淆脚本、原版 CSS 移植脚本、CDP 调试脚本 |
许可证
本项目代码以 GPL-3.0 发布。该许可证不覆盖 resources/pet 下的原版美术资源、SWF 与旅行照片,它们的版权归各自所有者,见文首版权声明。
友情链接
本项目认可 LINUX DO 社区。






