# AndroidTest **Repository Path**: zypdominate/android-test ## Basic Information - **Project Name**: AndroidTest - **Description**: Android Snippet APK,基于 Mobly 自动化测试框架,通过 ADB 以 @Rpc 方式暴露 音频、Wi-Fi、蓝牙、电话等系统 API,并实现让 Python 调用。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-04-01 - **Last Updated**: 2026-05-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: Java, Android, mobly ## README # AndroidTest 基于 [Mobly Snippet Lib](https://github.com/google/mobly-snippet-lib)(设备端 Android 库)与 [Mobly](https://github.com/google/mobly)(主机端 Python 测试框架)的 Android 设备端测试桩工程:在真机/模拟器上安装本应用后,由主机端 Python(Mobly + pytest)通过 JSON-RPC 调用各 Snippet 中的 `@Rpc` 方法,用于自动化测试网络、蓝牙、电话、媒体等系统能力。 ## 工程结构 | 路径 | 说明 | |------|------| | `app/` | Android 应用模块,产出可安装的 Snippet APK(`androidtest-debug.apk`) | | `app/src/main/java/com/example/androidtest/` | 各 `*Snippet.java` 实现 | | `tests/` | 主机端 pytest 用例与 `conftest.py`(加载 snippet `androidtest`) | ## 环境要求 - **Android 构建**:JDK 11、Android SDK(`compileSdk` / `targetSdk` 34,见 `app/build.gradle`) - **设备**:`minSdk` 26,已开启 USB 调试并授权本机 - **主机端测试**:Python 3,需安装 Mobly 与 pytest,例如: ```bash pip install mobly pytest ``` ## 构建与安装 在项目根目录执行: ```bash # Windows # style1: builds only the debug version of the app module .\gradlew.bat :app:assembleDebug # style2:wipes the previous build data (clean), # then builds the debug version for the entire project (or the default modules) .\gradlew.bat clean assembleDebug # Linux / macOS ./gradlew :app:assembleDebug ``` 生成的调试 APK 位于: `app/build/outputs/apk/debug/androidtest-debug.apk` 安装到设备: ```bash adb install -r app/build/outputs/apk/debug/androidtest-debug.apk ``` 应用包名:`com.example.androidtest`。Snippet 在运行时由 Mobly 按包名加载(见 `tests/conftest.py` 中的 `load_snippet('androidtest', package='com.example.androidtest')`)。 ## 运行主机端测试 在连接至少一台设备的前提下,于 `tests` 目录执行: ```bash cd tests pytest -q ``` `conftest.py` 使用 `android_device.create('*')` 绑定第一台可用设备;若需固定序列号,可改为 `android_device.create(['YOUR_SERIAL'])`。 未连接设备时,用例会跳过(“没有找到可用的 Android 设备”)。 ## 已注册的 Snippet 类 在 `AndroidManifest.xml` 的 `mobly-snippets` 元数据中注册,主要包括: - **账户 / 联系人**:`AccountSnippet`、`ContactSnippet` - **音频 / 媒体 / 通知 / 日志**:`AudioSnippet`、`MediaSnippet`、`NotificationSnippet`、`LogSnippet` - **电话 / 短信**:`TelephonySnippet`、`SmsSnippet` - **网络 / 文件 / 存储 / 工具**:`NetworkingSnippet`、`FileSnippet`、`StorageSnippet`、`UtilitySnippet` - **Wi‑Fi**:`WifiManagerSnippet`、`WifiAwareManagerSnippet` - **蓝牙**:`BluetoothAdapterSnippet`、`BluetoothGattClientSnippet`、`BluetoothGattServerSnippet`、`BluetoothLeAdvertiserSnippet`、`BluetoothLeScannerSnippet` 及 A2DP / HFP / HA / LE Audio 等 profile Snippet 新增 Snippet 时需在上述 meta-data 中追加完整类名,并重新编译安装 APK。 ## 权限说明 `AndroidManifest.xml` 中声明了电话、短信、蓝牙、位置、存储等大量权限。**危险权限**在 Android 6+ 上通常需要用户在系统设置中授予,或通过 `adb` 调试授予,例如: ```bash adb shell pm grant com.example.androidtest android.permission.READ_PHONE_STATE ``` 部分权限为签名/特权级别,仅在特定系统镜像或调试环境下可用;若 RPC 抛出 `SecurityException`,Mobly 会将其作为错误返回,测试侧可 `skip` 或先处理授权。 ## 依赖版本 | 组件 | 版本(见 `app/build.gradle`) | |------|-------------------------------| | Android Gradle Plugin | 8.5.2 | | mobly-snippet-lib | 1.4.0 | | compileSdk / targetSdk | 34 | ## 参考链接 - [Mobly](https://github.com/google/mobly) - [mobly-bundled-snippets](https://github.com/google/mobly-bundled-snippets) - [Android 开发者文档](https://developer.android.com/) - [Mobly 测试框架官方文档](https://source.android.com/docs/core/tests/mobly) - [Mobly 测试框架(中文)| Android Open Source Project](https://source.android.google.cn/docs/core/tests/mobly?hl=zh-cn)