# MobileDAQ
**Repository Path**: bistu_liuning_admin_admin/MobileDAQ
## Basic Information
- **Project Name**: MobileDAQ
- **Description**: Android传感器记录器应用 - 支持摄像头预览、AI视频识别、加速度计、陀螺仪、地磁传感器、GPS定位等数据采集
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-02-25
- **Last Updated**: 2026-02-26
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Android 传感器记录器应用 - 编译调试文档
## 项目概述
**项目名称**: SensorRecorder (传感器记录器)
**开发语言**: Java
**目标平台**: Android 8.0+ (API 26)
**构建工具**: Gradle 8.2 + Android Gradle Plugin 8.2.0
### 功能特性
| 功能模块 | 描述 |
|---------|------|
| 摄像头预览 | 使用CameraX实现后置摄像头实时预览 |
| **AI视频识别** | **实时识别视频流中的物体、道路信息并标注** |
| 加速度计 | 测量设备三轴加速度 (m/s²) |
| 陀螺仪 | 测量设备三轴角速度 (rad/s) |
| 地磁传感器 | 测量设备三轴磁场强度 (µT) |
| 设备姿态 | 方位角、俯仰角、滚转角 |
| GPS定位 | 经度、纬度、海拔、速度、方向 |
| 卫星信息 | 可见卫星数、已定位卫星数、信噪比等 |
| 数据存储 | SQLite数据库 + CSV文件导出 |
---
## 项目结构
```
MobileDAQ/
├── app/
│ ├── build.gradle # 应用级构建配置
│ ├── proguard-rules.pro # 混淆规则
│ └── src/main/
│ ├── AndroidManifest.xml # 应用清单
│ ├── java/com/example/sensorrecorder/
│ │ ├── MainActivity.java # 主界面Activity
│ │ ├── SensorRecorderApp.java # Application类
│ │ ├── camera/
│ │ │ └── CameraManager.java # 摄像头管理
│ │ ├── sensor/
│ │ │ └── SensorDataManager.java # 传感器管理
│ │ ├── location/
│ │ │ └── GnssDataManager.java # GPS/卫星管理
│ │ ├── storage/
│ │ │ └── DataStorageManager.java # 数据存储
│ │ └── detection/ # **新增:AI检测模块**
│ │ ├── ObjectDetectionManager.java # 物体检测管理
│ │ ├── DetectionOverlayView.java # 检测框绘制视图
│ │ └── RoadDetector.java # 道路分析引擎
│ └── res/
│ ├── layout/activity_main.xml # 主界面布局
│ ├── values/strings.xml # 字符串资源
│ └── values/themes.xml # 主题样式
├── build.gradle # 项目级构建配置
├── settings.gradle # 项目设置
├── gradle.properties # Gradle属性配置
├── local.properties # 本地SDK配置
└── gradle/wrapper/
├── gradle-wrapper.jar # Gradle Wrapper JAR
└── gradle-wrapper.properties # Wrapper配置
```
---
## 编译调试过程
### 问题1: BOM字符导致Gradle编译失败
#### 错误信息
```
Could not compile settings file 'E:\Test\MobielSource\settings.gradle'.
> startup failed:
settings file 'E:\Test\MobielSource\settings.gradle': 1: Unexpected character: '' @ line 1, column 1.
pluginManagement {
^
```
#### 原因分析
Gradle配置文件(settings.gradle, build.gradle等)被写入时带有UTF-8 BOM(Byte Order Mark)字符,导致Gradle解析器无法识别。
#### 解决方案
使用PowerShell以UTF-8无BOM格式重新写入文件:
```powershell
$content = @"
pluginManagement {
repositories {
google()
mavenCentral()
gradlePluginPortal()
}
}
...
"@
$utf8NoBom = New-Object System.Text.UTF8Encoding $false
[System.IO.File]::WriteAllText("e:\Test\MobielSource\settings.gradle", $content, $utf8NoBom)
```
#### 验证方法
```powershell
$bytes = [System.IO.File]::ReadAllBytes("settings.gradle")
# BOM字节为: 239, 187, 191
# 如果前三个字节不是这些值,则文件无BOM
Write-Host "First 3 bytes: $($bytes[0]) $($bytes[1]) $($bytes[2])"
```
---
### 问题2: Gradle Wrapper JAR缺失
#### 错误信息
```
Error: Could not find or load main class org.gradle.wrapper.GradleWrapperMain
Caused by: java.lang.ClassNotFoundException: org.gradle.wrapper.GradleWrapperMain
```
#### 原因分析
项目中缺少 `gradle-wrapper.jar` 文件,导致无法启动Gradle Wrapper。
#### 解决方案
从Gradle官方仓库下载wrapper JAR:
```powershell
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/gradle/gradle/v8.2.0/gradle/wrapper/gradle-wrapper.jar" -OutFile "gradle\wrapper\gradle-wrapper.jar"
```
---
### 问题3: AndroidX配置缺失
#### 错误信息
```
Execution failed for task ':app:checkDebugAarMetadata'.
> Configuration `:app:debugRuntimeClasspath` contains AndroidX dependencies,
but the `android.useAndroidX` property is not enabled
```
#### 原因分析
项目使用了AndroidX库,但未在 `gradle.properties` 中启用AndroidX支持。
#### 解决方案
创建 `gradle.properties` 文件并添加以下配置:
```properties
android.useAndroidX=true
android.enableJetifier=true
org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
android.nonTransitiveRClass=false
```
**配置说明**:
- `android.useAndroidX=true`: 启用AndroidX支持
- `android.enableJetifier=true`: 自动将第三方库的Support库依赖转换为AndroidX
- `org.gradle.jvmargs`: 设置JVM内存参数
---
### 问题4: JAVA_HOME未配置
#### 错误信息
```
ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the location of your Java installation.
```
#### 原因分析
系统未配置JAVA_HOME环境变量,Gradle无法找到Java运行时。
#### 解决方案
使用Android Studio内置的JBR (JetBrains Runtime):
```powershell
$env:JAVA_HOME = 'C:\Program Files\Android\Android Studio\jbr'
```
---
### 问题5: Android SDK路径未配置
#### 错误信息
```
SDK location not found. Define a valid SDK location with an ANDROID_HOME environment variable
or by setting the sdk.dir path in your project's local properties file at '...\local.properties'.
```
#### 原因分析
Gradle无法找到Android SDK位置。
#### 解决方案
创建 `local.properties` 文件:
```properties
sdk.dir=C:\\Users\\liuni\\AppData\\Local\\Android\\Sdk
```
---
## 构建脚本
### 完整编译命令 (PowerShell)
```powershell
# 设置Java环境
$env:JAVA_HOME = 'C:\Program Files\Android\Android Studio\jbr'
# 进入项目目录
cd D:\WorkProject\SoftSources_01_20260225\MobileDAQ
# 执行编译
.\gradlew.bat assembleDebug
```
### 环境要求
| 工具 | 版本/路径 |
|-----|----------|
| JDK | Android Studio 内置 JBR (OpenJDK 21) |
| Android SDK | C:\Users\{用户名}\AppData\Local\Android\Sdk |
| Gradle | 8.2 (通过Wrapper) |
| Android Gradle Plugin | 8.2.0 |
---
## 构建结果
### 成功输出
```
> Task :app:stripDebugDebugSymbols
Unable to strip the following libraries, packaging them as they are: libimage_processing_util_jni.so, libmlkitcommonpipeline.so.
> Task :app:compileDebugJavaWithJavac
warning: [options] source value 8 is obsolete and will be removed in a future release
warning: [options] target value 8 is obsolete and will be removed in a future release
warning: [options] To suppress warnings about obsolete options, use -Xlint:-options.
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
3 warnings
BUILD SUCCESSFUL in 51s
30 actionable tasks: 30 executed
```
### 生成文件
| 文件 | 路径 | 大小 |
|-----|------|------|
| APK | app/build/outputs/apk/debug/app-debug.apk | ~51 MB |
---
## 依赖库清单
```groovy
dependencies {
// AndroidX核心库
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.11.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
// CameraX摄像头库
implementation 'androidx.camera:camera-core:1.3.1'
implementation 'androidx.camera:camera-camera2:1.3.1'
implementation 'androidx.camera:camera-lifecycle:1.3.1'
implementation 'androidx.camera:camera-view:1.3.1'
// Google Play Services定位服务
implementation 'com.google.android.gms:play-services-location:21.0.1'
// ML Kit物体检测 (新增)
implementation 'com.google.mlkit:object-detection:17.0.2'
implementation 'com.google.mlkit:object-detection-custom:17.0.2'
// 测试库
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.5'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
}
```
---
## AI视频识别功能 (新增)
### 功能概述
实时处理手机摄像头拍摄的视频数据,识别视频流中的道路信息、物体等信息,并进行标注。
### 核心组件
| 文件 | 功能 |
|------|------|
| ObjectDetectionManager.java | 使用ML Kit进行实时物体检测,支持多物体识别和跟踪 |
| DetectionOverlayView.java | 自定义视图,在摄像头预览上绘制检测框和标注 |
| RoadDetector.java | 道路分析引擎,分析道路状态和危险等级 |
### 检测功能
**物体检测**:
- 实时检测视频流中的物体(车辆、行人、交通标志等)
- 显示物体类别和置信度百分比
- 绘制带颜色的检测框(绿色=高置信度,橙色=中等,红色=低)
**道路分析**:
- 道路状态评估:畅通/正常/需注意/危险/拥堵
- 危险等级计算(0-100%)
- 车道偏移检测
- 前方车辆接近预警
### 使用方式
1. 打开应用后点击"**开启AI检测**"按钮
2. 将摄像头对准道路场景
3. 实时查看检测到的物体和道路状态分析
---
## 权限配置
### AndroidManifest.xml
```xml
```
---
## 安装与使用
### 安装方法
**方法1: ADB安装**
```bash
adb install app/build/outputs/apk/debug/app-debug.apk
```
**方法2: 直接安装**
将APK文件传输到手机,点击安装。
### 使用步骤
1. 启动应用后,授予以下权限:
- 相机权限
- 位置权限
- 传感器权限
2. 界面显示:
- 顶部:摄像头实时预览(带AI检测标注)
- 中部:录制控制按钮 + AI检测开关
- 底部:传感器数据面板
3. 点击"开启AI检测"启用实时物体识别
4. 点击"开始录制"按钮开始记录数据
5. 点击"停止录制"按钮保存数据
### 数据输出
CSV文件存储路径:
```
/Android/data/com.example.sensorrecorder/files/sensor_data_YYYYMMDD_HHMMSS.csv
```
CSV数据格式:
| 字段 | 说明 |
|------|------|
| timestamp | 时间戳 |
| acc_x/y/z | 加速度计三轴数据 |
| gyro_x/y/z | 陀螺仪三轴数据 |
| mag_x/y/z | 地磁传感器三轴数据 |
| orientation_azimuth/pitch/roll | 姿态角 |
| latitude/longitude | 经纬度 |
| altitude | 海拔 |
| accuracy/speed/bearing | GPS精度/速度/方向 |
| satellite_count/satellites_used | 卫星数量 |
---
## 问题排查总结
| 问题 | 症状 | 解决方法 |
|------|------|----------|
| BOM字符 | Gradle编译失败 | 使用UTF-8无BOM编码重写文件 |
| Wrapper缺失 | ClassNotFoundException | 下载gradle-wrapper.jar |
| AndroidX未启用 | 构建配置错误 | 添加gradle.properties配置 |
| Java未配置 | java命令不存在 | 使用Android Studio内置JBR |
| SDK未配置 | SDK location not found | 创建local.properties文件 |
---
## 附录
### 构建命令参考
```bash
# 清理构建
gradlew clean
# 调试版APK
gradlew assembleDebug
# 发布版APK
gradlew assembleRelease
# 安装到设备
gradlew installDebug
# 运行测试
gradlew test
```
### 文档版本
- **创建日期**: 2026年2月24日
- **更新日期**: 2026年2月25日
- **Gradle版本**: 8.2
- **Android Gradle Plugin**: 8.2.0
- **目标SDK**: 34 (Android 14)
---
## 版本记录
### v1.2.0 (2026-02-25)
**新增功能:**
- 🎯 **AI视频实时识别功能**
- 使用ML Kit进行物体检测
- 支持车辆、行人、交通标志识别
- 道路状态分析(畅通/正常/需注意/危险/拥堵)
- 危险等级评估(0-100%)
- 实时检测框标注
**新增文件:**
- `detection/ObjectDetectionManager.java` - 物体检测管理器
- `detection/DetectionOverlayView.java` - 检测框绘制视图
- `detection/RoadDetector.java` - 道路分析引擎
**新增依赖:**
- `com.google.mlkit:object-detection:17.0.2`
- `com.google.mlkit:object-detection-custom:17.0.2`
**UI更新:**
- 新增"开启AI检测"按钮
- 检测结果面板显示道路状态和危险等级
- 摄像头预览叠加检测框标注
### v1.1.0 (2026-02-25)
**新增功能:**
- 新增地磁传感器 (Magnetometer) 数据采集功能
- 界面新增地磁传感器数据卡片显示
- CSV导出新增地磁三轴数据字段 (mag_x, mag_y, mag_z)
- 数据库schema升级至版本2,支持地磁数据存储
**技术改进:**
- SensorDataManager新增地磁传感器回调和精度显示
- DataStorageManager支持地磁数据持久化
### v1.0.0 (2026-02-24)
**初始版本功能:**
- 摄像头实时预览 (CameraX)
- 加速度计数据采集
- 陀螺仪数据采集
- 设备姿态计算 (方位角、俯仰角、滚转角)
- GPS定位数据采集
- GNSS卫星信息显示
- SQLite数据库存储
- CSV文件导出
- 深色主题UI