给开发者的一页
以下内容来自 APK 解包结果(AndroidManifest、resources.arsc、dex 字符串与 META-INF 依赖清单),面向开发者与对自己数据好奇的用户。
技术栈一览
Kotlin + Jetpack Compose
全部界面为 Compose 实现,无 XML 布局
Material 3
各标签页独立主题色(代办玫红 / 物品蓝 / 课表青绿 / 管家天蓝 / 设置紫)
Room
Item / Todo / Course / Category / Transaction / ManagerMessage / ManagerMemory 七张表
Hilt (Dagger)
依赖注入,WushiApp 为图根节点
Navigation Compose
AppNav / Routes / BottomTab 单 Activity 导航
WorkManager
SyncWorker 与 ExpiryCheckWorker 的调度与约束
Ktor Client
小管家对话、图像识别、同步接口共用一套客户端与 kotlinx.serialization
DataStore Preferences
提醒开关、AI 与同步配置、学期起始日等设备级偏好
Fredoka
随包附带的展示字体 res/font/fredoka.ttf
关键链路
单 Activity
MainActivity 承载全部界面,ComposableSingletons 与 hilt-navigation-compose 负责路由装配。
提醒链路
ReminderScheduler 排定精确闹钟 → ReminderReceiver 投递通知 → BootReceiver 开机重建 → ExpiryCheckWorker 兜底巡检。
AI 写回
ManagerEngine 组装「当前日期 + 当前概览 + 真实数据 + 自上次以来的变化」,解析回复尾部的动作指令行后落库。
周次引擎
TimetableUtil.currentWeek 以学期起始日推算周次;weekType(每周/单周/双周)与 skipWeeks(调课跳过列表)共同决定某节课当周是否显示。
同步边界
ApiClient 只搬运 DTO 快照;API 密钥与设备偏好永远留在本机 DataStore。
包与类
com.lechiqy.wushi | MainActivity · WushiApp(Hilt 图根)· AppNav / Routes / BottomTab · Theme |
|---|---|
data | AppDatabase 与 7 张表:Item / Todo / Course / Category / Transaction / ManagerMessage / ManagerMemory,各自的 DAO 与 Repository,SettingsRepository(DataStore) |
ai | AiClient(chat/completions)· AiRecognizer(截图/拍照识别)· ImageEncoder · ItemDraft / TodoDraft / CourseDraft |
reminder | ReminderScheduler · ReminderReceiver · BootReceiver · ExpiryCheckWorker · NotificationHelper |
sync | ApiClient · AuthRequest / AuthResponse · SyncEngine / SyncWorker · 各实体 DTO |
ui | ItemListScreen · 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),演示数据 |