Skip to content

Releases: thecoolboyhan/fishing-funds

v0.2.0

Choose a tag to compare

@github-actions github-actions released this 23 Oct 08:17

Fishing Funds v0.2.0

基金 / 大盘 / 股票 / 虚拟货币状态栏小应用,基于 Electron + React 19 构建。支持 macOS、Windows、Linux 桌面端,以及 Android 移动端(通过 Capacitor 共享同一套渲染层)。

本版本(v0.2.0)主要变更

  • 基金估值数据源切换为新浪:自 2026-10 起,受监管影响,天天基金 / 腾讯的估值接口逐步下线。新增新浪估值源 hq.sinajs.cn/list=fu_{code};货币基金降级为显示净值;新增 GetNetWorthTrendFromEastmoney 作为净值走势补充。
  • 修复 Referer 拼写错误:GetFundGZList 请求头 ttp:// 修正为 https://,恢复估值列表正常拉取。
  • 修正打包版本号:规范化 release/app/package.json 的 version 与 author,electron-builder 现读取该文件而非根目录,避免版本号错乱。
  • 货币排行榜数据源切换为 Coingecko:原 CoinCap v2 API 已停止服务,改用 Coingecko /coins/markets;移除旧的 CoinCap 相关函数,并修复 GetHistoryFromCoingecko 因 Accept-Encoding: gzip 未解压导致的走势白图问题。

下载

平台 文件
macOS(Intel) Fishing.Funds-0.2.0.dmg
macOS(Apple Silicon) Fishing.Funds-0.2.0-arm64.dmg
Windows Fishing.Funds.Setup.0.2.0.exe
Linux(x64) Fishing.Funds-0.2.0.AppImage
Linux(arm64) Fishing.Funds-0.2.0-arm64.AppImage
Android app-release-unsigned.apk

已知事项

  • 桌面端安装包为未签名构建:macOS 需在「系统设置 → 隐私与安全性」中手动允许;Windows 会提示 SmartScreen;Linux AppImage 需 chmod +x 后运行。
  • Android 为未签名 APK,无法直接安装。需用自有密钥在本地执行 assembleRelease 重新签名后再安装(详见仓库 AGENTS.md §9.5)。
  • 货币排行榜偶发因 Coingecko 限流(HTTP 429)为空,手动刷新即可恢复。

数据源说明

基金估值来自新浪,净值走势来自东方财富;行情 / 大盘来自公开接口;货币行情来自 Coingecko。接口如有变动,请以仓库最新代码为准。

v0.1.0 — 独立维护版首个版本(含安卓客户端)

Choose a tag to compare

@thecoolboyhan thecoolboyhan released this 24 Sep 03:28

v0.1.0 — 首个独立维护版本(含安卓客户端)

本项目派生自 1zilc/fishing-funds v8.7.1(GPL-3.0),现由本仓库独立维护,与上游不再同步。
从这一版起,版本号改用 0.1.0 独立编号,不再跟随上游。
四端共用一份渲染层代码:桌面端(macOS / Windows / Linux)常驻菜单栏,安卓端全屏应用。

界面

基金 指数 股票

股票详情:行情 / 概念板块 / 分时 / K线

截图为 Pixel 8 (API 34) 模拟器实拍,数据为当日实时行情。

新增:安卓客户端

android-capacitor 分支把同一份 src/renderer 装进了 Capacitor 6 原生壳,与桌面三端共用全部业务代码,
平台差异只通过 window.contextModules 桥隔离(安卓侧由原生插件 ContextModulesPlugin.java 实现)。

  • 全屏适配、触摸友好的字号(基准 13px,可在设置中调到 16px)
  • 首次启动内置 4 只基金 + 4 只股票的示例自选,可直接体验;在界面上删除或替换即可
  • 品牌化的应用图标与启动画面

相对上游 v8.7.1 修复的问题

安卓化过程暴露了一批问题,其中一部分同样影响桌面端:

