Skip to content

Releases: 3beuml/ZZUPocket

0.32.2

0.32.2 Pre-release
Pre-release

Choose a tag to compare

@3beuml 3beuml released this 20 Oct 13:25

⚠️ 预发布:这一版是给华为/荣耀机型排查壁纸问题用的诊断版,普通用户请继续用 0.32.1。

背景

0.32.1 修掉了「换壁纸时一直转圈」,但那几位华为用户看到的仍然只有一句「这张图片读不出来」。
他们截图里系统提示是「此相册文件已在本地、无需下载」——说明不是云端问题,而是我们读取或解码失败了。
0.32.1 把真正的异常吞掉了,所以定位不了。

本版做了什么

  1. 把失败原因显示出来:界面上会直接写清楚卡在哪一步,例如
    • 原因:读取异常 SecurityException
    • 原因:无法打开文件(provider 返回空流)
    • 原因:本地文件解码失败(UnsupportedOperationException)
  2. 补一条读取兜底:部分机型 openInputStream 返回空,但 openFileDescriptor 能读,现在会走这条路;
  3. 失败时打日志(tag WallpaperDecode,含失败阶段与字节数),方便进一步排查;
  4. 提示文案改成「换一张截图试试(截图一定能读)」。

请这样测(华为/荣耀用户)

  1. 课表页 → ⚙ 课程表设置 → 更换背景;
  2. 选之前失败的那张原图 → 看提示里的「原因:…」是什么,截图发我们;
  3. 再选一张手机截图 → 这一步应该成功(如果截图也失败,说明问题比格式更底层);
  4. 如果截图能成功、原图失败,基本可以确定是图片格式/编码问题(例如 HDR/HEIF),我们再针对性处理。

说明

这不是功能更新,纯粹是为了拿到失败原因。诊断出来后我会在下一版里真正修掉。

0.32.0

Choose a tag to compare

@3beuml 3beuml released this 20 Oct 12:18

0.32.0

这个版本最重要的变化:研究生课表现在可以用了。之前研究生的课表一直显示「教务登录态已失效」,
因为研究生的课表根本不在本科教务系统里——它在研究生院那套系统,需要单独登录一次。


一、新增:研究生课表

  • 自动识别学籍:用你的账号问一次本科教务,本科生走的还是原来那条路;研究生会自动切到研究生院的数据源。
    判不出来时(比如网络异常),课表页最下面有「我是研究生,课表在研究生院系统」可以手动切换。
  • 整学期课表:不再是"只能看本周",和本科生一样有整学期网格、翻周、课程详情,还能看到教室与主讲老师。
  • 官方作息时间:第 1~10 节的上下课时间按学校作息表显示(原来研究生课表只有"第 N 节"、没有时间)。
  • 教学周可校正:研究生系统不返回"现在是第几周",所以「课程表设置 → 教学周」里可以设置
    开学日期(第 1 周起始日)、当前周次、本学期总周次、每周起始日。本科生的这几项由教务校历自动填。

二、新增:断网也能看课表

  • 先显示、再刷新:进课表页先显示本地缓存(秒开),再在后台悄悄拉最新数据。
  • 内容没变时界面完全不动:不会闪、不会弹提示。
  • 拉不到时不报错:顶部只出现一行小字,例如「显示的是 14:20 的课表 · 点此重试」,
    而不是一条红色错误——避免让人误以为账号出了问题。
  • 登录过期:提示会写「研究生登录已过期,以下是 14:20 的课表 · 重新登录」,点它直接去重新登录。
  • 空教室:保留最近 7 天(今天 ~ 往后 6 天)的教室占用快照,教务取不到时仍可查看,并标注获取时间。

三、新增:今日页与桌面小组件支持研究生

  • 「今天」页会显示研究生的课(以前只认本科学期,研究生会看到"今天没有课");
  • 2×2「下一节课」、4×2「今明课表」都能显示研究生课程,外观与本科生完全一致;
  • 「电量与校园卡」组件不受影响。

