{"id":50876495,"url":"https://github.com/marsxuefeng/task-android-automator","last_synced_at":"2026-06-15T10:02:38.439Z","repository":{"id":105286240,"uuid":"186541706","full_name":"marsxuefeng/task-android-automator","owner":"marsxuefeng","description":"Android Automator 是一个功能强大且灵活的基于 Java 的框架，专门设计用于自动化 Android 设备上的任务并从各种移动应用程序中收集数据。","archived":false,"fork":false,"pushed_at":"2025-07-12T13:47:30.000Z","size":8647,"stargazers_count":5,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-02-05T11:47:47.880Z","etag":null,"topics":["appium-android","java"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/marsxuefeng.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2019-05-14T03:58:40.000Z","updated_at":"2025-07-12T13:48:35.000Z","dependencies_parsed_at":"2023-05-22T08:00:32.888Z","dependency_job_id":null,"html_url":"https://github.com/marsxuefeng/task-android-automator","commit_stats":null,"previous_names":["marsxuefeng/task-android-automator"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/marsxuefeng/task-android-automator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marsxuefeng%2Ftask-android-automator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marsxuefeng%2Ftask-android-automator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marsxuefeng%2Ftask-android-automator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marsxuefeng%2Ftask-android-automator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/marsxuefeng","download_url":"https://codeload.github.com/marsxuefeng/task-android-automator/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marsxuefeng%2Ftask-android-automator/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34357282,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-15T02:00:07.085Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["appium-android","java"],"created_at":"2026-06-15T10:02:37.509Z","updated_at":"2026-06-15T10:02:38.418Z","avatar_url":"https://github.com/marsxuefeng.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"---\n\n## 中文\n\n### 简介\n\nAndroid Automator 是一个功能强大且灵活的基于 Java 的框架，专门设计用于自动化 Android 设备上的任务并从各种移动应用程序中收集数据。它利用 Appium 进行 UI 交互，ADB 进行设备控制，并集成了 OCR 和网络流量拦截等高级功能，以实现全面的数据提取。虽然它可以扩展到任何 Android 应用程序，但其主要焦点和最完善的功能都集中在自动化微信任务上。\n\n### 核心特性\n\n* **多设备管理：** 高效并发管理多台 Android 设备（物理设备或 Genymotion 等模拟器）。\n* **并发任务执行：** 使用健壮的线程池和回调机制，支持在不同设备和账户之间并行执行自动化任务。\n* **账户生命周期管理：** 提供全面的应用程序账户管理，包括登录、状态跟踪（正常、异常、冻结）和无缝的账户切换。\n* **应用程序特定适配器：**\n    * **微信适配器：** 为微信自动化高度开发，支持公众号搜索、关注/取关、历史文章抓取、实时消息监控、联系人管理和群聊创建等任务。\n    * **通讯录适配器：** 用于自动化与原生 Android 通讯录应用的交互（添加、删除、清空联系人）。\n    * **钉钉适配器：** 钉钉联系人管理的基本功能。\n* **高级数据提取：**\n    * **OCR 集成：** 利用 OCR 服务（如百度 OCR）从截图中提取文本，这对于处理动态或基于图像的 UI 元素至关重要。\n    * **代理拦截：** 使用 BrowserMob Proxy 拦截和分析网络请求及响应，允许直接从 API 调用中提取数据。\n* **RESTful API 外部控制：** 暴露了一个 Web API（使用 Spark 框架），用于提交任务、监控设备状态、管理账户以及获取操作概览。\n* **数据持久化：** 集成 ORMLite 进行对象关系映射，将收集到的数据（如微信消息、联系人、文章、任务日志）持久化到 MySQL 数据库中。\n* **分布式任务管理：** 利用 Redisson (Redis 客户端) 进行分布式队列和主题管理，用于任务提交和实时消息处理。\n\n### 架构概览\n\n该框架采用分层架构，以确保模块化和可扩展性：\n\n* **设备层：** `AndroidDevice` 和 `AndroidDeviceManager` 管理物理或虚拟 Android 设备，包括 Appium 驱动生命周期、ADB 交互和设备状态管理。\n* **适配器层：** 抽象的 `Adapter` 类及其具体实现（例如 `WeChatAdapter`、`ContactsAdapter`）封装了特定于应用程序的自动化逻辑。每个适配器都与一个 `Account` 和 `AppInfo` 相关联。\n* **任务层：** 抽象的 `Task` 类及其子类定义了具体的自动化工作流（例如 `GetMediaEssaysTask`）。任务通过 `TaskHolder` 对象启动，并由设备特定的执行器执行。\n* **工具层：** 提供数据库操作、图像处理、Shell 命令和各种通用帮助程序的常用功能。\n* **API 层：** 用于与核心自动化逻辑交互的外部接口。\n\n\u003c!-- end list --\u003e\n\n```mermaid\ngraph TD\n    A[外部系统] --\u003e B[RESTful API 服务器];\n    B --\u003e C{AndroidDeviceManager};\n    C --\u003e D[Android设备 1];\n    C --\u003e E[Android设备 2];\n    D --\u003e D1[\"适配器 A (例如 WeChatAdapter)\"];\n    D --\u003e D2[\"适配器 B (例如 ContactsAdapter)\"];\n    E --\u003e E1[适配器 C];\n    D1 --\u003e F{任务队列};\n    E1 --\u003e G{任务队列};\n    F --\u003e H[\"任务 1 (例如 GetMediaEssaysTask)\"];\n    G --\u003e I[任务 2];\n    H --\u003e J[Appium 驱动];\n    I --\u003e K[Appium 驱动];\n    J --\u003e L[Android 设备 UI/应用];\n    K --\u003e M[Android 设备 UI/应用];\n    L --\u003e N[\"捕获数据 (截图, 网络)\"];\n    N --\u003e O[OCR 客户端];\n    N --\u003e P[BrowserMob 代理];\n    O --\u003e Q[\"数据库 (MySQL)\"];\n    P --\u003e Q;\n    H --\u003e Q;\n    I --\u003e Q;\n    Q --\u003e R[ORMlite];\n    C --\u003e S[\"Redis (Redisson)\"];\n    S --\u003e T[任务分发 / 发布-订阅];\n```\n\n### 设置与安装\n\n#### 前提条件\n\n* **Java 开发工具包 (JDK) 8 或更高版本：** 确保已设置 `JAVA_HOME`。\n* **Android SDK：** 并在系统 PATH 中配置了 `platform-tools` (ADB)。\n* **Node.js 和 npm：** Appium 所需。\n* **Appium Server：** 通过 npm 全局安装：`npm install -g appium`。\n* **Appium Java Client：** 由 Gradle 依赖管理。\n* **Redis Server：** 运行中的实例，用于任务队列和消息传递。\n* **MySQL Server：** 用于数据持久化。\n* **ChromeDriver (可选但推荐)：** 用于自动化 Android 应用中的 WebView 上下文（例如微信内部浏览器）。\n\n#### 步骤\n\n1.  **克隆仓库：**\n    ```bash\n    git clone [https://github.com/rewind-one/android-automator.git](https://github.com/rewind-one/android-automator.git)\n    cd android-automator\n    ```\n2.  **配置数据库：**\n    * 根据 `src/main/resources/conf/PooledDataSource.conf` 创建 MySQL 数据库（例如 `android_automator`、`raw`、`requester`）。\n    * 如有必要，更新 `PooledDataSource.conf` 中的数据库凭据。\n    * 运行 `DBUtil.initDB(false)` （或 `DBCreateTable` JUnit 测试）创建必要的表。\n3.  **配置 Redis：**\n    * 更新 `src/main/resources/conf/RedissonAdapter.conf` 中的 Redis 连接详情。\n4.  **安装 Appium 依赖：**\n    * 确保已安装 Appium 服务器 (`npm install -g appium`)。\n    * 找到您的 Appium `main.js` 文件（例如 Linux 上通常是 `/usr/local/lib/node_modules/appium/build/lib/main.js`），如果需要，请更新 `AndroidDevice.java`（第 289-299 行）.\n5.  **为代理安装 CA 证书 (可选但 HTTPS 拦截需要)：**\n    * 为 BrowserMob Proxy 生成 `ca.crt` 和 `pk.crt`。将它们放在项目根目录。\n6.  **构建项目：**\n    ```bash\n    ./gradlew clean build\n    ```\n\n### 使用\n\n1.  **启动 Android Automator API 服务器：**\n\n    ```bash\n    java -jar build/libs/task-android-automator.jar # 或在您的 IDE 中运行 `one.rewind.android.automator.api.server.AndroidServer.main()`\n    ```\n\n    服务器启动后，将检测已连接的 Android 设备并对其进行初始化。\n\n2.  **通过 API 提交任务：**\n    您可以使用 Postman、curl 等工具，或使用提供的 `APIMainServerTest` JUnit 测试 或 `AutomationClient` 来提交任务。\n\n    示例（使用 `APIMainServerTest.java` 中的 `testFetchEssaysTaskAPI`）：\n\n    ```java\n    // 示例：提交一个任务以抓取特定公众号的文章\n    String mediaNick = \"小青投资笔记\";\n    ImmutableMap\u003cString, Object\u003e params = ImmutableMap.of(\n            \"params\", ImmutableList.of(mediaNick),\n            \"udid\", \"ZX1G227PZ7\", // 指定设备 UDID\n            \"class_name\", GetMediaEssaysTask1.class.getName() // 任务类名\n    );\n    // 将此 'json' 提交到 [http://127.0.0.1:4567/android_automator/submit](http://127.0.0.1:4567/android_automator/submit)\n    ```\n\n    请参考 `one.rewind.android.automator.api.server.Routes.java`，了解可用的 API 端点及其预期的 JSON 有效负载。\n\n### 项目结构 (部分)\n\n```\n.\n├── src\n│   ├── main\n│   │   ├── java\n│   │   │   └── one\n│   │   │       └── rewind\n│   │   │           └── android\n│   │   │               └── automator\n│   │   │                   ├── account             # 账户模型与管理\n│   │   │                   ├── adapter             # 基础适配器及应用特定适配器 (例如：微信、通讯录、钉钉)\n│   │   │                   ├── api                 # RESTful API 服务器与客户端\n│   │   │                   ├── callback            # 设备与任务事件回调\n│   │   │                   ├── deivce              # Android 设备管理 (Appium, ADB 交互)\n│   │   │                   ├── exception           # 自定义异常\n│   │   │                   ├── genomotion          # Genymotion 相关工具\n│   │   │                   ├── log                 # 自定义日志模型\n│   │   │                   ├── process             # 进程管理工具\n│   │   │                   ├── service             # API 服务器主入口\n│   │   │                   └── task                # 基础任务、任务持有者、任务工厂\n│   │   └── resources\n│   │       └── conf          # 配置文件 (数据库、Redis、OCR 客户端)\n│   └── test\n│       └── java\n│           └── one\n│               └── rewind\n│                   └── android\n│                       └── automator\n│                           ├── adapter             # 适配器功能测试\n│                           ├── api                 # API 服务器/客户端测试\n│                           ├── call                # 并发执行测试\n│                           ├── db                  # 数据库测试\n│                           ├── device              # 设备管理测试\n│                           ├── file                # 文件/图像工具测试\n│                           ├── guava               # Guava 工具测试\n│                           ├── listener            # Appium 监听器测试\n│                           ├── mobile              # 移动设备特定测试\n│                           ├── model               # 模型测试\n│                           ├── ocr                 # OCR 测试\n│                           ├── task                # 任务管理测试\n│                           └── util                # 通用工具测试\n├── build\n├── log\n├── tmp                   # 临时文件 (截图、代理日志)\n└── ...\n```\n\n### 贡献\n\n欢迎贡献！请随时提交问题或拉取请求。\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarsxuefeng%2Ftask-android-automator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmarsxuefeng%2Ftask-android-automator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarsxuefeng%2Ftask-android-automator/lists"}