DeepSeek Harness Plugin Hub

发布与管理完整 Harness Profiles,发现适合你的插件。

探索

插件目录环境预设文档中心动态

社区

发布插件联系我们报告问题

相关链接

Plugin Hub GitHubDeepSeek Harness 官方项目系统状态隐私说明
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

独立、非官方社区项目,与 DeepSeek 官方无隶属、授权或背书关系。

Android Emulator Helper — DeepSeek Harness 插件(DSH Plugin)
DeepSeek Harness Plugin Hub
ProfilesPlugins分类动态文档登录管理 Profiles
ProfilesPlugins分类动态文档登录
← Plugins
A

@zhz8888/dsh-android-emulator-helper

Android Emulator Helper

用于 DeepSeek Harness 的 Android SDK、模拟器和设备管理,以及 Kotlin/Compose 构建和运行工具,移植自官方 ZCode android-emulator 插件,并提供完整的应用内设置页面。

插件会安装到这里;不确定时保持 web。

npx -y @deepseek-ai/dsh plugin --profile web add github:zhz8888/dsh-android-emulator-helper#a986bedd221a445af521c5c4b0195d0868a2a149
README兼容性版本

兼容性与来源证明

Android Emulator Helper 以 @zhz8888/dsh-android-emulator-helper 发布,当前版本为 1.1.2。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

DSH 兼容范围
*
运行环境
web
发布来源
github
Registry 更新时间
2026/10/19

版本

1.1.2stable
2026/10/19
1.1.1stable
2026/10/18
1.1.0stable
2026/10/17
查看其余 1 个版本收起版本
1.0.0stable
2026/10/17

相关插件

正在加载相关插件…

最新版
1.1.2
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
未提供
文件数
未提供
Surface
web
许可证
MIT
发布源
github
GitHub
★ 1
周下载
0
最近提交
2026/10/19
查看源码 ↗
README Badge

点击下方 Badge 复制 Markdown,粘贴到 README 即可。

这是你的 Plugin?认领权益 · 优先安全扫描

验证 package.json 声明的 GitHub 仓库,即可管理这个公开页面。认领后,Hub 会优先安排当前版本的安全扫描,并在通过后公开展示结果。

认领这个 Plugin →
报告问题

相关插件

继续浏览 developer-tools 分类下经过校验的插件。

Web App@deepseek-ai/dsh-web-appdsh 浏览器界面捆绑包:位于 dsh-base 之上的 Web 补丁层,加上运行时粘合插件(提供前端 dist、Web 界面提示符、bash 运行时变量和 URL 行)Sdk Minimal@deepseek-ai/dsh-sdk-minimal独立的最小 SDK 配置包:JSON-RPC、一个 DeepSeek 适配器、持久化 Shell 和 JSONL 会话Sdk App@deepseek-ai/dsh-sdk-appdsh SDK 配置包:基于 dsh-base 提供 stdio JSON-RPC 服务和进程生命周期管理Experimental Inspector@deepseek-ai/dsh-experimental-inspector用于 Host 调试和 Client Runtime 检查的实验性跨 realm CDP hub

README

dsh-android-emulator-helper

English | 简体中文

A DeepSeek Harness (DSH) native port of the official ZCode android-emulator@0.1.0 plugin: all 23 original MCP tools preserved as native DSH tools, plus a full settings page (Settings → Android emulator) that edits the SDK, emulator, system-image, build and output parameters in-app instead of through environment variables.

  • Tool and argument names are identical to the original, so workflows written for its android_emulator MCP server keep working; the port adds no tool and drops none.
  • 17 settings fields in 5 groups, all live-editable; the seven fields the original exposed still fall back to their ANDROID_PLUGIN_* variable, then to the built-in default.
  • android_preflight and the settings page's Run diagnostic button run the same checks — SDK, adb, emulator, AVDs, JDK, Gradle — and print a fix for each failure.
  • Published as @zhz8888/dsh-android-emulator-helper; the plugin page shows Android Emulator Helper / Android 模拟器助手 from locale/ rather than the raw package name, and both descriptions say the plugin is unofficial and not affiliated with Google.

Quick start

On a machine with an Android SDK, a JDK and DSH installed:

  1. Install the plugin

    dsh plugin --profile <profile> add @zhz8888/dsh-android-emulator-helper
    

    In DSH Desktop, open Plugins and add the same package name there. Reload or restart DSH afterwards.

  2. Check the machine — open Settings → Android emulator and press Run diagnostic. It runs exactly the checks android_preflight runs, and prints a fix for anything missing.

  3. Use it — ask for what you want ("build and run this project on the emulator", "screenshot the running app"), or call the 23 android_* tools directly. Everything the tools need is editable on that settings page.