四、界面上的清理

  • 课表页表头回到简洁样式:第 7 周 / 共 19 周;
  • 「登录研究生系统」页面只保留「重新登录」「完成登录」两个按钮;
  • 正式安装包里不再显示「自检工具」(一卡通/教室/鉴权/研究生探测/图书馆)——它们是排障用的,
    平时用不到,留着反而干扰。需要排查时我们会另外提供带自检的安装包。

五、研究生怎么登录(第一次用看这里)

研究生课表需要单独登录一次研究生院系统,因为它是另一套系统。

  1. 先正常登录 App:用学校统一身份认证(账号 + 密码)。
    登录后电费、校园卡等功能就都能用了。
  2. 进「课表」页:如果判定你是研究生,会看到「研究生课表」和「登录研究生系统」按钮。

    如果没看到这个入口,点页面最下面的「我是研究生,课表在研究生院系统」也一样。

  3. 点「登录研究生系统」:会打开学校自己的统一身份认证页面。
  4. 在这个页面上再输一次账号密码:
    这一次密码是输在学校自己的网页上的,App 不接触、不保存,只接收它发下来的登录状态。
  5. 登录成功、回到 App 后:课表会自动拉取并显示(如果没自动完成,点一下「完成登录」)。
  6. 以后就不用再登录了:登录状态存在本机。等它过期时,课表页顶部会提示,
    点一下那行提示就能重新登录。

如果教学周 / 日期对不上

研究生系统只告诉"第几周的第几节",不告诉我们"现在是第几周",所以偶尔会差一周。校正方法:

  1. 课表页右上角 ⚙ 课程表设置;
  2. 最上面「教学周」→ 看「当前周次」是不是本周;
  3. 不对就改「当前周次」,或直接把「开学日期(第 1 周周一)」设成学校校历上的那一周;
  4. 改完立刻生效,以后会按日期自动推算,不用再改。

六、已知限制

  • 研究生需要单独登录一次研究生院系统(也就是会输两次密码,一次给 App、一次给学校网页)。
    这是两套系统的现状,暂时无法合并。
  • 研究生账号没有教室占用功能(研究生院侧没有对应数据源)。
  • 空教室数据超过一定时间后仍会显示(并标注获取时间),不会自动隐藏——请以标注的时间为准。
  • 研究生的历史学期切换暂未支持(目前固定显示当前学期)。

七、升级说明

  • 可以直接覆盖安装,登录状态与本地数据都会保留;
  • 由于版本号升高,装了这个版本之后无法直接降级到旧版本(需卸载重装,会清空本地数据)。

八、致谢

感谢 @Inspire2431 同学:

  • 第一个把"研究生课表一直提示登录失效"这个问题说清楚,并给出了准确的判断(问题出在培养层次与数据源,不在登录状态);
  • 提了两个高质量的 PR(研究生课表数据源、会话 Cookie 与周次对齐),还附带真机证据;
  • 指出并复现了探针报告里两处会泄露凭据的脱敏漏洞;
  • 在这几个版本里反复真机验证,包括登录、翻周、离线缓存这些不好测的路径。

没有这些反馈,研究生这条链路不会这么快跑通。

0.31.14

0.31.14 Pre-release
Pre-release

Choose a tag to compare

@3beuml 3beuml released this 20 Oct 10:14

⚠️ 预发布测试包,不是正式版。普通使用者请装最新正式版 0.31.0,不要装这个包。

请用本版(0.31.14)。0.31.13 有个回归:本科账号的小组件会误显示「假期中」,请勿使用。
0.31.3 ~ 0.31.6 也请勿再装。

本版修了什么

0.31.13 里,桌面小组件与今天页把「第几周」这个值改成了只取研究生周次。
本科账号没有研究生周次 → 这个值为空 → 被当成「假期」,于是刚上完课也显示
「假期中 · 期待新的学期」。

