FormulaManager(公式管理器)最早是面向工程计算场景的 C# 桌面工具,后来在 FormulaManager.Mobile(MAUI)里尝试过移动端,最终我选择了 Kotlin + Jetpack Compose 重写为原生 Android 应用,也就是本站提供下载的 Kotlin 版(本文写于 v1.0.0,当前版本 v1.0.1)。

版本提示(2026-11-02):本文记录的是 v1.0.0 的迁移过程。当前 Android 版为 v1.0.1(versionCode 27),包名 cn.formulamanager.formulamanager;数据库已升级到 Room schema v3,与 Windows 版(v1.0.7)的 .db 可以互相导入。功能与公式库的最新情况见《FormulaManager 1.0.1 更新说明》。

为什么重写而不是继续用 MAUI

移动端最重要的使用场景是离线、快速、随时可用。原工程的 C# 版功能完整,但迁移到移动端时,几个核心诉求驱动我选择了原生重写:

  • 公式计算与数据库操作在本地完成,不需要服务器;
  • Compose 声明式 UI 对大量表单类界面的维护成本更低;
  • Room + SQLite 与既有数据模型可以平滑对接,历史公式库可以继续使用。

功能面板

应用底部共有 5 个面板,覆盖工程计算的常见场景:

面板主要能力
公式分类树 + 公式列表 + 二维 / 三维查表公式 + 表达式计算 + 历史记录
方程一元一次至三次、二元一次方程组、指数 / 参数 / 分式方程
规划类似 Excel Solver:GRG 非线性、单纯线性、演化方法,支持多变量与约束
统计两组数据统计、散点图、线性 / 指数 / 对数 / 多项式拟合、PDF 导出
分步多公式组合计算、公式代号引用、循环检测、方案保存、PDF 导出

公式库默认内置 200 条水泥行业常用公式,用户也可以导入自己的 .db 公式库,或用根目录的 Python 脚本在 Excel 与 Room 数据库之间互转。

数据库迁移的取舍

旧版 EF Core 数据库使用 Id / Name / ParentId 的 PascalCase 命名,时间格式与 Room 也不同。为了不丢掉历史公式库,做了两层兼容:

  • 数据库管理入口会自动检测并清理非 Room 的默认库;
  • 旧库导入时按需执行 PascalCase 到 Room 小写列的迁移;
  • 默认库缺失时,优先从 assets 复制内置公式库,再回退到精简种子数据。

迁移时的一个教训:Room 对 schema 校验非常严格,列名必须全小写、不能带 DEFAULT,否则启动就会报 invalid schema。数据转换脚本也因此反复对齐过。

发布要点

  • 包名 cn.formulamanager.formulamanager,minSdk 21,支持 Android 5.0+;
  • Release APK 已签名,可直接安装;
  • 应用不联网、不上传任何数据,规划 / 统计 / 分步方案统一存入本地 app_plans.db。

后续计划:更多行业公式包、统计增加假设检验、规划求解增加敏感度分析。欢迎下载试用并反馈。