Contents

  • Quick start
  • Requirements
  • Install
  • Settings page
  • Screenshots
  • Tools
  • Skill and slash command
  • Differences from the original
  • Known limitations
  • Releases
  • Contributing
  • License

Requirements

DependencyNotes
Android SDKsdkPath on the settings page, else ANDROID_HOME, ANDROID_SDK_ROOT, then the common install paths.
Platform tools, emulator and a system imageadb and emulator come from the SDK; an AVD needs a system image for the API level you target.
JDKjdkMajor (17 by default) selects the JDK a build runs on; the generated project's JVM target is derived from it and clamped to [17, 21].
Gradleandroid_build_app uses the project's ./gradlew when it has one and gradle from PATH otherwise, and can generate the wrapper with that gradle. The project android_create_app writes ships no wrapper.
A device or an AVDAn attached device, or an AVD to boot; autoStartEmulator decides whether the tools may boot one themselves.
Node.js ≥ 22The DSH host runtime.

android_preflight checks every item above and prints a fix for each failure; the settings page's Run diagnostic button runs the same checks.

Install

dsh plugin --profile <profile> add @zhz8888/dsh-android-emulator-helper

DSH Desktop: the desktop profile belongs to the Electron app — open Plugins, add @zhz8888/dsh-android-emulator-helper there, and enable the row it creates. After a reload or restart the page is at Settings → Android emulator; it only appears while the host half actually serves this plugin's settings namespace.

The published tarball contains everything the plugin needs — the host half, the browser bundle, the bundled skill and the locale/ entries — and nothing is compiled at install time, so no build approval step is involved. @deepseek-ai/cordis, @deepseek-ai/dsh-tools and @deepseek-ai/schemastery are peer dependencies provided by the harness, so the plugin pulls in no second copy and has no runtime dependencies of its own; DSH's compatibility gate compares the @deepseek-ai/dsh* peer ranges against the running version and refuses to install on a mismatch.

Mount the package exactly once. dsh plugin add records the row in dsh.profile.bundles; adding a second row for the same package in the profile's own cordis.patch.yml registers every tool name twice and fails at the loader.

Upgrade and uninstall

dsh plugin --profile <profile> add @zhz8888/dsh-android-emulator-helper@latest   # upgrade
dsh plugin --profile <profile> remove @zhz8888/dsh-android-emulator-helper      # uninstall

Settings live in the profile, not in the package, so both commands leave them in place. The data directory (by default $DSH_HOME/android-emulator-helper, then ~/.dsh/android-emulator-helper) holds screenshots and build logs; it is yours to delete, and uninstalling does not touch it.

Version gate

The DSH compatibility range is >=0.2.0-rc.2, a lower bound only, declared identically in peerDependencies, engines.dsh and dsh.compatibility.dsh: a runtime below it is refused at install time, and no future harness release is excluded.

One node-semver detail survives — a new tuple's prerelease such as 0.2.1-alpha.1 is not admitted by npm's and pnpm's default rules, so that install fails until either the range gains a branch for the tuple (">=0.2.0-rc.2 <0.2.1-0 || >=0.2.1-0") or the peer check is skipped:

dsh plugin --profile <profile> add @zhz8888/dsh-android-emulator-helper \
  --config.strict-peer-dependencies=false

Stable releases (0.2.0, 0.2.1, 0.3.0, 1.0.0, …) are unaffected and always admitted.

Settings page

The settings namespace equals the profile patch row id equals android-emulator-helper (also dsh.name). The page reads and writes through ctx.configForms, so staged edits, dirty detection, inline validation, optimistic concurrency (revisions) and "overridden / reset to default" all come from the harness. It draws its own title, one card per category — the card outline is what separates them — and saves from a sticky action bar at the bottom that appears only while there is something to act on: a staged edit, a write in flight, or a failure worth retrying.