现在改成:本科优先,本科判不出(比如残留的旧学期超出区间)再用研究生周次。
判定语义是「任一边能判出周次 ⇒ 不算假期」,只有两边都判不出才显示「假期中」。

情况 现在显示
正常上学日、今天有课 正常列出课程
正常上学日、今天没课 无课程
真假期(不在任何学期内) 假期中
还没同步过课表 还没有课表数据

课程数据本身一直是好的(课表页没受影响),坏的是这个状态判定值。

同时保留(0.31.13 的成果)

  • 今天页 / 2×2「下一节课」/ 4×2「今明课表」都能显示研究生的课,外观与本科一致;
  • 空教室缓存保留 7 天(今天 ~ 今天+6),断网也能看,带「获取于 HH:MM」;
  • 登录过期时点提示直接去登录。

请这样验

本科

  1. 回到桌面看组件:应显示今天的课 / 「无课程」,不再显示「假期中」;
  2. 打开 App 的「今天」页,确认与组件一致;
  3. 课表页仍正常(表头 第 7 周 / 共 19 周)。

研究生

  1. 今天页与两个课表组件仍显示自己的课;
  2. 组件外观与本科一致。

已知限制

  • 空教室「超 1 小时不画占用格」不做(按你的要求);
  • 研究生侧不提供教室占用。

装了想退回正式版

本包 versionCode 高于正式版,不允许直接降级:需先卸载再装正式版,
卸载会清掉登录状态与本地数据。

怎么反馈

请在 issue #2 用文字说明:组件现在显示的是「课程」还是「无课程」,是否还有「假期中」。
不需要截图。

0.31.13

0.31.13 Pre-release
Pre-release

Choose a tag to compare

@3beuml 3beuml released this 20 Oct 09:30

⛔ 这一版有回归:本科账号的小组件会误显示「假期中」。
请改用 0.31.14:https://github.com/3beuml/ZZUPocket/releases/download/v0.31.14/ZZUPocket-0.31.14.apk


⚠️ 预发布测试包,不是正式版。普通使用者请装最新正式版 0.31.0,不要装这个包。

请用本版(0.31.13)。0.31.3 ~ 0.31.6 请勿再装。

本版做了什么

1. 今日页 + 桌面小组件接入研究生课表

以前这两处只认「本科学期」,研究生账号会出现课表页有课、今日页却说"今天没有课"、组件也空着。
现在抽了一个统一口径(本科 + 研究生合并),三处永远一致。

位置 变化
今天页 研究生的课会出现在时间轴里
2×2「下一节课」 显示研究生的下一节
4×2「今明课表」 显示研究生今天/明天的课
4×2「电量与校园卡」 与课表无关,未动

外观和本科完全一样(沿用同一套排版),只是数据来源变了。组件本身每 30 分钟自动刷新一次,
跨天时"明天"会变成"今天",不需要手动操作。

2. 空教室保留 7 天

缓存窗口从"只留当天"改成 今天 ~ 今天+6 天(你选的 B 方案):

  • 这段时间内打开过的日期,断网/教务挂了也能看,并常显「获取于 HH:MM」;
  • 顺手修了一个 bug:旧实现按"这次抓取的日期"清理,切到未来某天抓一次会把今天的快照删掉。

3. 登录过期时,点提示直接去登录

灰字提示现在带类型:

  • 登录过期 → 点它直接打开研究生系统登录页(原来只是重试,必然再失败一次);
  • 网络/教务不可用 → 点它重试。

请这样验

本科(回归)

  1. 今天页、三个小组件与之前一样正常;
  2. 空教室:选今天和明天各看一次 → 断网重进,这两天都应能看(带获取时间);
  3. 课表页:表头 第 7 周 / 共 19 周,翻周正常。

研究生

  1. 今天页应显示自己的课(而不是"今天没有课");
  2. 添加 2×2「下一节课」与 4×2「今明课表」组件 → 应显示研究生的课,外观与本科一致;
  3. 课表页、离线缓存仍正常(0.31.12 验过的行为不应回退)。

