Skip to content

Releases

lycard 0.85.6

Choose a tag to compare

@Lanactnum Lanactnum released this 06 Nov 10:45

lycard 0.85.6

卡表更新:9952 → 10212 张(+260 张新卡)。

新增了什么

官方卡表已更新到 LO-7127-A,这次把缺的 260 张全部补齐:

卡种 数量
角色 220
区域 25
道具 14
事件 1
  • 卡名和效果全部中文(10212/10212),不是只进数据没翻译
  • 检索索引已重建 —— 新卡能按中文名、日文名、假名、罗马字搜到
  • 卡图两套都齐:APK 内置 WebP 10212/10212;数据包原图 PNG 也同步扩到 10212 张
  • 新卡的能力标记按术语表校正过([跳跃→[跳、[侧步→[横移、[回合恢复→[回合补正 等 173 处)

更新面板的两处修正

  • 「下好了没」不再只看文件大小:万一 Release 没给 size,以前会一直显示「继续更新」,
    明明下完了却点不了安装
  • 去系统设置开完「安装未知应用」权限,回到 App 会自动接着装(以前还得再点一次)

装哪个

文件 说明
lycard-0.85.6-arm64.apk arm64 版(现在的手机基本都是),不确定选它
lycard-0.85.6-universal.apk 全架构版(老机器 / x86 设备)
lycard-0.85.6-arm64.apk.from-0.85.5.lycpatch 差分补丁,给已装 0.85.5 的机器,App 自动挑

已经在用 0.85.5:在 App 里点更新即可,只会下十几 MB。
数据包(原图):需要原图的另外下载 lycee_cards_v2.pack.part01/02/03 再拼起来。

验证

  • flutter analyze 干净;测试 257 条全过
  • 数据包索引偏移连续性、分卷拼回逐字节一致、三卷 sha256 均已校验

lycard 0.85.5

Choose a tag to compare

@Lanactnum Lanactnum released this 01 Oct 03:09

lycard 0.85.5

更新包从 573 MB 降到十几 MB —— 差分更新。

为什么以前每次都要下 573 MB

APK 里 86% 的字节是内置卡图(9952 张 WebP,共 493 MB),而这些图在版本之间
从来不变。所以以前的「更新」等于把同一批图反复下载一遍。

APK 里装了什么 大小 占比
内置卡图(9952 张 WebP) 493.4 MB 86.0%
原生库 arm64 36.8 MB 6.4%
原生库 其它架构 26.6 MB 4.6%
代码(dex) 7.8 MB 1.4%
卡数据 JSON 4.0 MB 0.7%
其它 3.8 MB 0.6%

真正的代码只有 7.8 MB。

这一版做了什么

  • 差分更新:更新时只下「和上一版不一样的那部分」。
    实测 0.85.4 → 0.85.5 只要 7.6 MB(整包的 1.3%;从 0.85.3 升上来是 12.6 MB),
    手机上把它和已装的安装包拼起来(本地运算,实测 6 秒),得到的新包与原版
    逐字节相同(SHA256 校验)。
  • 失败自动回退:补丁对不上(比如你是从更老的版本升)、拼出来的校验不过、
    磁盘不够 —— 任何一种情况都自动改用完整下载,不会把你卡在那儿。
  • 更新完自动清理更新包:装上的旧包、下到一半又换版本的残包,启动时清掉。
    一个更新包 573 MB,留着纯属白占空间。
  • 更新面板会写清这次是差分(只下 13 MB)还是完整下载(573 MB),
    以及进度、速度、剩余时间。

装哪个

文件 体积 说明
lycard-0.85.5-arm64.apk 573.5 MB arm64 版(现在的手机基本都是),不确定就选它
lycard-0.85.5-universal.apk 616.2 MB 全架构版(arm64 + 32 位 ARM + x86_64),老机器用
lycard-0.85.5-arm64.apk.from-0.85.4.lycpatch 7.6 MB 差分补丁 —— 这一版还用不上,见下
lycard-0.85.5-arm64.apk.from-0.85.3.lycpatch 12.6 MB 同上

⚠️ 这一次(0.85.4 → 0.85.5)还是得下完整包,573 MB

差分的代码是这一版才写进去的。你手机上那个 0.85.4 根本不认识「补丁」这回事,
它只会照老样子去下整包。上面那两个补丁文件虽然挂在这儿,
但没有任何一个已发布的版本会去用它们。

从 0.85.5 往后才是十几 MB。 这一次是最后一次大下载 ——
下一版(0.85.6)发布时会给 0.85.5 生成 from-0.85.5 的补丁,那时候才真正生效。

验证

  • flutter analyze 干净;测试 249 → 256 条(新增 7 条:补丁挑选、应用补丁、
    旧包不符 / 哈希不符 / 取消 的拒绝路径、更新完清理)。
  • 差分还原做过真实端到端验证(tools/delta_e2e.dart):
    · 0.85.4 + 7.6 MB 补丁 → 0.85.5,SHA256 逐字节相同 ✓
    · 0.85.3 + 12.6 MB 补丁 → 0.85.5(跳版更新),同样逐字节相同 ✓

lycard 0.85.4

Choose a tag to compare

@Lanactnum Lanactnum released this 01 Oct 02:18

lycard 0.85.4

更新改成全程在应用内完成 —— 以前点「下载」是跳浏览器,现在从检查到安装都不离开 App。

这次改掉了什么

  • 不再跳浏览器:以前点「下载 lycard x.y.z」是拿系统浏览器打开下载地址(或 Release 页面),
    下完还得自己去「文件管理」翻出那个 APK 再点安装。现在是一条龙:
    检查更新 → 在 App 里下载 → 下完直接拉起系统安装器。
  • 下载看得见:显示已下 / 总量、实时速度、还剩多久。
    下到一半把窗口关掉不会中断,回「关于」页能接着看、接着下。
  • 断点续传:已下的那一段留在磁盘上,下次点「继续下载」带着 Range: bytes=N- 接着下 ——
    600 MB 不会因为断一次网就从 0 重来。服务端万一不支持续传(回了 200),会自动从头下,
    不会把内容拼成双份。
  • 安装包放哪:/sdcard/Android/data/com.lycard.app/files/update/。
    跟卡图数据包同一个大目录下面 —— 卸载 App 会一起清掉,也不会跑进相册或「下载」文件夹。
  • 要的权限直说:Android 8 起要允许「安装未知应用」。没开的话面板会写明,并给一个
    直接跳到那个设置页的按钮,不用自己去系统设置里翻。
  • 挑包和校验照旧:按本机架构挑(arm64 手机拿 arm64 包,老机器拿全架构包);
    下完核对字节数,短了直接报错,不会拿半个包去装。

装哪个

文件 体积 说明
lycard-0.85.4-arm64.apk 573.5 MB arm64 版(现在的手机基本都是),不确定就选它
lycard-0.85.4-universal.apk 616.2 MB 全架构版(arm64 + 32 位 ARM + x86_64),老机器用

校验值:

文件 字节 SHA256
lycard-0.85.4-arm64.apk 601,393,811 53861b3bdffa57f0f897bd0ad8aa3e12da0e328cb9ba0f8fecf5aec5f24d1b4f
lycard-0.85.4-universal.apk 646,155,181 adf22d05b950286f1b2a9cdeced1c16c2a1531f171b456461b1cba0aa42c7c24

从 0.85.3 起,App 里点「检查更新 → 更新到 lycard x.y.z」会在应用内下载并安装,
不用再自己去文件管理里找包。

验证

  • flutter analyze 干净;测试 227 → 249 条(新增 22 条:版本比较 / 按架构挑包 /
    检查更新的解析与错误分支 / 断点续传 / 暂停保留已下部分 / 字节数不足必须报错 / 安装通道 / 面板)。
  • 挑包时用 Release 附件名当文件名,不从下载地址最后一段猜(真机地址可能是 CDN 短名)——
    这条是写测试时发现的,顺手改掉。
  • 断点续传两条路都测了:服务端支持 Range(206)时接在后面下、不支持(200)时从头下,
    两种情况下最终文件都与源文件逐字节相同。

lycard 0.85.3

Choose a tag to compare

@Lanactnum Lanactnum released this 30 Sep 11:42

lycard 0.85.3

计算器体检 + 修复 —— 把「自动算值到底漏在哪」量了一遍,修掉漏算的写法和三处会算错数的地方。
这一版不动界面框架,改的都是数值算得对不对。

装哪个

文件 体积 说明
lycard-0.85.3-arm64.apk 573.5 MB arm64 版(现在的手机基本都是),体积最小 —— 不确定就选它
lycard-0.85.3-universal.apk 616.2 MB 全架构版(arm64 + 32 位 ARM + x86_64),老机器、或者不确定对方是什么机器时用这个

应用内「检查更新」会按手机架构自己挑。装完请先启动一次,再放卡图数据包。

自动算值:四个漏算的口子

计算器会把卡面上「放上场就生效」的效果自动算进数值。体检发现 4 种写法没被认出来:

  • [常時] 味方[花]キャラ全てに… —— 属性筛选 [花] 把 [常時] 顶掉了,常驻效果被误判成
    「要用才生效」,本该自动算的变成要手点。现在先认行动标签([常時]/[誘発]/[宣言]…),
    认不出来才退回原规则。能自动套用的 380 → 394 条。
  • この[雪]キャラにAP-1、この<魔剣>キャラにAP+1 —— 筛的只是自己身上的
    属性/类型,目标仍然是「自身」,以前却落进「目标待定」(7 处)。
  • DMG+[破棄したカードのEX] 这种没写「に」的变量写法 —— 以前整条都不显示,
    玩家根本不知道这张卡有变量效果(68 处 / 54 张卡)。现在会列出来让你填。
  • キャラ全てに / バトル参加キャラ全てに = 双方全体 —— 以前落进「目标待定」,
    只能点一格、数值会算少。现在放上场两边所有人一起吃(46 条)。
    带「〜を除く」的 6 条读法不止一种(除的是自己那一边还是对面),仍然留给玩家点。
  • 充能上限:以前只认 [チャージ:N],このキャラに1枚チャージできる 认不出来,
    面板会显示「这张卡没有充能」。认得出的从 867 张涨到 1015 张(90%)。

会算错数 / 会误导的三处

  • 充能到卡面上限就点不动了:以前加号能一直点,和面板自己写的「上限 N 张」自相矛盾。
    卡面没写上限(认不出)的卡不挡,仍然可以手动记。
  • 同编号两张卡不再互相干扰:给左边那张套上效果,右边那张不再跟着显示「已算上」;
    撤销也不会把两处一起撤掉。
  • 顶部「场上合计」只显示 AP/DP:SP、DMG 是每张卡各自的值(DMG 尤其如此,它是攻击力),
    几方的加到一起没有意义。

顺手补的

  • 「目标待定」的选卡面板改成双方都列(以前只给我方,目标在对面时选不了)。
  • 修正的时机能改了(以前改错了只能删了重建);说明栏会回显原来写的是什么。
  • 删掉一条修正后可以撤销删除。

验证

  • flutter analyze 干净;227 条测试全过(新增 24 条:解析口径 18 + 交互 6)。
  • 另留了一个体检脚本 test/calc_audit_probe_test.dart:跑真实卡池(9952 张)把上面这些口径
    都量一遍,以后改解析器重跑就知道涨跌。

校验值(下载断在中间是真实会发生的,对一下)

文件 字节 SHA256
lycard-0.85.3-arm64.apk 601,327,899 d36e46ae1b60254227e0bb7f602472feac14a4cdbf3b46b35f055107a304bd10
lycard-0.85.3-universal.apk 646,089,269 5b8c6406cdc42b9c340705e035195d0f5f53810fd0fb5adc4d972fc885c97213

全量体检口径(9952 张卡 / 10213 条解析结果):能自动套用 394 条、含条件 3536 条、
含变量 120 条、目标待定 619 条。另外 3777 张卡解析不出数值 —— 绝大多数是非数值效果
(未行动にする / 破棄 / ドロー / 移動),解析不出是对的,不是漏。

lycard 0.85.2

Choose a tag to compare

@Lanactnum Lanactnum released this 29 Sep 13:19

lycard 0.85.2 更新日志

版本:0.85.2+95

这一版没有改动界面功能,主要是把上一版留下的两件事收尾。

1. 「检查更新」不再挑错包

上一版开始同时提供 arm64 版和全架构版两个安装包。App 原来的挑包逻辑是「取附件列表里
第一个 .apk」,而 GitHub 是按文件名排序返回附件的(- 排在 . 前面)—— 于是全架构包
排到了前面,所有 arm64 手机去检查更新都会下到 616 MB 的全架构包。

现在改成按手机架构自己挑:

你的手机 拿到的包 体积
arm64(现在的绝大多数) lycard-<版本>-arm64.apk 573.5 MB
其他架构 lycard-<版本>-universal.apk 616.1 MB
万一两个都没找到 退回第一个 .apk —— 保证不会因为匹配不上而检查失败

2. 同时提供两种架构的安装包

文件 体积 说明
lycard-0.85.2-arm64.apk 573.5 MB arm64 版,现在的手机基本都是,选它
lycard-0.85.2-universal.apk 616.1 MB 全架构版(arm64 + 32 位 ARM + x86_64),老机器或不确定时用

为什么全架构只大了 42 MB:卡的图和数据(约 518 MB)三个架构是共用的,
重复的只有原生库那部分。

数据包

卡图数据包没有变,还是原来的 lycee_cards.pack(3,919,354,515 字节)。

数据包没变就不用重拷 —— 覆盖安装会保留全部数据。

lycard 0.85.1

Choose a tag to compare

@Lanactnum Lanactnum released this 29 Sep 12:43

lycard 0.85.1

这一版全是你报的 4 个问题的修复,没有新功能。逐条对照:

1. 底栏「构筑」和「计算器」反了 —— 已修

底栏的标签顺序和页面顺序对不上:下标 1 挂着「构筑」的标签,指向的却是
计算器页。所以点「构筑」出来的是计算器、点「计算器」出来的是构筑。

现在两侧一一对应:检索(0) / 计算器(1) / 构筑(2) / 我的(3)。
「设置 → 默认栏」下拉里的顺序也一并对齐,旧存档的栏位选择会自动迁移。

2. 数值计算:改成「每张卡放上去就自动算」 —— 已修

之前只有解析出效果的卡才出现算值区,而且每一条都要手动点「套用」。
现在改成:

  • 上卡即自动算:卡放上场,效果里「确定生效」的部分直接算进数值,不用点。
  • 场地一变就整体重算:「味方キャラ全てにAP+1」这类全场效果,
    后上场的卡也会吃到;把来源卡拿掉,它给的加成会从别人身上一起收回。
    (只在放牌那一刻算一次的话,后来的卡就漏了 —— 所以做成重算。)
  • 算不准的绝不替你猜:[誘発](触发)、[宣言](要用才生效、带代价的)、
    含条件的、含变量的、目标要指定某一体的 —— 都不自动套,留在卡的面板里。
  • 面板里每一条都标了状态,还能一键「剩下 N 条全部算上」(等于说「这些现在
    都生效」);已经算上的显示「已算上 / 撤销」,避免同一张卡点两次重复计数。
  • 自动算出来的条目也可以逐条改数值、删掉:改过的会留档,删掉的不会
    在下次重算时又冒出来。

3. 呼出输入法时切卡组,闪一下不切换 —— 已修

「正在看哪个卡组」这个状态原来放在底部面板的 builder 里。输入法一弹出/收起,
面板会整体重建一次,状态就被清回 null —— 表现就是「点一下卡组只闪一下、
又被弹回搜索框」。状态提到面板外面了,键盘开着也能正常切。

4. 储存区改成挂在每张卡下面 —— 已修

之前是「双方各一整块」的池子,不对。储存区(置き場)是某一张场上卡的,
和充能一样挂在卡下面:

  • 在卡的面板里新建/加减/删除,新建时如果卡面写到了「〜置き場」的名字
    (比如「迷宮」「経験値」),会直接列出来给你点
    ,也可以自己手填。
  • 格子上和充能并排显示,带张数(例如「迷宮 2」)。

其它

  • 测试从 191 条增加到 204 条,新增的都是覆盖上面这四点的
    (上卡自动算、全场效果扩散与收回、储存区挂卡、要用才生效的不许自动套)。
  • 构建:android-arm64,601,327,899 字节。

lycard 0.85.0

Choose a tag to compare

@Lanactnum Lanactnum released this 29 Sep 11:19

lycard 0.85.0 更新日志

版本:0.85.0+93 构建目标:android-arm64

计算器大升级

① 位置:挪到「检索」和「构筑」之间

底栏现在是 检索 → 计算器 → 构筑 → 我的。

⚠ 底栏顺序改过,你之前设的「进入App默认显示」会自动迁移(旧「构筑」还是
构筑、旧「我的」还是我的,不会因为挪位置就跳到别的栏去)。

② 上卡:可以直接从自己的卡组里挑

点空格放牌时,弹窗顶部多了一排「我的卡组」——点一下就从那套卡组里选牌,
不用再按卡名一张张搜。默认还是「卡库搜索」,两边随时切。

③ 充能:记在每张卡下面

卡下面压了几张(充能)可以在面板里直接加减,格子上会显示「充能N」。

卡面写了 [チャージ:N] 的会告诉你上限是几张(例:上限 2 张);没写充能的
卡会明确显示「这张卡没有充能」,免得你记错。

④ 储存区:把「〜置き場」这类卡记下来

每种卡挂的置き場名字都不一样(「迷宮」「経験値」「卒業」「わるいこと」
「世界樹の種」…全库有 20 多种),所以名字自己填,不写死任何一张卡。
每方一个区域,可建多个,各自记张数。

⑤ 自动算数值:从卡面效果直接算

打开一张场上卡的面板,会看到「这张卡的数值效果」——App 把它卡面上的
数值加成解析出来了,逐条列着,点「套用」就加到场上:

标记 含义
可直接套用 目标和数值都明确,点了就算
有条件,需确认 效果带「〜の場合」这类前提,你自己判断现在算不算
含变量,需手填 像「+[破弃的张数]」这种算不出来,会先建一条空的让你填数字

目标怎么落也分得很清楚:

  • 自身(「このキャラに」)→ 直接加到这张卡
  • 我方全体 / 我方 AF 全体 / 我方 DF 全体 / 对方全体 → 直接加到对应那一批
  • 我方 1 体 / 对方 1 体 / 対戦キャラ → 弹场上选卡让你点,绝不替你猜

解析覆盖面(全库 9952 张实测):6175 张卡能解析出 10142 条数值效果,
其中 6571 条可直接套用、3529 条带条件、49 条含变量。

⑥ 每一步都能查看、修改

修正列表按「上回合 / 此回合 / 应对 / 常时」分组,每条都带:

  • 来源标签(手动 / 效果 / 自动)——一眼看出这条是哪来的
  • 效果原文(自动套用来的会留着,点「改这条」能看到并核对)
  • 改 / 删两个按钮:数值不对就自己改,不想算了就删掉

这条特别重要:自动算出来的数永远可以被你手动改,App 不会跟你犟。

质量门禁

  • flutter analyze:无问题
  • flutter test:191 条全通过(新增:效果解析 14 条 + 计算器交互 12 条 + 数值口径 8 条)
  • 效果解析全量体检:解析出 10142 条,数值离谱的 0 条
  • tools/check_bottom_pad.py:通过
  • 卡图无损:APK 内 9952 张 WebP、0 张 PNG

顺带修的

  • 底栏顺序变更的存档迁移:老存档里的栏位下标会自动迁移,且只迁一次
    (用标记位保证,否则你下次再设「构筑」会被当成旧值又迁一遍)。
  • 一个会导致崩溃的写法:面板里输入框的控制器在对话框退场动画期间被提前
    释放(used after being disposed)——已改为不依赖控制器的写法,从源头避开。

lycard 0.84.1

Choose a tag to compare

@Lanactnum Lanactnum released this 29 Sep 10:49

lycard 0.84.1 更新日志

版本:0.84.1+92 构建目标:android-arm64

新功能:底栏多了「计算器」一栏

对局中要算的数(某个角色现在到底多少 AP/DP、场上总攻多少)一直靠心算,
这一栏就是把它交出去。

  • 场上就是规则的 6 格:前面 3 格 AF(攻击区)、后面 3 格 DF(防御区),
    双方各一块,和「对战规则」页写的是同一套口径。

  • 点空格放牌:从卡库里搜卡名/卡号选一张放上去;卡面基础值直接读卡表。

  • 点场上的牌加修正,每条修正都挂在时机上:

    时机 用途
    上回合 上回合留下、这回合还在生效的
    此回合 本回合自己做的
    应对 对方应对时做出来的
    常时 道具/区域这类一直在场上的

    每条修正可以写一句说明(也可以留空不写),四个数值可正可负。

  • 实时显示:格子上直接盖着一行当前值,被修正过的项会高亮并标出增减量
    (例如 AP5 旁边一个 +2);顶部还有双方场上合计,以及每个时机
    各贡献了多少(修正 上回合 +2 / 应对 −1)。

  • 一键清空:顶栏扫把图标,双方场地一起清。

数值口径:当前值 = 卡面基础值 + 全部修正。修正只是记「因为什么变了」,
所以四个时机的修正是全部一起加上去的,时机只用来归类显示 —— 这样你
一眼就能看出这几个数是谁弄出来的。

这一栏不保存:局内是一次性的,退出 App 即清空(按你的选择)。

修了一个会让人点错卡的 Bug:效果文本里的「假卡名」

效果文本里能点卡名跳转,但匹配时有个漏洞:日文片假名没有空格,一个
短名字只要出现在更长的词里,也会被当成卡名引用。全量体检量出来的实情:

假命中 出现次数 它实际在哪个词里
「チャー」 1902 チャージ(充能,规则词)
「ナル」 568 ペナルティ(惩罚,规则词)
「リト」 25 リトルバスターズ(作品名)
「リシア」 22 パトリシア(别的角色名)
「メイ」 19 ガールズ・ブック・メイカー
其余 9 个 42 リリィ/ルイス/アキナ…

也就是说:任何提到「充能」的效果里,都凭空多一处指向 LO-1239 的假链接,
点下去跳到一张完全无关的卡。

修法不是加词表,而是用片假名自己的边界:带片假名的名字必须占满整个
片假名词组
才算引用;被夹在更长的片假名词里的,一律不当引用。汉字没有这种
天然边界(「言霊」可能真是复合词的一部分),所以这条只对全片假名名字生效。

效果(全库 9952 张跑一遍):

修之前 修之后
识别到的卡名引用总数 7108 4581
其中 2 字卡名 776 161
多候选里首选不是同系/同会社 596 14
该认却没认的 2 字卡名 0 种 0 种

被拦掉的 2578 处,逐条核过上下文,全部是更长词里的片段,没有一条真引用
被误杀(例如「味方「ルミ」」这种独立出现的仍然照认)。

另外,全量体检脚本自己也有一条判定和产品代码不一致(它只认识「更长的卡名」,
不认识「更长的片假名词」),会把产品代码本来正确的行为误报成「漏掉」——
已按同源口径修好,并补了 6 条回归测试钉住这个边界。

底栏胶囊下半部分多出一块空白(0.83.6 起已修)

根因是系统手势安全区被包进了胶囊里面:NavigationBar 内部会把
viewPadding.bottom(本机 20dp)加在自己高度下面,主题里设的 68 就变成了 88,
而这 20dp 被悬浮胶囊连玻璃一起糊住了。

修法是结构性的:安全区归安全区、胶囊归胶囊 —— 悬浮胶囊把这段安全区算进
自己的底部外边距,同时让内部 NavigationBar 不再重复让位。图标和文字
在屏幕上的位置一点没动,只是玻璃不再多包那 20dp。

界面一致性

新增/改动的几处选择器都换成了项目统一的小标签组件(LyTag):计算器的时机、
卡组导入的识别系统、反馈页的类型与快捷收录。原因是 Flutter 的
SegmentedButton 高亮块和外框永远对不齐、Chip 系列去不掉自带的底色,
用统一组件才不会有"这块看着脏"的问题。

质量门禁

  • flutter analyze:无问题
  • flutter test:168 条全通过(含新增的 8 条计算器数值口径、3 条计算器交互、6 条卡名片段回归)
  • tools/check_bottom_pad.py:通过(带底栏界面的滚动留白与贴底按钮让位都对)
  • 卡图无损:APK 内 9952 张 WebP、0 张 PNG

lycard 0.83.6

Choose a tag to compare

@Lanactnum Lanactnum released this 29 Sep 10:18

lycard 0.83.6 更新日志

Bug 修复(本版新增)

底栏胶囊下半部分多出一块空白

底栏玻璃胶囊里、图标文字下方凭空多了一块空白,而且胶囊贴得离屏幕边缘很近。

根因(量出来的,不是估的):

项 数值
主题里 navigationBarTheme.height 68
Flutter NavigationBar 内部的 SafeArea 又加上的系统手势安全区 20
实际 NavigationBar 高度 88
胶囊自身底部外边距 14
底栏总占用高度 102

NavigationBar 内部会把系统手势安全区(viewPadding.bottom)加在自己高度的下面,而这 20dp 被悬浮胶囊连玻璃一起包了进去 —— 所以看着就是「文字下面空一块」。

修法(结构性的,没有写死任何补偿数值):

安全区归安全区、胶囊归胶囊。悬浮胶囊把那段安全区算进自己的底部外边距,同时让内部 NavigationBar 不再重复让位:

修复前 修复后
NavigationBar 本体高度 88 68
底栏总占用高度 102 102

图标与文字在屏幕上的位置完全不变(下方让位总量仍是 20 + 14),页面底部预留空间也无需调整;变的只是玻璃不再多包那 20dp 空白。通栏模式不悬浮,安全区仍留在内部,行为不变。

另外新增了底栏尺寸诊断开关(与既有的 FRAME_LOG 同风格):用 --dart-define=LAYOUT_LOG=1 构建时,启动会把底栏实际高度、系统安全区、界面缩放打到日志里,以后再遇到这类「多出一块/少了一块」的问题可以直接量,不用猜。


以下为 0.83.5 起已包含的完整内容:

版本:0.83.6+90 构建目标:android-arm64

功能更新

1. 卡表数据热更新

卡表、中文翻译、卡名词条、禁限卡表、模糊搜索索引这五类数据现在可以脱离 APK 单独更新。

  • 读取顺序:App 目录里的热更数据优先,读不到才用内置资源 —— 热更包缺失或损坏都不会让 App 起不来
  • 入口:数据与备份 → 卡表数据热更新
  • 「从文件选择数据包」支持:
    • .zip 数据包(里面放数据文件即可,放子目录里也认;可选放一个 data_version.json 提供版本号和说明)
    • 单个数据文件(例如只更新 banlist.json)
  • 只接受白名单文件名,数据包里混进图片、APK 之类不会被写进 App 目录
  • 可以一键「回退到内置数据」
  • 数据在启动时载入,所以装完需要重启 App 才生效(提示里如实说明,不假装已经生效)

卡图不在热更范围内:仍然走「内置压缩 WebP + 外挂原图包」两条路。

2. 打印卡图

卡组 → 更多 → 打印卡图…

  • 按真实卡牌尺寸 63×88mm 排版,A4 每页 9 张(3×3)居中,每张带极细裁切框,打印店按框裁即可
  • 两种出口:导出 PDF 或直接走系统打印
  • 图片质量把关:
    • 有外挂原图包 → 用无损原图
    • 只有内置压缩图 → 先明确提示「当前不是原图」,用户确认后才继续
    • 完全没有图 → 提示无法打印,不会静默生成一堆空白框
  • 内置卡图是 WebP,PDF 库只认 PNG/JPEG,这里用 Flutter 自带解码器转成 PNG,没有为转格式额外引入图像依赖
  • 排版期间显示进度条(60 张要逐张转格式,避免界面看着像卡死)

3. 卡组导入:两套识别系统

导入对话框现在让你自己选用哪套识别系统,不用再把链接粘进去反复试:

识别系统 形式 是否需要联网
lycard 分享码 LYD1…,离线解析 否
官方卡组链接 https://lyc.ee/d<ID> 短链 / https://lycee-tcg.com/d/?d=<ID> 长链 是
  • 两套之外还有「自动识别」:LYD1 开头按分享码,含官方域名按官方链接
  • 官方页面解析:
    • 卡组名取自「デッキ名」那一行
    • 卡表按 <td>N枚</td><td>卡号</td> 解析 —— 这样异画后缀(如 LO-2690-K)能保留
    • 表格缺失时退回页面里的 deckline=1691:1,0701:4,… 兜底
    • 已用真实官方页面验证:卡组名、22 组卡、合计 60 张全部解析正确
  • 官方页不提供「主战卡」,导入后会提示你自己补上
  • 剪贴板监听也走同一套识别,粘官方链接同样能导入

4. 反馈通道:待收录项一键模板

我的 → Bug / 功能反馈 新增「快捷收录」:

  • 卡名待译 —— 卡名还是纯日文/外文,模板已带好「卡号 / 现在的卡名 / 建议译名」
  • 效果待译 —— 效果文本里残留日文片段,模板已带好「卡号 / 残留的片段 / 正确写法」

选一下就自动填好模板,你只要补卡号。报告里会带上「主题」一行,方便归类。

Bug 修复

  • 列表性能残留:构建 页与 想要/出卡 页的列表项此前仍在 context.watch<AppState>(),会导致整个 AppState 变化时逐项重建;已改为 read<AppState>(),由父列表统一刷新。扫描结果:列表项全量监听 3 → 0
  • 修复数据热更新接入 search_keys.json.gz 时的类型错误(rootBundle.load 返回 ByteData,需要取 buffer.asUint8List())
  • 修掉热更服务里一处永远不成立的空判断

安装包

  • 内置压缩卡图:9952 张 WebP,APK 内 PNG 卡图 0 张
  • 构建已开启 noCompress += "webp":WebP 不再被 Android 二次 ZIP 压缩,图片内容不变,只是构建更快、解包更省事

质量门禁

  • flutter analyze:无问题
  • flutter test:151 条全部通过(新增 9 条官方卡组链接解析测试)
  • 底栏避让检查:通过
  • 列表监听检查:通过

已知事项(待办)

  • 新按钮 / 新提示的中文原文尚未补多语言表(繁中、英、日、俄、韩)。缺失时自动回退显示中文,不影响使用。
  • 少量卡名仍是纯日文/外文(多为武器名、技能名、外来语专名,没有可靠统一的中文译名)
  • 部分效果文本方括号内仍有日文片段(规则关键词、作品名、置场名等),需逐条人工校对
  • 滚动流畅度仍只有静态检查结论,真机帧率数据待补
  • 官方链接导入依赖联网与官方站点可访问性;打不开时会明确报错,不会静默失败

lycard 0.83.5

Choose a tag to compare

@Lanactnum Lanactnum released this 29 Sep 10:01

lycard 0.83.5 更新日志

版本:0.83.5+89 构建目标:android-arm64

功能更新

1. 卡表数据热更新

卡表、中文翻译、卡名词条、禁限卡表、模糊搜索索引这五类数据现在可以脱离 APK 单独更新。

  • 读取顺序:App 目录里的热更数据优先,读不到才用内置资源 —— 热更包缺失或损坏都不会让 App 起不来
  • 入口:数据与备份 → 卡表数据热更新
  • 「从文件选择数据包」支持:
    • .zip 数据包(里面放数据文件即可,放子目录里也认;可选放一个 data_version.json 提供版本号和说明)
    • 单个数据文件(例如只更新 banlist.json)
  • 只接受白名单文件名,数据包里混进图片、APK 之类不会被写进 App 目录
  • 可以一键「回退到内置数据」
  • 数据在启动时载入,所以装完需要重启 App 才生效(提示里如实说明,不假装已经生效)

卡图不在热更范围内:仍然走「内置压缩 WebP + 外挂原图包」两条路。

2. 打印卡图

卡组 → 更多 → 打印卡图…

  • 按真实卡牌尺寸 63×88mm 排版,A4 每页 9 张(3×3)居中,每张带极细裁切框,打印店按框裁即可
  • 两种出口:导出 PDF 或直接走系统打印
  • 图片质量把关:
    • 有外挂原图包 → 用无损原图
    • 只有内置压缩图 → 先明确提示「当前不是原图」,用户确认后才继续
    • 完全没有图 → 提示无法打印,不会静默生成一堆空白框
  • 内置卡图是 WebP,PDF 库只认 PNG/JPEG,这里用 Flutter 自带解码器转成 PNG,没有为转格式额外引入图像依赖
  • 排版期间显示进度条(60 张要逐张转格式,避免界面看着像卡死)

3. 卡组导入:两套识别系统

导入对话框现在让你自己选用哪套识别系统,不用再把链接粘进去反复试:

识别系统 形式 是否需要联网
lycard 分享码 LYD1…,离线解析 否
官方卡组链接 https://lyc.ee/d<ID> 短链 / https://lycee-tcg.com/d/?d=<ID> 长链 是
  • 两套之外还有「自动识别」:LYD1 开头按分享码,含官方域名按官方链接
  • 官方页面解析:
    • 卡组名取自「デッキ名」那一行
    • 卡表按 <td>N枚</td><td>卡号</td> 解析 —— 这样异画后缀(如 LO-2690-K)能保留
    • 表格缺失时退回页面里的 deckline=1691:1,0701:4,… 兜底
    • 已用真实官方页面验证:卡组名、22 组卡、合计 60 张全部解析正确
  • 官方页不提供「主战卡」,导入后会提示你自己补上
  • 剪贴板监听也走同一套识别,粘官方链接同样能导入

4. 反馈通道:待收录项一键模板

我的 → Bug / 功能反馈 新增「快捷收录」:

  • 卡名待译 —— 卡名还是纯日文/外文,模板已带好「卡号 / 现在的卡名 / 建议译名」
  • 效果待译 —— 效果文本里残留日文片段,模板已带好「卡号 / 残留的片段 / 正确写法」

选一下就自动填好模板,你只要补卡号。报告里会带上「主题」一行,方便归类。

Bug 修复

  • 列表性能残留:构建 页与 想要/出卡 页的列表项此前仍在 context.watch<AppState>(),会导致整个 AppState 变化时逐项重建;已改为 read<AppState>(),由父列表统一刷新。扫描结果:列表项全量监听 3 → 0
  • 修复数据热更新接入 search_keys.json.gz 时的类型错误(rootBundle.load 返回 ByteData,需要取 buffer.asUint8List())
  • 修掉热更服务里一处永远不成立的空判断

安装包

  • 内置压缩卡图:9952 张 WebP,APK 内 PNG 卡图 0 张
  • 构建已开启 noCompress += "webp":WebP 不再被 Android 二次 ZIP 压缩,图片内容不变,只是构建更快、解包更省事

质量门禁

  • flutter analyze:无问题
  • flutter test:151 条全部通过(新增 9 条官方卡组链接解析测试)
  • 底栏避让检查:通过
  • 列表监听检查:通过

已知事项(待办)

  • 新按钮 / 新提示的中文原文尚未补多语言表(繁中、英、日、俄、韩)。缺失时自动回退显示中文,不影响使用。
  • 少量卡名仍是纯日文/外文(多为武器名、技能名、外来语专名,没有可靠统一的中文译名)
  • 部分效果文本方括号内仍有日文片段(规则关键词、作品名、置场名等),需逐条人工校对
  • 滚动流畅度仍只有静态检查结论,真机帧率数据待补
  • 官方链接导入依赖联网与官方站点可访问性;打不开时会明确报错,不会静默失败