GroupFieldKindDefaultLegacy env fallback
SDK and toolchainsdkPathtextempty (auto-detect)ANDROID_PLUGIN_SDK_PATH
jdkMajortext, suggestions from this machine17ANDROID_PLUGIN_JDK_MAJOR
buildToolsVersiontext, suggestions35.0.0ANDROID_PLUGIN_BUILD_TOOLS_VERSION
Emulator and devicesdefaultAvdtext, suggestionsmedium_phoneANDROID_PLUGIN_DEFAULT_AVD
defaultSerialtext, suggestionsempty—
autoStartEmulatorswitchon—
emulatorArgsmultiline, one argument per lineempty—
bootTimeoutSecondsinteger180—
API and system imageapiLeveltext, suggestions35ANDROID_PLUGIN_API_LEVEL
systemImageVariantselectdefaultANDROID_PLUGIN_SYSTEM_IMAGE_VARIANT
systemImageAbiselect (empty = host architecture)autoANDROID_PLUGIN_SYSTEM_IMAGE_ABI
minSdkinteger23—
BuildbuildTimeoutSecondsinteger600—
gradleExtraArgsmultilineempty—
Output and logs

Two buttons back the page with exact Fetch routes on the host half:

  • Run diagnostic → GET /api/android-emulator-helper/status, the same checks as android_preflight, each with its detail and fix hint.
  • Refresh devices and AVDs → GET /api/android-emulator-helper/inventory, detecting the SDK root, AVDs, connected devices, installed JDKs, system images, platforms and build-tools to populate the fields' suggestions.

Legacy configuration

The original plugin's userConfig — the seven variables in the last column above — still works as a fallback (last column above), so an existing ZCode or CI setup needs no change: the resolution order is settings page → environment variable → declared default. The original also read ANDROID_PLUGIN_DATA for its data directory; here that directory is the page's dataDir field.

Screenshots

All four are the live page in DSH Desktop, in the order you scroll it — nothing is mocked up. They are 1598 × 1588 PNGs of the tightened card rhythm (7px above and below a field, a 12px 16px card, 16px between cards), captured in the Chinese locale, so the card headings and field labels read Chinese while the field keys in the table above are the same in either language. Grey text is a placeholder standing in for a field left empty, and the sticky save bar appears only while an edit is staged, so it is not in these shots.

1. SDK and toolchain — the SDK root, JDK major version and build-tools version every android_* call resolves first, then the top of the emulator card with its default AVD:

The Android emulator settings page in DSH Desktop: the SDK and toolchain card with the Android SDK root, JDK major version and build-tools version, then the emulator-and-devices card starting at the default AVD

2. Emulator and devices — which device a call talks to and how an emulator is started: the default serial, the auto-start switch, the extra emulator arguments and the boot timeout, then the top of the API-level card:

The page scrolled to the emulator-and-devices card: default device serial, the auto-start emulator switch, the extra emulator arguments and the boot timeout, then the API-level card starting at the Android API level

3. API level and build — what a generated project and an installed system image target, then the gradle timeout and extra arguments:

The page scrolled further: the API-level-and-system-image card with the system image variant, ABI and default minSdk, then the build card with the Gradle build timeout and the extra Gradle arguments

4. Output and diagnostics — where screenshots and build logs land, then the two buttons backing the page, next to the Fetch routes above:

The bottom of the page: the output-and-logs card with the data directory, screenshot directory and default logcat line count, then the diagnostics-and-discovery card with the run-diagnostic and refresh-devices buttons

screenshots.json lists these four files in this order next to package.json in the repository, which is how a plugin market finds them.

Tools

23 tools, identical names and arguments to the original MCP server.

ToolPurpose
android_preflightCheck the SDK, adb, emulator, AVDs, Java, the Gradle project state and the UI backend, and echo the current settings.
android_discover_projectFind Gradle roots, modules, variants, application ids, manifests and APK outputs.
android_create_appGenerate a minimal Kotlin + Jetpack Compose project.
android_build_appBuild one module and variant with Gradle.
android_build_and_runBuild → reuse or start a device → install → launch.
android_list_devices / android_list_avdsList the devices adb sees / the AVDs on this machine.
android_start_emulator / android_stop_emulatorStart a new GUI emulator / stop one by serial.
android_create_avdCreate an AVD with avdmanager.
android_install_app / android_launch_app / android_terminate_appInstall an APK / launch by application id / force-stop.
android_open_urlOpen a URL on the device.
android_screenshotCapture a PNG to disk, and return it as an image when the model accepts image input.
android_logsRead the logcat tail, optionally filtered by application id.
android_ui_statusReport what UI automation is available.
android_ui_describe / android_ui_resolveThe UI Automator element tree / resolve a text, description, resource id or class to coordinates.
android_ui_tap / android_ui_swipe / android_ui_type_text / android_ui_keyeventadb-backed tap, swipe, typing and key events.