已知限制

  • 空教室「数据超过 1 小时不画占用格」的降级:按你的要求不做,靠灰字标时间;
  • 研究生侧不提供教室占用;
  • 课表缓存不做学期清理。

装了想退回正式版

本包 versionCode 高于正式版,不允许直接降级:需先卸载再装正式版,
卸载会清掉登录状态与本地数据。

怎么反馈

请在 issue #2 用文字说明:今天页有没有课、组件显示是否正常、外观是否与本科一致。
不需要截图。

0.31.12

0.31.12 Pre-release
Pre-release

Choose a tag to compare

@3beuml 3beuml released this 20 Oct 08:35

⚠️ 预发布测试包,不是正式版。普通使用者请装最新正式版 0.31.0,不要装这个包。

请用本版(0.31.12)。它 = 0.31.11 的缓存优先 + 一个离线关键修复。

本版修了什么(0.31.11 → 0.31.12)

0.31.11 里有个死角:研究生一断网就看不到缓存课表。
原因是"判断你是不是研究生"这一步要联网(问本科教务的接口),断网就判不出,
于是界面退回本科空态——缓存明明在,却看不到。

本版改成:探测拿不到结论时,只要你登录过研究生系统或本地有研究生课表缓存,
就直接进研究生视图(你亲自登录过,比一次探测更可信)。本科账号行为不变。

本版完整能力

场景 表现
有缓存 立刻显示,不转圈
刷新成功、内容没变 界面不动,只更新"获取时间"
刷新失败(断网/教务挂) 一行灰字:显示的是 14:20 的课表 · 点此重试
会话过期 研究生登录已过期,以下是 14:20 的课表 · 重新登录
从没取过 + 失败 才显示错误

课表缓存 24 小时;空教室只缓存当天、30 分钟,且常显「获取于 HH:MM」。

请这样验(重点是第 2 步)

  1. 联网进课表页,等它加载出课表;
  2. 开飞行模式 → 杀掉 App → 重进课表页:
    • 应立刻看到课表(不是空白、不是转圈);
    • 顶部一行灰字「显示的是 HH:MM 的课表 · 点此重试」;
    • 研究生账号同样应看到自己的研究生课表(而不是本科空态)。
  3. 空教室:联网打开一次 → 飞行模式重进 → 教室列表 + 「获取于 HH:MM」;
  4. 关掉飞行模式 → 点那行灰字(或右上角刷新)→ 灰字消失;
  5. 连续点两次刷新 → 界面不应闪烁(内容没变就不该有任何变化);
  6. 升级后能正常启动(数据库 v7 迁移)。

已知限制(下一批)

  • 「今日」页与桌面小组件还没接研究生课表;
  • 空教室「超过 1 小时不画占用格」的降级还没做;
  • 「教室占用」研究生侧暂无数据源。

装了想退回正式版

本包 versionCode 高于正式版,不允许直接降级安装:需先卸载再装正式版,
卸载会清掉登录状态与本地数据。

怎么反馈

请在 issue #2 用文字说明:飞行模式下是否能看到课表、灰字内容、恢复网络后灰字是否消失。
不需要截图。

0.31.11

0.31.11 Pre-release
Pre-release

Choose a tag to compare

@3beuml 3beuml released this 20 Oct 08:22

⚠️ 预发布测试包,不是正式版。普通使用者请装最新正式版 0.31.0,不要装这个包。

请用本版(0.31.11):包含周次修复、界面清理、以及本版的缓存优先。
0.31.3 ~ 0.31.6 请勿再装。

本版的核心改动:先看缓存,再偷偷刷新

以前每次进课表/空教室都要等网络;现在:

情况 现在的表现
有缓存 立刻显示,不转圈、不显示"加载中"
后台刷新成功,内容没变 界面一个字都不动(只更新"获取时间")
后台刷新成功,内容有变 静默替换,不弹提示
刷新失败 不报红错,只在顶部一行小灰字:显示的是 14:20 的课表 · 点此重试
会话过期 研究生登录已过期,以下是 14:20 的课表 · 重新登录
从没成功取过 + 失败 才显示错误

