# 知风雨
**Repository Path**: ljj2987145363/weaknow
## Basic Information
- **Project Name**: 知风雨
- **Description**: No description available
- **Primary Language**: Kotlin
- **License**: GPL-3.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-11-28
- **Last Updated**: 2026-09-04
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 知风雨 | WeaKnow




**一款简洁优雅的Android天气应用**
[功能特性](#功能特性) • [技术栈](#技术栈) • [快速开始](#快速开始) • [架构设计](#架构设计) • [贡献指南](#贡献指南)
---
## 📖 项目简介
知风雨(WeaKnow)是一款专注于提供准确、及时天气信息服务的Android应用。通过"本地化数据 + 多源API + 智能后台同步"的组合,为用户提供实时天气、逐小时/多日预报、空气质量与生活指数等一站式天气体验。
### 设计理念
- **准确与及时**: 基于高德地图定位与和风天气API,结合本地数据库缓存与周期性后台同步,确保数据新鲜度与稳定性
- **多地点管理**: 支持添加、切换、删除多个城市或地点,满足跨城出行、关注家乡等多样化需求
- **视觉与交互**: 采用Material Design 3主题与Lottie动态背景,依据天气类型自动切换背景动画,增强用户体验
---
## ✨ 功能特性
### 核心功能
- 🌡️ **实时天气信息** - 当前温度、体感温度、天气现象、风向风力等实时数据
- ⏰ **逐小时天气预报** - 未来6-24小时天气趋势,温度曲线可视化展示
- 📅 **未来天气预报** - 7-15天天气预测,包含最高/最低温、降水概率、湿度等详细指标
- 🌬️ **空气质量监测** - AQI指数、主要污染物浓度、空气质量等级可视化
- 📊 **生活指数提醒** - 穿衣、洗车、紫外线、运动等多维度生活建议
- 📍 **多地点管理** - 支持添加、切换、删除多个城市,快速查看不同地区天气
- ⚠️ **天气预警通知** - 实时推送气象灾害预警信息
- 🎨 **智能背景动画** - 根据天气类型自动切换Lottie动态背景
### 技术亮点
- 🔄 **智能后台同步** - 四级同步策略(实时/短时/中时/长时),平衡数据新鲜度与电量消耗
- 💾 **离线可用** - Room本地缓存,弱网或无网环境下仍可查看历史数据
- 🎯 **Material Design 3** - 遵循最新设计规范,支持动态色彩与深色模式
- ⚡ **协程并发** - 多接口并发请求,提升数据同步效率
- 🏗️ **MVVM架构** - 清晰的分层设计,易于维护与扩展
---
## 🛠️ 技术栈
### 核心技术
| 技术 | 说明 |
|-----------------------|----------|
| **Kotlin** | 主要开发语言 |
| **Jetpack Compose** | 现代化UI工具包 |
| **Material Design 3** | UI设计规范 |
| **MVVM** | 架构模式 |
| **Room** | 本地数据库 |
| **Retrofit + OkHttp** | 网络请求 |
| **WorkManager** | 后台任务调度 |
| **Koin** | 依赖注入 |
| **Coroutines + Flow** | 异步编程 |
| **Lottie** | 动画渲染 |
### 第三方服务
- **和风天气API** - 天气数据源
- **高德地图API** - 定位与地理编码服务
---
## 🚀 快速开始
### 环境要求
- Android Studio Arctic Fox 或更高版本
- JDK 17+
- Android SDK 35
- Gradle 8.10.2
### 克隆项目
```bash
git clone https://gitee.com/ljj2987145363/weaknow.git
cd weaknow
```
### 配置API密钥
1. 在项目根目录创建 `local.properties` 文件
2. 添加以下配置:
```properties
# 和风天气API密钥
QWEATHER_WEB_API_KEY=your_qweather_api_key
# 高德地图API密钥
AMAP_WEB_API_KEY=your_amap_api_key
AMAP_ANDROID_API_KEY=your_amap_android_key
# 应用签名SHA1
CERT_SHA1=your_cert_sha1
```
### 构建运行
1. 使用Android Studio打开项目
2. 等待Gradle同步完成
3. 连接Android设备或启动模拟器
4. 点击运行按钮
---
## 🏗️ 架构设计
### 分层架构
```
┌─────────────────────────────────────┐
│ UI Layer │
│ (Compose UI, Activity, Screen) │
└─────────────────┬───────────────────┘
│
┌─────────────────▼───────────────────┐
│ ViewModel Layer │
│ (State Management, Logic) │
└─────────────────┬───────────────────┘
│
┌─────────────────▼───────────────────┐
│ Repository Layer │
│ (Data Coordination, Cache) │
└─────┬───────────────────────┬───────┘
│ │
┌─────▼────────┐ ┌──────▼───────┐
│ Remote API │ │ Local Database│
│ (Retrofit) │ │ (Room) │
└──────────────┘ └──────────────┘
```
### 核心模块
#### 数据层
- **Repository**: 封装数据访问逻辑,协调远程API与本地数据库
- **DAO**: Room数据访问对象,定义数据库操作
- **Entity**: 数据库实体模型
- **API Client**: Retrofit服务接口,封装网络请求
#### 业务层
- **ViewModel**: 管理UI状态,处理业务逻辑
- **Worker**: 后台同步任务,保障数据新鲜度
- **UseCase**: 业务用例封装(如有)
#### 表现层
- **Activity**: 应用入口,权限管理,导航控制
- **Screen**: Compose页面组件
- **Component**: 可复用UI组件
- **Theme**: 主题与样式定义
### 后台同步策略
| 同步类型 | 频率 | 数据内容 |
|------|------|------------|
| 实时同步 | 15分钟 | 实时天气、预警信息 |
| 短时同步 | 30分钟 | 逐小时预报、空气质量 |
| 中时同步 | 1小时 | 多日预报 |
| 长时同步 | 6小时 | 天气指数 |
---
## 📱 应用截图
> 注: 实际截图请根据应用界面补充
---
## 📂 项目结构
```
app/src/main/
├── kotlin/me/ljj/weaknow/
│ ├── application/ # Application类
│ ├── ui/ # UI层
│ │ ├── activity/ # Activity
│ │ ├── screen/ # 页面组件
│ │ ├── component/ # 可复用组件
│ │ ├── layout/ # 布局组件
│ │ ├── dialog/ # 对话框
│ │ └── theme/ # 主题样式
│ ├── viewmodel/ # ViewModel
│ ├── data/ # 数据层
│ │ ├── remote/ # 远程数据
│ │ │ ├── api/ # API接口
│ │ │ └── client/ # API客户端
│ │ ├── local/ # 本地数据
│ │ │ ├── database/ # 数据库
│ │ │ ├── dao/ # DAO
│ │ │ └── entity/ # 实体
│ │ └── repository/ # 仓库
│ ├── domain/ # 领域层
│ │ ├── model/ # 业务模型
│ │ └── response/ # API响应模型
│ └── core/ # 核心工具
│ ├── constant/ # 常量
│ ├── util/ # 工具类
│ ├── extension/ # 扩展函数
│ ├── config/ # 配置
│ └── interfaze/ # 接口定义
├── res/ # 资源文件
└── assets/ # 静态资源
└── ic_qweather/ # 天气图标
```
---
## 🔧 开发指南
### 代码规范
- 遵循Kotlin官方编码规范
- 使用KDoc编写文档注释
- 遵循MVVM架构分层原则
- Compose UI组件采用函数式编程风格
### 提交规范
```
feat: 新功能
fix: 修复bug
docs: 文档更新
style: 代码格式调整
refactor: 重构
test: 测试相关
chore: 构建/工具相关
```
---
## 🧪 测试
### 运行单元测试
```bash
./gradlew test
```
### 运行UI测试
```bash
./gradlew connectedAndroidTest
```
---
## 📄 许可证
本项目采用 [GNU General Public License v3.0](LICENSE) 许可证。
```
Copyright (C) 2024 吕钜进
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
```
---
## 👨💻 作者
**吕钜进**
- Gitee: [@ljj2987145363](https://gitee.com/ljj2987145363)
---
## 🤝 贡献指南
欢迎提交Issue和Pull Request!
1. Fork本仓库
2. 创建特性分支 (`git checkout -b feature/AmazingFeature`)
3. 提交更改 (`git commit -m 'feat: Add some AmazingFeature'`)
4. 推送到分支 (`git push origin feature/AmazingFeature`)
5. 提交Pull Request
---
## 📮 联系方式
如有问题或建议,欢迎通过以下方式联系:
- 提交Issue: [Gitee Issues](https://gitee.com/ljj2987145363/weaknow/issues)
- 项目主页: [https://gitee.com/ljj2987145363/weaknow](https://gitee.com/ljj2987145363/weaknow)
---
## 🙏 致谢
- [和风天气](https://www.qweather.com/) - 提供天气数据API
- [高德地图](https://lbs.amap.com/) - 提供定位与地理编码服务
- [Material Design](https://m3.material.io/) - UI设计规范
- [Jetpack Compose](https://developer.android.com/jetpack/compose) - 现代化UI工具包
---
**⭐ 如果这个项目对你有帮助,请给一个Star支持一下! ⭐**
Made with ❤️ by 吕钜进