Repository navigation
Releases: kuomartin/MoonClicker
Releases · kuomartin/MoonClicker
Release list
MoonClicker v0.5.0
0.5 Highlights
REPL
- A persistent Lua session separate from scripts, with the same API. Globals persist until reset or close, and Ctrl+C interrupts only the current chunk.
- Up to four REPLs can run at once on a device. Each has its own id and its own globals. VS Code and MCP share them, and you can attach to a REPL that is already open.
- VS Code: use the REPL from the terminal. Shift+Enter sends the selection or the current line, and Ctrl+D on an empty line closes only that REPL.
MCP server
- The Workbench now has a built-in MCP server (
POST /mcp, Streamable HTTP, stateless) that uses the same Workbench token. - Tools:
list_displays,screenshot,view_tree,tap,swipe,repl_eval,repl_reset,list_scripts,start_script,stop_script,script_logs. - New VS Code command: "Copy MCP Server Config". See docs/mcp.md for setup.
ui module: view tree access
- New
ui.dump,ui.find,ui.find_all,ui.waitand selectors. Scripts can find elements by text, id or class without templates or OCR (Android 11+). - The service registers UiAutomation as shell only when needed and releases it after about 30 seconds of inactivity.
Input from the VS Code mirror
- On the Workbench panel's debug view, a click sends a tap, press-and-hold sends a long press, and a drag sends a swipe. Input is sent when you release.
Compatibility
- Workbench protocol version is now 3. You need the VS Code extension 0.5.x.
- The VS Code extension moved to kuomartin/moonclicker-vscode. Download
.vsixfiles from that repo's Releases. Installing from Open VSX works the same as before.
Other
- MCP returns an error when coordinates are outside the display or the script is unknown.
- The CI Lua stub check now compares function names, so PRs that don't change the API are no longer blocked.
Full Changelog: v0.4.0...v0.5.0
MoonClicker v0.4.0
What's Changed
- docs: Android 17 上 VirtualDevice 途徑的實測結果 by @kuomartin in #190
- docs: 中文 README Roadmap 對齊現況 by @kuomartin in #189
- build(engine): consumer keep rule 改放 keepRules source set by @kuomartin in #191
- feat: milestone 0.4(多腳本、協定版本、擴充套件 i18n、view tree 研究) by @kuomartin in #202
- 虛擬顯示可經 VirtualDevice 建立(實驗性) by @kuomartin in #203
- 新增 mattpocock/skills plugin 至專案設定 by @kuomartin in #204
- 鏡像切換 display 不再搬動面板,解碼錯誤後可自行恢復 by @kuomartin in #205
- fix: 重用 VD 比對建立尺寸,影格尺寸只由服務一處決定 by @kuomartin in #206
- fix(engine): 不同 display 用相同 pointer id 不再互相取消 swipe by @kuomartin in #207
- test(engine): ViewTreeProbe 沒有 Settings 時略過、挑目標 package 的視窗 by @kuomartin in #208
- 修正 VISION_RESULT 的 JSON 字串未跳脫控制字元 by @kuomartin in #209
- chore: App 與 VS Code 擴充套件版本升至 0.4.0 by @kuomartin in #210
Full Changelog: v0.3.0...v0.4.0
What's Changed
- docs: 中文 README 的快速開始連到 Wiki by @kuomartin in #188
- docs: Android 17 上 VirtualDevice 途徑的實測結果 by @kuomartin in #190
- docs: 中文 README Roadmap 對齊現況 by @kuomartin in #189
- build(engine): consumer keep rule 改放 keepRules source set by @kuomartin in #191
- feat: milestone 0.4(多腳本、協定版本、擴充套件 i18n、view tree 研究) by @kuomartin in #202
- 虛擬顯示可經 VirtualDevice 建立(實驗性) by @kuomartin in #203
- 新增 mattpocock/skills plugin 至專案設定 by @kuomartin in #204
- 鏡像切換 display 不再搬動面板,解碼錯誤後可自行恢復 by @kuomartin in #205
- fix: 重用 VD 比對建立尺寸,影格尺寸只由服務一處決定 by @kuomartin in #206
- fix(engine): 不同 display 用相同 pointer id 不再互相取消 swipe by @kuomartin in #207
- test(engine): ViewTreeProbe 沒有 Settings 時略過、挑目標 package 的視窗 by @kuomartin in #208
- 修正 VISION_RESULT 的 JSON 字串未跳脫控制字元 by @kuomartin in #209
- chore: App 與 VS Code 擴充套件版本升至 0.4.0 by @kuomartin in #210
Full Changelog: v0.3.0...v0.4.0
MoonClicker VS Code Extension vscode-v0.4.0
What's Changed
- docs: 中文 README 的快速開始連到 Wiki by @kuomartin in #188
- docs: Android 17 上 VirtualDevice 途徑的實測結果 by @kuomartin in #190
- docs: 中文 README Roadmap 對齊現況 by @kuomartin in #189
- build(engine): consumer keep rule 改放 keepRules source set by @kuomartin in #191
- feat: milestone 0.4(多腳本、協定版本、擴充套件 i18n、view tree 研究) by @kuomartin in #202
- 虛擬顯示可經 VirtualDevice 建立(實驗性) by @kuomartin in #203
- 新增 mattpocock/skills plugin 至專案設定 by @kuomartin in #204
- 鏡像切換 display 不再搬動面板,解碼錯誤後可自行恢復 by @kuomartin in #205
- fix: 重用 VD 比對建立尺寸,影格尺寸只由服務一處決定 by @kuomartin in #206
- fix(engine): 不同 display 用相同 pointer id 不再互相取消 swipe by @kuomartin in #207
- test(engine): ViewTreeProbe 沒有 Settings 時略過、挑目標 package 的視窗 by @kuomartin in #208
- 修正 VISION_RESULT 的 JSON 字串未跳脫控制字元 by @kuomartin in #209
- chore: App 與 VS Code 擴充套件版本升至 0.4.0 by @kuomartin in #210
Full Changelog: v0.3.0...vscode-v0.4.0
MoonClicker v0.3.0
0.3 的主角是 OCR:腳本可以讀取與等待畫面上的文字,補足模板比對處理不了的動態文字(數值、倒數、會變的標籤)。新使用者也不必再碰電腦或 UserService,裝好 App 就能跑起內建的範例腳本。
從安裝到跑起範例、寫第一支腳本的步驟見 Wiki。
新功能
- OCR:ONNX Runtime+PP-OCRv6 small,全部在裝置上執行。元件約 39 MB,到「設定 → 文字辨識(OCR)」下載;第一次使用時自動選擇執行緒數,也可以手動調整、重新測試速度。
- 內建範例腳本:「腳本」頁右下角 + →「範例腳本」。YouTube Rickroll 在虛擬顯示器上搜尋並播放影片、略過廣告、拖曳進度條,再用 OCR 讀時間確認。
- UserService 自動啟停:需要時自動啟動,沒有腳本執行、也沒有虛擬顯示器時自動停止,設定頁只剩 Shizuku 授權。
- VS Code 腳本工作台(vscode-v0.3.0):
- 連線時與本機資料夾雙向同步整個腳本資料夾,連線期間即時同步。
- 側邊欄直接列出腳本,狀態列顯示執行中的腳本,可以直接停止。
- Workbench 面板新增 OCR 測試:框選範圍即時顯示辨識出的文字、位置與信心度。
.moonclickerignore排除不推上裝置的檔案。
Lua API
vision的請求新增text(與image擇一),find、wait、find_any、wait_any都能找文字。vision.read(roi)、vision.read_lines([roi]):讀出範圍內的文字與位置。vision.find_any(requests):與wait_any對稱,只比對一次。vision.wait、vision.wait_any新增選填的step_ms,降低比對頻率。input.text(text):輸入 ASCII 文字。app.list():列出各顯示器上執行中的 app。app.mute(package_name, muted):讓單一 app 不出聲、不搶音訊焦點。script.json的display.keyboard:設成false時,顯示器上的 app 不綁定輸入法,input.text不會被注音之類的輸入法組字。
完整說明見 docs/lua-api.md。
行為變更
- Lua API 的失敗分成兩種:操作本身沒成功(例如 app 未安裝、按鍵被系統拒絕)照舊回
false;服務斷線、裝置不支援等基礎設施失敗改為拋出 Lua error。以前把這類失敗當成false處理的腳本,現在會在那一行停下並顯示原因。 - 第一次呼叫
vision.*時會等到第一張影格才比對,腳本開頭不必再自己sleep。
修正
- 部分裝置的 H.264 encoder 無法設定,鏡像串流開不起來。
- 裝置不支援次要顯示器時,
app.launch改為拋錯,全螢幕選單顯示提示,不再沒有反應。 - 畫面靜止時不再重複分發相同的影格,降低鏡像與比對的負擔。
- 全螢幕預覽、H.264 串流、
vision的 surface 改由各自的 client 擁有,client 結束時一定釋放。
已知問題
- Android 17 上虛擬顯示器會跟主螢幕一起休眠,主螢幕關閉時
vision.*拿不到畫面。
下載
一般手機選 arm64-v8a。x86、x86_64 給模擬器使用。
Full Changelog: v0.2.2...v0.3.0
MoonClicker VS Code Extension vscode-v0.3.0
fix(engine): R8 保留 MoonClickerAppTask 的類別與欄位名稱 native 以名稱 FindClass/GetFieldID,並以含此類別名稱的簽章 GetMethodID 取 ScriptHost.listApps。 AIDL 產生的類別無法加 @Keep,release build 被 R8 改名後啟動任何腳本都會因 NoSuchMethodError 中止。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MoonClicker v0.2.2
What's Changed
- fix: 修復 local network 權限檢查、調整 sleep & wakeUp 行為
- test(hidden-api-contract): contract 依 stub 拆檔,加上 stub 覆蓋率測試
- test(engine): androidTest 改為事件驅動的等待並拆分
Full Changelog: v0.2.1...v0.2.2
MoonClicker v0.2.1
What's Changed
- 外部 app 建立的虛擬螢幕另外呈現(#115)
- 外部 VD 比照實體螢幕處理:先開鏡像才能進 fullscreen
- 列出外部 VD 是開發人員選項「顯示外部虛擬螢幕」,預設關閉
- 關閉鏡像時清除該螢幕的縮圖快取(#116)
- fullscreen 返回手勢轉送
KEYCODE_BACK到目標顯示器(#117)
Full Changelog: v0.2.0...v0.2.1
MoonClicker v0.2.0
App 改名/品牌
ReLC→MoonClicker全面改名- App icon 設計為單一 Lua 新月圖案
- 主題配色,取代預設 Material 主題
UI/UX
- Displays 頁面卡片改版:緊湊布局
- 全螢幕操作列改成扇形按鈕,並新增「關閉螢幕電源」
- App 選擇清單新增功能:搜尋、釘選、手動刷新
- 設定頁重新結構化、新增「關於」頁與開發人員選項、支援 App 內語言切換
- 新增繁體中文(zh-rTW)
核心功能
- API < 34 裝置改用
SurfaceControl完成鏡像功能 - 虛擬顯示旋轉/鏡像行為修正
建置
- 拆分為 MoonClicker / VS Code Extension 分別發布
- abi 新增 x86
ReLC v0.1.0
ReLC v0.1.0 (Initial Release)
ReLC (Remote Lua Control) 是基於 Shizuku 的 Android 背景多螢幕自動化與 Lua 腳本控制工具。
這是 ReLC 的首個公開預覽版本(v0.1.0),提供完整的 Android 執行環境與配套的 VS Code 擴充套件。
核心功能
- 虛擬顯示器(Virtual Display):透過 Shizuku 建立獨立虛擬螢幕,在背景執行目標 App,支援自訂解析度與旋轉對齊,不干擾實體螢幕操作。
- Lua 5.5 腳本引擎:線性執行模型(由
main.lua循序執行),支援即時中斷響應與純邏輯空間座標系。 - OpenCV 畫面辨識:原生 C++ 模板比對(
TM_CCOEFF_NORMED),支援vision.find、vision.wait、多目標等待(vision.wait_any)與 ROI 局部比對。 - VS Code Script Workbench:
- PIN 碼配對認證與腳本雙向同步。
- 一鍵 Push & Run 與 Logcat 即時串流。
- 低延遲 H.264 螢幕鏡像預覽。
- 鏡像畫面拖曳裁切模板並自動寫入
templates.json。 - 提供 Lua Language Server (LuaLS) 自動補全型別定義。
系統需求
- Android:Android 8.0+(建議 Android 10+),需啟動 Shizuku(無線 ADB 或 Root)。
- VS Code:1.90.0+(用於腳本開發)。
安裝檔案說明
- ReLC-v0.1.0-arm64-v8a.apk:現代 Android 手機/平板。
- ReLC-v0.1.0-x86_64.apk:模擬器專用。
- ReLC-v0.1.0-universal.apk:全架構通用版。
- relc-script-workbench-0.1.0.vsix:VS Code 擴充套件(於 VS Code 選擇 Install from VSIX 安裝)。
相關文件
Full Changelog: https://github.com/kuomartin/ReLC/commits/v0.1.0