类别 问题 后果(修复前)
存储 electronStore 双重编码:写数组/对象,读回来是字符串 钱包配置解析静默失效,新增的自选重启后丢失
存储 storeCover 参数非法时先 clear() 再什么都不写 整个命名空间被静默清空(恢复备份会丢全部配置)
网络 原生栈被服务端按客户端指纹掐断,而 WebView 的 fetch 能通 股票 / 指数 / 分时 / K线 数据全空
时序 持久化监听器注册晚于初始化写入 首次启动的配置写入全部丢失,永不落盘
导出 saveJsonToCsv 漏掉所有数据行 导出只有 BOM 的空 CSV
UI 移动端 CSS 误伤 325px 宽的桌面小窗 菜单栏小窗布局错乱、antd Switch 变形

其中「双网络栈互补」是关键设计:原生 OkHttp 栈与 WebView 浏览器栈能力互补——前者能读无 CORS 头的静态数据,
后者在部分接口上能绕过服务端的客户端指纹识别。两者互为兜底,缺一都会丢一半数据。

品牌化

应用图标、启动画面与应用内 logo 均已更换为本项目自己的品牌标识,
并清除了指向旧官网(ff.1zilc.top)的所有链接——「设置 → 更多」、检查更新跳转、
导出备份元数据、加载屏底部地址,现已全部指向本仓库与新官网;
同时移除了上游的页面访问上报(display:none 的隐藏 webview),应用不含任何第三方统计 SDK。

数据源可用性

基金估值支持多数据源,可在「设置 → 基金接口」切换。不同网络环境下可用性不同,实测记录:

源 端点 受限网络出口实测
东方财富-天天基金 fundgz.1234567.com.cn ★★★★★(推荐,最快最准;但部分出口会被 CDN 返回缓存的 404 页)
同花顺-爱基金 fund.10jqka.com.cn ★★★★☆(受限网络下的可靠备选)
支付宝-蚂蚁基金 www.fund123.cn ★★★☆☆
腾讯证券 web.ifzq.gtimg.cn ★☆☆☆☆(上游接口已下线)

若基金列表为空且能排除代码问题,先切换数据源。

安装包

项 值
文件 fishing-funds-android-0.1.0.apk
applicationId com.thecoolboyhan.fishingfunds
版本 versionCode 1 / versionName 0.1.0
大小 约 4.4 MB
签名 自签名 release 密钥(apksigner 验证 v1 + v2 均通过)
SHA-256 见下方「校验」

⚠️ 如果你之前装过 v8.7.1-fork.1(versionCode 2),无法直接覆盖安装本包 —— Android 不允许降级 versionCode,
需要先卸载旧版(会清掉本地配置,自选会回到示例数据)。之后同版本线即可正常覆盖升级。

已知边界

  • 安卓端原生弹窗 / 文件选择器是安全默认值(一律按「取消」),因此删除自选、导出 CSV/JSON、备份导入导出不生效
  • 新闻「查看原文」依赖桌面 <webview> 标签,安卓端暂不可用
  • 货币接口(api.coingecko.com)在受限网络下需要代理
  • 未做 release 混淆(minifyEnabled false)

从源码构建

npm install          # 用 npm,不要 pnpm(沙箱环境 pnpm 会 EPERM)
npm run build
npx cap sync android
cd android && ./gradlew assembleDebug    # 需 JDK 17 + ANDROID_HOME

发布签名读取 android/keystore.properties(与 .jks 均不入库);缺失时自动回退为不签名,不会因缺密钥而构建失败。

许可

GPL-3.0(继承上游)。锚定上游 v8.7.1 —— 其 8.8.0 把反爬逻辑抽成了私有子模块,公开源码无法编译出可运行的程序。

v8.7.1-fork.1 — 安卓端可用性修复版

Choose a tag to compare

@thecoolboyhan thecoolboyhan released this 23 Sep 09:16

v8.7.1-fork.1 — 安卓端可用性修复版

本仓库是 1zilc/fishing-funds v8.7.1(GPL-3.0)的个人维护分支,四端共用一份渲染层代码。
本次发布新增安卓客户端(Capacitor 6 原生壳),并把安卓化过程中暴露的问题一并修掉 —— 其中一部分同样影响桌面端。

界面

基金 指数 股票

股票详情:行情 / 概念板块 / 分时 / K线

截图为 Pixel 8 (API 34) 模拟器实拍,数据为当日实时行情。

修复内容

存储(同样影响桌面端)

