qqpet README

The project's README from github.com/AnkioTomas/qqpet. As one markdown file: README.md.

QQPet

QQ 宠物跨平台复刻(Windows / macOS / Linux / Android / HarmonyOS / iOS),基于 Arctic Penguin T800 逆向重建。Flash 内容由 Ruffle 播放。

版权声明:QQ 宠物的美术资源与 SWF 版权归腾讯所有;旅行照片素材版权归《旅行青蛙·中国之旅》所有。本项目仅供学习交流,请勿用于商业用途。

截图

桌面宠物与右键菜单
桌面宠物与右键菜单
商城与背包
商城与背包
宠物资料
宠物资料
图鉴与签到
图鉴与签到
今日任务
今日任务
全国旅游
全国旅游
系统设置
系统设置

功能

存档位于 userData/save.json,导入时旧存档备份为 save.json.bak。

桌面版支持将宠物拖到其他显示器(包括主屏左侧或上方、不同缩放比例的屏幕),重启后回到上次所在的显示器;该显示器断开时回到主屏幕。

iOS

最低目标为 iOS 14.0。安装需使用保留所需权限的越狱 App 安装器或 TrollStore,后者的系统兼容范围以其上游说明为准。全局 HUD 依赖系统私有接口和所需权限,普通开发者签名不能替代这些权限。打开管理 App,点击「开始桌宠」,返回主屏幕后桌宠继续显示在其他应用上方。打开管理界面会暂时隐藏桌宠;「宠物菜单」「宠物状态」可显示相应界面,「返回管理」用于回到管理操作。

复用完整养成、界面和 SWF 内容,增加原生触摸分区、游戏展示和系统文件选择器导入导出。HUD 输入框通过前台管理器的原生编辑框提交文字。剪贴板文本由用户主动发送;后台剪贴板监听及前台应用观察暂不提供,因而也不提供其他 App 全屏时自动隐藏,设置会说明平台能力限制。此版本不安装 daemon,也不提供开机自启;完整重启后需手动开始。

本地使用 Node 22.12 或以上版本、公开 iPhoneOS SDK 和本地 ldid(也支持 ad-hoc codesign)。资源准备是独立步骤,普通构建使用本地文件:

ELECTRON_SKIP_BINARY_DOWNLOAD=1 npm ci --ignore-scripts
npm run prepare:ios-assets
npm run ios

产物为 out/ios-native/QQPetIOS.ipa。安装器需保留 IPA 内的 entitlement。共用渲染代码以 Safari 14.0 能力为底线,构建会降级 Ruffle 回退 WASM 的符号扩展指令,并验证结果只依赖基础特性;Electron 外壳保留原有最低 macOS 版本要求。构建选项、存档路径、后台生命周期和平台限制见 iOS 使用说明。

Android

宠物以悬浮窗形式显示在桌面和其他应用上方,功能与桌面版一致,另有以下适配:

HarmonyOS

纯血鸿蒙(HarmonyOS NEXT / 5 及以上)不能装 Android APK。宠物同样以悬浮窗显示,JS 桥和 Android 是同一份 QQPetNative 契约,原生壳在 harmony/,渲染层不改。

本地打包: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
iOS(需 TrollStore 或越狱) QQPet-<版本>-ios.ipa

桌面安装包没有代码签名,系统会拦截首次运行。各平台安装方式:

征集素材

社区里能找到的 QQ 宠物原版资料很少,大量游戏画面和素材已经缺失,复刻时只能靠猜。如果你手上有下面这些东西,欢迎提供:

提交方式:在 Issues 发帖说明你有什么,文件较大可附网盘链接。提交的素材版权仍归腾讯所有,只用于本项目的学习复刻。

开发

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)
npm run ios       # iOS IPA(资源、SDK 和签名工具见 iOS 说明)

推送 v* 标签时由 GitHub Actions 打出三平台安装包、Android APK、Harmony HAP 和 iOS IPA 并发布 Release。iOS 及共用代码的 pull request 还会生成可下载的 IPA。iOS CI 在 Ubuntu 上使用固定版本的 LLVM、SDK 和 ldid,并打包完整资源。

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 -- <app.asar> 可重新导入
tools/ 反混淆脚本、原版 CSS 移植脚本、CDP 调试脚本

许可证

本项目代码以 GPL-3.0 发布。该许可证不覆盖 resources/pet 下的原版美术资源、SWF 与旅行照片,它们的版权归各自所有者,见文首版权声明。

友情链接

本项目认可 LINUX DO 社区。

qqpet (AnkioTomas/qqpet)

Searching Database…

816 ·GitHub
这是什么?QQPet 是经典 QQ 宠物桌面宠物的跨平台复刻版,通过逆向分析原版北极企鹅 T800 客户端重建;它使用 Ruffle 模拟器播放原版 Flash(SWF)素材,让虚拟宠物 living 在你的 Windows、macOS、Linux、Android、鸿蒙或 iOS 设备上,支持喂食、游戏、上学/上班和旅行等功能。
这是 Electron 应用还是别的?桌面版(Windows/macOS/Linux)使用 Electron 和 TypeScript 构建;Android 和鸿蒙有原生壳应用,通过 WebView 或 ArkWeb 桥接复用同一套渲染/SWF 层;iOS 版也是原生壳,因为 iOS 无法运行 Electron。
在 iOS 上运行需要越狱吗?是的——iOS 版(最低要求 iOS 14.0)必须通过 TrollStore 或能保留其 entitlements 的越狱应用安装器安装,因为普通的开发者签名无法授予悬浮宠物所需的全局 HUD 权限。
安装包有签名吗?系统会不会拦截?所有桌面安装包都没有代码签名,所以系统会拦截首次运行——Windows 上需要 SmartScreen 的'仍要运行',macOS 上需要绕过 Gatekeeper 或使用 xattr 命令,鸿蒙上未签名的 HAP 必须用 hdc 侧载,不能通过应用商店安装。
在 Android 和鸿蒙手机上宠物是怎么表现的?在 Android 和鸿蒙上,QQPet 以悬浮窗口的形式显示在其他应用之上;首次启动需要授予'显示在其他应用上层'和通知权限,而且由于系统限制后台读取剪贴板,你需要通过分享/选择菜单把选中的文字分享给宠物。
和宠物聊天必须用 OpenAI 的 API 密钥吗?不是,AI 聊天功能是可选的,任何 OpenAI 兼容的 API 接口都可以用,用来和宠物闲聊、改写台词,以及对剪贴板里的文字进行点评或翻译。
修改过的 SWF 文件是怎么回事?部分原版 Flash 文件用 JPEXS FFDec 打过补丁——比如 QQFarm 的游戏内货币从'金币'改名为'元宝',小游戏的全屏尺寸检测也改成了在 Ruffle 下可用——重新导入原版素材时不能覆盖这些补丁。
我能导入以前的存档吗?可以,QQPet 支持导入兼容原版 config.json 格式的存档,即使是从首次运行的选蛋界面也能导入,并且会自动把旧存档备份为 save.json.bak。
Creator
AnkioTomas
Size
6.2 MB
Stars
816
Age
12d
Commits · 90 Days