android_screenshot deserves its own note: it always writes the PNG to disk (under <data dir>/screenshots/ by default) and additionally submits it to the host's attachment service for a canonical image block. When the current model declares no image input, or the deployment stores no attachments, the result degrades to text plus the file path instead of failing the call.

Skill and slash command

  • android-dev skill — shipped in skills/android-dev/ and registered by the host half through ctx.skills.register() as an embedded skill with the skill directory as its resourceBase, so INSTALL_ENVIRONMENT.md keeps resolving. Rewritten for DSH: no mcp__… prefix, and environment configuration points at the settings page rather than at environment variables.
  • /android-dev [goal] command — registered through ctx.commands.register(). DSH user commands deliberately never create a model message, so this command does the one thing that is useful without the model: it runs the environment diagnostic and prints the verdict, the failing checks and their fixes.

Differences from the original

AspectOriginal (ZCode)This plugin (DSH)
Tool exposurestdio MCP server android-emulator; the model sees mcp__android_emulator__*Native ctx.tools.register(); the model sees android_*
User configurationplugin.json userConfig (7 items), injected as environment variablesSettings page with 17 fields on a schemastery Config, all .volatile(); the old environment variables remain as fallbacks
Working directoryprocess.cwd()exec.agent.session.header.cwd (the session workspace)
Data directoryANDROID_PLUGIN_DATA / temp$DSH_HOME/android-emulator-helper, configurable on the settings page
Screenshot resultMCP image content (base64)An image block built from a host attachment reference, degraded to text plus a disk path on refusal
Result normalisationProviders return objects containing undefinedEvery result passes through toLosslessJson() (the registry rejects undefined)
Slash commandInjects a prompt into the model's conversationRuns the diagnostic and prints the verdict
Process invocationnode:child_process spawnUnchanged

The direct spawn is a deliberate trade-off: gradlew, adb and emulator behave byte-for-byte as they did in the original, and adb exec-out needs no binary-stream adapter; the cost is bypassing DSH's subprocess seam, so every call carries its own timeout and SIGTERM instead. The plugin reads and forwards no credential-bearing environment variables.

Known limitations

  • Linux is unsupported, exactly as in the original; android_preflight reports it.
  • android_start_emulator always starts a new emulator and never reuses one. Pass serial to the other tools to reuse a target.
  • android_create_avd always answers no to avdmanager's confirmation, so it can never silently trigger a multi-gigabyte image download; install the image with sdkmanager first.
  • UI automation depends on the device-side uiautomator. When it is unavailable android_ui_status reports that, and the build, run and screenshot paths are unaffected.
  • The settings page's installed-image list comes from scanning the SDK directory, not from sdkmanager --list_installed, which fails in restricted environments and prefixes its output with deprecation notices.
  • The settings page's two routes are served by the plugin and are mounted in a real profile, but their HTTP responses cannot be exercised outside the GUI: the desktop app authenticates every request, so a bare curl to /api/android-emulator-helper/status answers 403 forbidden before the handler runs. The page's spacing, dark theme and narrow-width wrapping still deserve a human look in the GUI.
  • No credential handling: the plugin never reads or forwards key/token/secret environment variables.

Releases

Every release is one commit in two places: tagged vX.Y.Z on main and published to npm from that tag, whose SHA npm records as gitHead. The list is at Releases — v1.1.2 is the latest, after v1.1.1, v1.1.0 and v1.0.0.

Restart the DSH host process after upgrading. The package is mounted as a link: symlink and Node caches ESM modules for the life of the process, so a change under lib/ does not take effect until the host restarts — until then the tools keep serving the old code.

Contributing

Issues and pull requests are welcome at github.com/zhz8888/dsh-android-emulator-helper. Every change has to keep pnpm check green — unit tests, a host/client consistency gate and a mount on a real Cordis host — and there is no CLA or form to fill in: a focused pull request that says what it changes and why is enough.

The package is shaped for the awesome-dsh-plugin market. Development conventions — commands, repository map, invariants, testing, commit and release rules — live in AGENTS.md.

License

MIT, copyright (c) 2026 zhz8888. Tool definitions, provider logic and the generated Kotlin/Compose project template are ported from the ZCode official android-emulator plugin, distributed under the MIT License by Z.ai; the template sources are kept verbatim. See the attribution at the end of LICENSE.

dataDir
text
$DSH_HOME/android-emulator-helper
—
screenshotDirtext<data dir>/screenshots—
logTailLinesinteger500—