时间一律写「获取于 HH:MM」/「14:20 的课表」,不写"数据截至"——我们只知道本地何时抓到,
不知道学校何时改过。

课表(本科 + 研究生)

  • 缓存有效期 24 小时(课表一学期基本不变),下拉/点刷新随时强制;
  • 刷新失败时保留缓存,只加一行灰字,不再把界面变成一条红色错误。

空教室

  • 只缓存当天(跨天自动失效),有效期 30 分钟;
  • 教务取不到时,仍能看到今天早上抓到的状态,并常显「获取于 HH:MM」
    —— 空教室是"此刻有没有课"的数据,不能让人误以为是实时的。

数据库

v6 → v7:同步表加内容指纹与缓存版本,新增教室占用快照表。升级不动旧数据。

请这样验

  1. 断网验缓存:先进课表页让它加载一次 → 开飞行模式 → 杀掉 App 重进课表页
    → 应立刻看到课表,顶部一行灰字「显示的是 … 的课表」;点那行会重试;
  2. 空教室:同样先打开一次(让它抓到今天的占用)→ 飞行模式重进 → 应看到教室列表 + 「获取于 HH:MM」;
  3. 正常联网:关掉飞行模式、点刷新 → 灰字消失,课表/教室照常;
  4. 内容没变时:连续点两次刷新,界面不应有任何闪烁或提示;
  5. 研究生:登录后进课表,表头 第 7 周 / 共 19 周,翻周正常;
  6. 升级后能正常启动(v7 迁移)。

已知限制(下一批)

  • 「今日」页与桌面小组件还没接研究生课表(它们按本科学期日期取数据,需要合并研究生课程);
  • 空教室「数据超过 1 小时就不再画占用格」的降级还没做(要先改格子渲染,避免把"未知"画成"空");
  • 「教室占用」研究生侧暂无数据源。

装了想退回正式版

本包 versionCode 高于正式版,Android 不允许直接降级安装:需先卸载再装正式版,
卸载会清掉登录状态与本地数据。

怎么反馈

请在 issue #2 用文字说明:断网时能否看到缓存课表、那行灰字是否出现、正常联网后是否消失。
不需要截图。

0.31.0

Choose a tag to compare

@3beuml 3beuml released this 14 Oct 15:52

ZZUPocket 0.31.0

这一版把电费查询从主校区的四个园区校区扩到全校。

电费

  • 内置房间表从一个区域扩到 6 个:主校区、北校区、东校区、南校区、护理学院、洛阳校区。选房间时最前面多了一层「校区」。
  • 新增「从学校账户读取我的房间」:走学校自己的房间树,内置表里没有的楼栋也能查到 —— 典型就是亿达学生公寓(学校账号绑定了哪个房间就读哪个)。
  • 空调房间号自动带出:按每栋楼各自的编号规律离线算好(各楼规律不同,不是统一公式),不用再手抄;只有规律特殊的楼栋才需要手填,输入框下面会写清规则。
  • 照明 / 空调的房间名各存各的:修掉「切来切去都显示我自己寝室」的问题。
  • 只有一路表计的楼只显示一个「电量」(目前确认是亿达学生公寓):不再出现照明/空调切换、图例和按日明细;今日页与桌面小组件同步。
  • 在线选房间弹窗改成固定高度 + 常驻「已选」路径,来回切层级时不再跳动。
  • 荷园这类「一间寝室对多个空调户、照明共用」的情况补了说明文案,并可按住户序号选自己那一路。

课表

  • 只带日期、不带星期的记录不再被丢掉,并按日期反推星期与周次。
  • 同一门课的不同日期各自成条,避免补课记录覆盖正常课。

安装说明