问题 后果 修法
electronStore 双重编码:写数组/对象,读回来变成字符串 钱包配置解析静默失效,新增的基金/股票重启后丢失 toJson / storeCover / saveJsonToCsv 改用 org.json 基类 JSONObject / JSONArray 判断
storeCover 在参数非法时先 clear() 再什么都不写 整个命名空间被静默清空(恢复备份会丢全部配置) 非法值直接 reject,不再清空
saveJsonToCsv 漏掉所有数据行 导出只有 BOM 的空 CSV 同上,按基类判断

网络

问题 后果 修法
原生 OkHttp 栈被服务端按客户端指纹掐断(unexpected end of stream) 股票 / 指数 / 分时 / K线 数据全空 新增双网络栈互补:原生栈失败(__failed 标记)时用 WebView 的 fetch 重试一次,两栈都失败才回落空结果;两边日志完整,非静默降级

实测同一出口 IP、同一时刻、同一 URL:push2 的 stock/get、trends2、kline 在原生栈全挂而浏览器栈 200;反之无 CORS 头的静态 js 只有原生栈能读 —— 两条栈缺一不可。

时序 / 渲染

问题 后果 修法
持久化监听器注册晚于初始化 dispatch 首次启动的配置写入全部丢失(WALLET_SETTING 等永不落盘) startListening() 提到 InitPage.init() 第一行,并加幂等保护
移动端 CSS 用了裸媒体查询 误伤 325px 宽的桌面菜单栏小窗,把 antd Switch 撑成灰色方块 移动端规则全部挂 html.platform-android 下
给所有 button / a 加 min-height 撑破固定 32px 的工具栏,「管理 / 榜单」文字位置偏上 只做视口级适配,不碰组件尺寸

其它

  • 首次启动内置示例自选(4 基金 + 4 股票,含示意持仓),方便直接体验;仅在本地无配置时生效,不覆盖既有数据
  • 基准字号 12 → 13,设置里字号滑杆上限 14 → 16
  • request 的 catch 补 Log.e 并附加 __failed / __error,数据层故障不再完全静默

数据源可用性

基金估值支持多数据源,可在「设置 → 基金接口」切换。不同网络环境下可用性不同,实测记录:

源 端点 受限网络出口实测
东方财富-天天基金 fundgz.1234567.com.cn ★★★★★(推荐,最快最准;但部分出口会被 CDN 返回缓存的 404 页,桌面端同样拿不到)
腾讯证券 web.ifzq.gtimg.cn ★☆☆☆☆(上游接口已下线,返回 interface offline)
支付宝-蚂蚁基金 www.fund123.cn ★★★☆☆
同花顺-爱基金 fund.10jqka.com.cn ★★★★☆(受限网络下的可靠备选)

若基金列表为空且能排除代码问题,先切数据源。

安装包

项 值
文件 fishing-funds-android-8.7.1-fork.1.apk
applicationId com.thecoolboyhan.fishingfunds
版本 versionCode 2 / versionName 8.7.1-fork.1
大小 4.4 MB
签名 自签名 release 密钥(apksigner 验证 v1 + v2 均通过)
SHA-256 816b6cf6dbfb63a5b448d07e3d25b77050854a2d24288e3651ffb10fb856ae38

⚠️ 如果你之前装的是 debug 版(app-debug.apk),首次安装本包需要先卸载旧版 —— 两者签名不同,Android 不允许覆盖安装。卸载会清掉本地配置,自选基金/股票会回到示例数据。

已知边界

  • 安卓端原生弹窗 / 文件选择器是安全默认值(一律按「取消」),因此删除自选、导出 CSV/JSON、备份导入导出不生效
  • 新闻「查看原文」依赖桌面 <webview> 标签,安卓端暂不可用
  • 货币接口(api.coingecko.com)在受限网络下需要代理
  • 未做 release 混淆(minifyEnabled false)

从源码构建

npm install          # 用 npm,不要 pnpm(沙箱环境 pnpm 会 EPERM)
npm run build
npx cap sync android
cd android && ./gradlew assembleDebug    # 需 JDK 17 + ANDROID_HOME

发布签名读取 android/keystore.properties(与 .jks 均不入库);缺失时自动回退为不签名,不会因缺密钥而构建失败。

许可

GPL-3.0(继承上游)。锚定 v8.7.1 —— 上游 8.8.0 把反爬逻辑抽成了私有子模块,公开源码无法编译出可运行的程序。