老柯修机铺

通讯行老师傅的手机软件笔记——每款 App 装过、用过,才敢写下来

用 AutoJs6 把手機變成自動化生產力機器

分享一套把 AutoJs6 嵌入日常工作流的實戰方案,從舊流程的手動操作,到新流程的自動化執行,具體講清楚每個環節怎麼接。

AutoJs6 是什麼——JavaScript 寫出你的私人自動化助手

AutoJs6官網 是一款專為 Android 手機設計的腳本自動化工具,用 JavaScript 就能操控手機上的幾乎任何操作:點擊按鈕、滑動螢幕、輸入文字、啟動應用、截圖辨識……只要是你手動能做的事,它都能幫你重複執行。

這款軟體的定位很明確:它不是什麼新鮮玩具,而是一個生產力工具鏈的零件。我用它當日常工作流中的執行層——我在電腦或 Tasker 上設好條件,AutoJs6 負責把手機上那些繁瑣的、重複的、容易錯的操作跑完。比如說,以前我每天早上要花五分鐘手動去三四個 App 點簽到、整理訊息中心、截圖發到公司群組——這些事單一件都沒什麼,但每天重複就讓人厭煩。AutoJs6 讓我把這段時間收回到真正要動腦的事情上。

適合誰呢?基本上是這兩類:一類是已經在用 Tasker 但還覺得條件可以更靈活的玩家;另一類是純粹想把手機變聰明一點、不想每個 App 都自己點來點去的普通用戶。只要手機是 Android,AutoJs6 都能派上用場。

安裝

AutoJs6 是 Android APK 應用,安裝包大小約 68MB,版本目前穩定版是 6.5.0。從 AutoJs6下載 取得 APK 後打開,首次安裝需要允許「未知來源」權限——這部分各家 ROM(MIUI、ColorOS、OneUI)的設置路徑略有差異,但系統彈窗會直接引導你進入對應的開關頁。

安裝完畢後,打開 AutoJs6 第一件事不是寫腳本,而是去系統設置裡開啟無障礙服務。沒有這個權限,AutoJs6 就無法讀取界面控件、模擬點擊和滑動,等於白裝。路徑一般是:設置 → 輔助功能(或無障礙)→ 下載的服務 → 找到 AutoJs6 → 打開開關。部分廠商的手機還要確保 AutoJs6 在電池白名單裡,不然系統省電機制會把後台進程殺掉,定時腳本就跑不起來。

開啟無障礙後,AutoJs6 會在螢幕上顯示一個半透明的浮動按鈕——這是你和腳本互動的控制面板。後面錄製腳本、手動觸發、查看日誌都從這裡進。浮動按鈕可以拖動到任意位置,不會擋住你操作。

AutoJs6 主界面與浮動按鈕

舊流程的痛點——每天早上那五分鐘

讓我先說說以前我是怎麼乾這些事的,以及卡在哪裡。

我每天早上有三個固定手動操作:給公司的釘釘打卡、給微信群裡的早報截圖發到 Slack 頻道、還有三個論壇的每日簽到。這三件事加起來看似每個只需要三十秒,但加起來就是一個斷開的專注循環——打開一個 App、切換、再打開下一個、還得等每個 App 加載完畢才能按按鈕。加上有時候 App 更新或改版,按鈕位置變了,我還得找半天才能找到。

卡點有兩個。第一是狀態分散:我沒法在一個地方統一管理這些任務,每個都要單獨記得做;第二是條件無法串聯:有時候釘釘打卡失敗了,我想自動重試,但手動做就只能再點一次。更別提偶爾睡過頭或忙忘了,一整天的流程就打亂了。

我以前也試過用 Tasker 來排程,但 Tasker 的自動化能力主要是條件觸發,要寫複雜的界面操作邏輯就很吃力——它得借助第三方插件才能點擊控件、識別文字,而 AutoJs6 剛好把這塊補齊了。

新流程——把 AutoJs6 嵌進 Tasker 裡

現在這套流程是這樣的:Tasker 當大腦,負責判斷條件(時間、位置、應用是否打開);AutoJs6 當手,負責實際操作手機界面。兩者通過 Tasker 插件模式串起來。

流程結構

Tasker 時間條件(每天 08:30)
  → 觸發 AutoJs6 插件動作
    → 執行 checkin.js(釘釘打卡)
    → 執行 report.js(早報截圖 + 發 Slack)
    → 執行 forum.js(三個論壇簽到)
  → 回傳狀態碼給 Tasker
  → Tasker 根據狀態碼決定是否重試或發失敗通知

