技术

给开发者的一页

以下内容来自 APK 解包结果(AndroidManifest、resources.arsc、dex 字符串与 META-INF 依赖清单),面向开发者与对自己数据好奇的用户。

技术栈一览

Kotlin + Jetpack Compose

全部界面为 Compose 实现,无 XML 布局

75 个 AndroidX 组件

Material 3

各标签页独立主题色(代办玫红 / 物品蓝 / 课表青绿 / 管家天蓝 / 设置紫)

material3 + icons-extended

Room

Item / Todo / Course / Category / Transaction / ManagerMessage / ManagerMemory 七张表

AppDatabase v5

Hilt (Dagger)

依赖注入,WushiApp 为图根节点

hilt-android + navigation-compose

Navigation Compose

AppNav / Routes / BottomTab 单 Activity 导航

1 个 Activity

WorkManager

SyncWorker 与 ExpiryCheckWorker 的调度与约束

system-job 优先

Ktor Client

小管家对话、图像识别、同步接口共用一套客户端与 kotlinx.serialization

Okio/OkHttp 兜底

DataStore Preferences

提醒开关、AI 与同步配置、学期起始日等设备级偏好

datastore-preferences

Fredoka

随包附带的展示字体 res/font/fredoka.ttf

155 KB
实现

关键链路

单 Activity

MainActivity 承载全部界面,ComposableSingletons 与 hilt-navigation-compose 负责路由装配。

提醒链路

ReminderScheduler 排定精确闹钟 → ReminderReceiver 投递通知 → BootReceiver 开机重建 → ExpiryCheckWorker 兜底巡检。

AI 写回

ManagerEngine 组装「当前日期 + 当前概览 + 真实数据 + 自上次以来的变化」,解析回复尾部的动作指令行后落库。

周次引擎

TimetableUtil.currentWeek 以学期起始日推算周次;weekType(每周/单周/双周)与 skipWeeks(调课跳过列表)共同决定某节课当周是否显示。

同步边界

ApiClient 只搬运 DTO 快照;API 密钥与设备偏好永远留在本机 DataStore。

结构

包与类

com.lechiqy.wushiMainActivity · WushiApp(Hilt 图根)· AppNav / Routes / BottomTab · Theme
dataAppDatabase 与 7 张表:Item / Todo / Course / Category / Transaction / ManagerMessage / ManagerMemory,各自的 DAO 与 Repository,SettingsRepository(DataStore)
aiAiClient(chat/completions)· AiRecognizer(截图/拍照识别)· ImageEncoder · ItemDraft / TodoDraft / CourseDraft
reminderReminderScheduler · ReminderReceiver · BootReceiver · ExpiryCheckWorker · NotificationHelper
syncApiClient · AuthRequest / AuthResponse · SyncEngine / SyncWorker · 各实体 DTO
uiItemListScreen · ItemDetailScreen · ItemEditScreen · TodoListScreen · TodoEditScreen · TimetableScreen · CourseEditScreen · ManagerScreen · TransactionScreen · SettingsScreen
清单

完整权限声明

INTERNET

与小管家的大模型接口和你的同步服务器通信

ACCESS_NETWORK_STATE

断网时暂停同步与识别,避免白跑一次请求

POST_NOTIFICATIONS

发出临期、过期与代办提醒(Android 13+ 需授权)

SCHEDULE_EXACT_ALARM

把提醒钉在你指定的时间点,而不是模糊唤醒

RECEIVE_BOOT_COMPLETED

重启手机后重建所有已排定的提醒

WAKE_LOCK

提醒触发瞬间保持设备可投递通知

FOREGROUND_SERVICE

同步与临期巡检在后台稳定完成

CAMERA

拍照识别物品 / 课表,可选权限,拒绝后仍可从相册选图

DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION

应用私有的动态广播保护权限,由 AndroidX 自动加入

硬件特性

android.hardware.camera required=false —— 没有摄像头的设备照样可用,识别可走相册与截图

出处

本页信息来源

应用名 / 标语resources.arsc → string/app_name、string/slogan
版本与系统要求AndroidManifest.xml 的 versionName / uses-sdk
权限与组件AndroidManifest.xml 的 uses-permission / activity / receiver / service
界面文案dex 中的界面字符串(如「一物一候」「保质期提前提醒」)
模块划分dex 中 com/lechiqy/wushi/ 下的类描述符
界面截图应用真实运行画面(模拟器 1080×1920),演示数据