# 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