问题
- minSdk 24, 但只有 mipmap-*/ic_launcher.png (无 anydpi-v26)
- ic_launcher.png 与 ic_launcher_round.png MD5 完全相同, 圆形版只是方形副本
- API 26+ 用户在 OEM 圆形/水滴/方形启动器上图标会被硬切, 主体缺失
新增资源
- drawable/ic_launcher_background.xml: 矢量色块 #83D0F1 (原图四角采样 RGB 131,208,241)
- drawable/ic_launcher_foreground.xml: <mipmap> 引用密度分桶位图
- mipmap-anydpi-v26/ic_launcher.xml + ic_launcher_round.xml: adaptive-icon 定义
(含 <monochrome> 支持 Android 13+ 主题化图标)
- mipmap-{xhdpi,xxhdpi,xxxhdpi}/ic_launcher_foreground.webp:
从 app_icon_original.png (2048px) 中心裁 80% + cwebp -q 90 生成
体积比对应 ic_launcher.png 小 60-70% (xxhdpi: 7.4KB vs 22.5KB)
设计决策
- foreground 用位图而非矢量: 原图主体是写实风格, 矢量化会损失质量
- foreground 源图用 git 历史临时恢复生成, 不重新入库 (保持 Task 1 清理成果)
- 保留 mipmap-*/ic_launcher.png 作 API 24-25 回退 (不删)
- AndroidManifest.xml 无需改: @mipmap/ic_launcher 在 API 26+ 自动取 anydpi-v26
设备验证 (emulator API 37, Pixel Launcher)
- 安装 + 回桌面, hotseat 最右 YaYa 图标显示正常
- analyze_image 确认: 圆形遮罩下背景填满, 黄色主体居中无裁切
- 颜色与原设计一致 (主体 RGB~254,213,74, 背景 #83D0F1)
构建验证
- unzip -l 确认 APK 含 anydpi-v26/*.xml + drawable/ic_launcher_*.xml + 各密度 foreground.webp
- ./gradlew :app:assembleDebug → BUILD SUCCESSFUL
- APK 累计 -489KB (baseline 24,416,752 → 23,915,694, 主要是 Task 1 删 PNG)
YaYa
纯 Android + Jetpack Compose 日历应用,支持农历/节气/节日、个人班次排期,提供月/周/年三种视图。
特性
- 流畅的视图切换 —— 月视图、周视图、年视图三种模式,拖拽手势驱动月↔周折叠,弹簧动画自动吸附
- 无限滑动分页 —— 基于
Int.MAX_VALUE的虚拟分页,前后无边界翻页 - 完整中式日历 —— 公历 + 农历 + 二十四节气 + 传统节日,ISO 8601 周起始(周一)
- 个人排班周期 —— 自定义工作/休息循环,与公共节假日独立
- Material 3 设计 —— 动态配色,深色模式
技术栈
- Kotlin 2.3 · Jetpack Compose · Material 3
kotlinx-datetime处理所有日期逻辑tyme4kt提供农历、节气与传统节日sketch渲染 GIF 动画- 双模块:
:core(UI + 逻辑) ·:app(薄壳)
构建
# Debug
./gradlew :app:assembleDebug # 构建 debug APK
./gradlew :app:installDebug # 安装 debug APK 到设备
# Release
./gradlew :app:assembleRelease # 构建 release APK
./gradlew :app:installBenchmark # 安装 benchmark(release + 可调试)APK
# 测试
./gradlew :core:testDebugUnitTest # 运行全部测试
./gradlew :core:testDebugUnitTest --tests "plus.rua.project.ui.CalendarUtilsTest" # 运行单个测试
# Baseline Profile(需要连接设备)
./gradlew :macrobenchmark:updateBaselineProfile # 一键生成 + 自动复制到 :core
./gradlew :macrobenchmark:connectedBenchmarkAndroidTest # 仅运行基准测试
# 性能 Profiling(需要连接设备)
./scripts/profile.sh # 默认 8 秒
./scripts/profile.sh 15 # 自定义时长
构建产物位于 app/build/outputs/apk/<variant>/ 目录。
线条小狗表情包来自 https://www.douban.com/group/topic/264788645/?_i=9181692phrDzjR,9241256phrDzjR
Description
Languages
Kotlin
77.3%
Shell
18.7%
PowerShell
4%