versionCode 72,与旧版同一签名,直接覆盖安装即可,不用卸载(卸载会清掉已登录的账号与本地数据)。APK 见下方 Assets。

v0.29.3-P6

Choose a tag to compare

@3beuml 3beuml released this 30 Sep 13:34

ZZUPocket 0.29.3-P6

郑州大学校园助手(Android)—— 把学校那几个分散的网页系统整理成一个原生 App:
课表、教室占用、电费、校园卡、图书馆座位,外加三个桌面小组件。

首次公开发布。

学习

  • 课表:学期 / 教学周切换,星期表头带日期(今天高亮)、自定义日程(可与教务课混排)、
    课程总览、自定义课表背景图、格子内容与密度可调
  • 今天:一条时间轴看这一天 —— 上课、已完成的专注;外加宿舍电量、校园卡余额与今日消费
  • 专注(番茄钟):计时引擎 + 前台服务 + 常驻通知,标签管理,周 / 月 / 年统计与热力图
  • 教室占用:按楼筛选,每间教室哪几节有课

生活

  • 电费:照明 / 空调两套表计的余额、每日用量、电费估算、按日明细、余额趋势;
    内置 59 栋楼的房间表(选楼栋 → 选房号),也支持手动填 ID
  • 校园卡:余额、日 / 周 / 月 / 年消费、流水明细与筛选
  • 图书馆座位:内嵌学校原版网页(自动用统一身份认证登录)

桌面小组件(只读本地数据,断网也有内容)

  • 下一节课(2×2):一节课大字 + 完整时间段 + 地点,右上角圆气泡显示"这节课以及之后还有几节"
  • 今明课表(4×2):左列今天、右列明天,各列出还没上的课
  • 电量与校园卡(4×2):左半照明 / 空调余额与"可用约 N 天",右半校园卡余额与本周消费;
    两块分区可点,分别进电费页 / 校园卡页

安装

  1. 下载下面附件里的 ZZUPocket-0.29.3-P6-release.apk
  2. 手机上允许"安装未知应用"
    给文件管理器或浏览器放行"安装未知应用")
  3. 直接安装,要求 Android 12(API 31)及以上

之后的新版本用同一套签名,可以直接覆盖安装,数据不丢。

首次使用

  1. 登录:更多 → 登录 / 切换账号,走学校统一身份认证(CAS)。App 不保存密码,只保存加密后的登录令牌。
    首次登录会让手机上的「豫见郑大」下线一次(学校统一认证机制导致),之后不会;
    建议登录后到统一认证的「安全中心」把本设备设为可信设备,以后就不需要短信验证码。
  2. 填宿舍房间号(要看电费的话必须填):更多 → 电费 → 右上角齿轮,填照明与空调两个房间号
    (在学校电费页面上能看到自己的编号)。同宿舍内空调号通常是照明号前面加 8。
  3. 课表、专注记录、电费历史都是本地数据,断网也能看;教室占用、图书馆、校园卡需要联网。

数据与隐私

  • 不保存密码:登录只走学校统一身份认证,本机仅保存加密后的登录令牌;退出登录会清除
  • 数据只在本机:课表、专注记录、电费采样、校园卡流水都存在本机数据库,
    没有自建服务器,也不会上传;卸载 App 会一并清掉
  • 只读接口:不做电费充值、不做校园卡转账、不做自动抢座
  • 不采集:没有统计 SDK、没有崩溃上报、没有广告

已知限制

  • 图书馆座位目前是内嵌学校网页:学校那套页面在 WebView 里 vh 会算成 0(表现为"整片灰底"、须知空白),
    App 里做了对症修复,学校前端一改可能还要再修;
  • 校内接口来自公开网页的协议整理,学校改版就会失效;会跟着修,但不保证及时
  • 电费历史是本机定时采样推算的(学校不提供历史用电量接口),所以越常打开 App 越准;换设备后历史从零开始

致谢

接口协议(CAS 登录、教务、一卡通)参考 / 对齐了以下社区项目,均为 MIT 许可: