Skip to content

MoonClicker v0.3.0

Choose a tag to compare

@github-actions github-actions released this 12 Oct 15:21
· 81 commits to master since this release

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