第一步:在 Tasker 裡加 AutoJs6 動作

打開 Tasker,新建一個 Profile(條件配置文件),設置觸發條件為時間 08:30。然後進入 Task 編輯,點擊「+」添加動作,選擇「插件」類別,找到 AutoJs6。配置界面裡要填三個東西:腳本的完整路徑、執行模式(我選後台模式,不打開 AutoJs6 主界面)、以及是否等待腳本執行完畢再進下一步。

這裡要注意一個細節:腳本路徑必須是絕對路徑,比如 /sdcard/AutoJs6/scripts/checkin.js,不能寫相對路徑。我踩過這個坑,腳本明明存在但 Tasker 報找不到。

第二步:用布局分析器寫穩定的控件選擇器

AutoJs6 浮動按鈕裡有個「布局分析」功能,這是我寫腳本時最常用的工具。原理跟 Android Studio 的 LayoutInspector 一樣——在螢幕上用半透明線條把每個控件的邊框畫出來,點一下就能看到控件的 id、文字、點擊區域等全部屬性,詳細用法可參考 AutoJs6文檔。

我打開釘釘 App,進入打卡頁面,開啟布局分析,點擊打卡按鈕——彈出來的面板告訴我這個按鈕的 id 是 btn_checkin。比我自己瞎猜穩定多了。然後我寫的腳本就這樣:

// checkin.js
app.launchApp("釘釘");
sleep(2000);  // 等 App 加載完畢

let checkinBtn = id("btn_checkin").findOne(5000);
if (checkinBtn) {
    checkinBtn.click();
    toast("打卡完成");
    exit(0);  // 成功狀態碼
} else {
    toast("打卡按鈕未找到");
    exit(1);  // 失敗狀態碼,Tasker 會重試
}

這裡的關鍵是優先用 id 定位,不用坐標。坐標在不同分辨率的手機上會失效,id 只要 App 版本沒大改就穩定。如果某個控件沒有 id,就退而求其次用 textContains("簽到") 這類文字匹配,再不行才考慮坐標。

布局分析器幫你定位控件

第三步:處理最容易斷鏈的兩個環節

第一個容易斷的環節是App 加載時長不確定。有時候釘釘啟動快只要兩秒,有時候網路慢就要五秒以上。我剛開始寫的時候固定 sleep(2000),結果時不時腳本就跑在 App 還沒加載完的界面上,找不到控件。

解決辦法是用 waitForActivity 來精確等待:

// 不要固定 sleep,而是等目標頁面真的加載完
if (!waitForActivity("com.alibaba.android.rimet/.activity.MainActivity", 10000)) {
    toast("釘釘啟動超時");
    exit(1);
}
// 到這裡說明打卡頁面已就緒

第二個容易斷的環節是腳本之間的銜接。我剛開始把三個任務寫在一個腳本裡,但一個腳本出錯就全流程中斷,後來改成 Tasker 串三個獨立的 AutoJs6 動作——每個腳本只管一件事,出錯了 Tasker 只重試出錯的那個,其他照常跑完。

第四步:效果和邊界

效果很直接:以前每天早上五分鐘的手動操作,現在完全自動。每個腳本跑完會在 AutoJs6 的日誌裡留下記錄,出錯了 Tasker 會給我發一條簡訊,我晚上空了再看日誌調試就行。

當然這個流程也不是什麼場景都適用。比如如果 App 更新把控件 id 改了,腳本就會失效——這時候我只要再跑一次布局分析器更新選擇器就行,一般一兩分鐘搞定。另外,銀行、支付這類 App 有用 FLAG_SECURE 禁止系統截圖,截圖功能在這些 App 上會黑屏,這個是 Android 系統層面的限制,AutoJs6 繞不過去。

總結

把 AutoJs6 嵌入工作流這件事,核心不是寫腳本,而是想清楚你要自動化的到底是什麼。我這套流程的思路是:Tasker 管「什麼時候、什麼條件下」,AutoJs6 管「具體做什麼、怎麼做」。這個分工讓每個環節都很清晰,出錯了也容易定位。

如果你也有每天重複做的手機操作——打卡、簽到、截圖、整理訊息——不妨試試這個組合。先從一個最小的任務開始,比如「每天晚上八點自動給某個 App 點簽到」,跑穩了再往上疊。畢竟一整套流程也是一個腳本一個腳本堆起來的。

本文为个人基于网络公开资料整理编写,非官方内容,仅供学习交流参考;软件版权归原作者所有,请支持正版;使用过程中遇到问题请查阅官方渠道,本文不承担任何责任。

同类文章