1. 项目架构与核心依赖:模块划分、Gradle 依赖配置、最小 SDK 版本要求
1.1 模块化架构概览
本项目采用多模块 Android 工程结构,将蓝牙通信、数据缓存、网络上传和 UI 分离为独立 Gradle 模块。模块划分遵循“关注点分离”原则:bluetooth 模块只处理设备发现、连接和原始数据读写;data 模块负责离线缓存与数据清洗;network 模块封装 OkHttp 上传逻辑;app 模块作为宿主,绑定 UI 与业务调度。
设计意图:模块化可以单独替换蓝牙协议栈(如 BLE 经典蓝牙)或上传策略(如 MQTT 替换 OkHttp),不影响其他层。每个模块编译成 AAR,支持并行构建和独立测试。
1.2 模块职责表
| 模块名称 | Gradle 路径 | 核心职责 |
|---|---|---|
:bluetooth |
./modules/bluetooth/ |
蓝牙设备扫描、GATT 连接、特征值读写、原始 Byte 流采集 |
:data |
./modules/data/ |
离线 SQLite 缓存、数据校验、脱敏、队列管理与重试逻辑 |
:network |
./modules/network/ |
OkHttp 请求封装、 管理、多文件分片上传、网络状态监听 |
:app |
./app/ |
UI 层(Activity/Fragment)、ViewModel 调度、DI 注入、模块协调 |
依赖方向:
:app → :data → :bluetooth 和 :app → :data → :network。避免模块间循环依赖。:bluetooth 和 :network 不直接通信,所有数据统一经过 :data 模块中转。
1.3 模块架构流程图
下图展示了数据从蓝牙采集到云端上传的全链路模块协作关系:
1.4 核心 Gradle 依赖配置
以下为项目顶层 build.gradle.kts(或其他模块公共依赖)的关键片段。注意使用版本目录(libs.versions.toml)统一管理版本号。
// 顶层 build.gradle.kts(项目级)
plugins {
alias(libs.plugins.android.application) apply false
alias(libs.plugins.android.library) apply false
alias(libs.plugins.kotlin.android) apply false
alias(libs.plugins.kotlin.kapt) apply false
}
// modules/data/build.gradle.kts
plugins {
alias(libs.plugins.android.library)
alias(libs.plugins.kotlin.android)
}
android {
namespace = "com.example.data"
compileSdk = 34
defaultConfig {
minSdk = 26
targetSdk = 34
}
}
dependencies {
implementation(libs.androidx.core.ktx)
implementation(libs.androidx.room.runtime)
implementation(libs.androidx.room.ktx)
kapt(libs.androidx.room.compiler)
implementation(project(":bluetooth"))
}
// modules/network/build.gradle.kts 中的 OkHttp 相关
dependencies {
implementation(libs.squareup.okhttp3)
implementation(libs.squareup.okhttp3.logging.interceptor)
implementation(libs.squareup.okio)
implementation(libs.google.gson)
}
// modules/app/build.gradle.kts
dependencies {
implementation(project(":data"))
implementation(project(":bluetooth"))
implementation(project(":network"))
implementation(libs.androidx.lifecycle.viewmodel.ktx)
}
⚠ 版本陷阱:OkHttp 4.x 基于 Kotlin 协程(内部使用 Okio 3.x),与 RxJava 混用时注意添加
implementation("com.squareup.okhttp3:okhttp-sse:4.12.0") 避免同步回调冲突。建议统一使用 4.12.0 或更高版本。
1.5 最小 SDK 版本要求
项目设定 minSdk = 26(Android 8.0),理由如下:
- 蓝牙 BLE 稳定性:Android 8.0 修复了大量蓝牙扫描
SCAN_FAILED_INTERNAL_ERROR问题,且支持SCAN_RESULT_TRANSPORT_LE回调。 - OkHttp 最小要求:OkHttp 4.x 官方要求
minSdk 21,但libs.versions.toml中okio = "3.9.0"对minSdk 26以上有性能优化。 - Room 离线缓存:Room 2.6+ 使用 SQLite 3.x
FTS5等特性,minSdk 26可避免旧版本数据库兼容问题。 - HTTPS 与 TLS:Android 8.0 内置 System Trust Store 更新机制,减少
javax.net.ssl.SSLHandshakeException证书问题。
// 在 gradle/libs.versions.toml 中定义
[versions]
agp = "8.5.2"
kotlin = "1.9.22"
okhttp = "4.12.0"
okio = "3.9.0"
room = "2.6.1"
gson = "2.10.1"
[libraries]
squareup-okhttp3 = { group = "com.squareup.okhttp3", name = "okhttp", version.ref = "okhttp" }
squareup-okhttp3-logging-interceptor = { group = "com.squareup.okhttp3", name = "logging-interceptor", version.ref = "okhttp" }
squareup-okio = { group = "com.squareup.okio", name = "okio", version.ref = "okio" }