通過Auto.js在Android上實(shí)現(xiàn)自動(dòng)化
由于很難用鬧鐘叫醒我,因此設(shè)置多個(gè)鬧鐘是沒有用的。 希望手機(jī)可以在早上像播放列表或每日推薦一樣自動(dòng)播放音樂。
但是,我手機(jī)上裝的網(wǎng)易云音樂,就算有定時(shí)播放的音樂鬧鐘功能,但是功能相當(dāng)有限,只能放一段音樂——這樣的話就和系統(tǒng)自帶的鬧鐘沒什么區(qū)別了。
再后來,我偶然間發(fā)現(xiàn)華為出了收音機(jī)的應(yīng)用,可以聽廣播(雖然是通過網(wǎng)絡(luò)接收的,而且也附帶了一堆我不太需要的播客類節(jié)目)。我個(gè)人在中學(xué)的時(shí)候就有聽廣播的習(xí)慣,邊做作業(yè)邊聽廣播,所以我覺得如果能夠在早上的時(shí)候自動(dòng)播放廣播,也可以。一般的收音機(jī)有自動(dòng)播放的功能,但是華為的收音機(jī)應(yīng)用卻沒有,只有定時(shí)停止播放的功能。
我又看了系統(tǒng)的設(shè)置,關(guān)于定時(shí)的,除了鬧鐘,就只有定時(shí)開關(guān)機(jī)了。
這時(shí),我想起了Auto.js——一個(gè)可以高度定制化的Android自動(dòng)化應(yīng)用。
關(guān)于Auto.js
其實(shí)我很早就聽說過Auto.js,不過一直沒有用過——就算是雙十一、618活動(dòng)的時(shí)候,我也沒有用它去自動(dòng)賺喵幣或者是疊蛋糕——我倒見過別人用,也一眼就能看出用的是Auto.js。
我之前安裝這個(gè)應(yīng)用的時(shí)候,官方還是免費(fèi)提供安裝包的;但是當(dāng)我現(xiàn)在找這個(gè)應(yīng)用的時(shí)候,官方卻刪掉了所有的安裝包文件和記錄,只能付費(fèi)使用,而且也有限制:
為了打擊灰產(chǎn)對(duì)本軟件的濫用,同時(shí)滿足正常用戶寫小工具、小應(yīng)用、小玩具、自動(dòng)化的需求,Auto.js Pro 8.0在某些軟件上自動(dòng)點(diǎn)擊等無障礙功能不能生效,目前包括主流社交軟件、直播軟件、短視頻軟件、淘寶等十幾個(gè)軟件。
雖然價(jià)格只有45元,而且我也理解作者為什么做這個(gè)限制,但是如果就是為了實(shí)現(xiàn)一點(diǎn)點(diǎn)功能就付費(fèi),我自己感覺并不值——更何況之前還是能夠在官方獲取到免費(fèi)版本的。好在有人此前備份了免費(fèi)版的安裝包,我才得以下載。
正如其名,Auto.js使用的是JS語言作為自動(dòng)化的腳本。我寫JS并不是非常好,但是簡單的JS腳本我還是會(huì)寫的,而且如果只是實(shí)現(xiàn)簡單的功能,只要有非常初步的編程相關(guān)知識(shí),就可以自己寫腳本。而且,Auto.js也有官方的文檔和示例。
Auto.js示例
自動(dòng)打開收音機(jī)
比如說,我想聽中央人民廣播電臺(tái)的經(jīng)濟(jì)之聲。華為收音機(jī)把央廣的四個(gè)頻率放在首頁的最上方,所以相對(duì)來說點(diǎn)擊容易一些。
華為收音機(jī)把央廣的四個(gè)頻率放在首頁的最上方
原理很簡單:打開收音機(jī)應(yīng)用,等待廣告結(jié)束,左劃到經(jīng)濟(jì)之聲,點(diǎn)擊播放按鈕。當(dāng)然,如果是中國之聲的話,就不需要左劃了。而且你也可以跳過廣告,不過我暫時(shí)不需要寫太復(fù)雜的腳本。
我基本上看示例腳本,復(fù)制粘貼,寫了可以用的代碼。代碼如下(我盡量加了詳細(xì)的注釋):
"auto";// 在進(jìn)行屏幕操作前,先設(shè)置屏幕尺寸setScreenMetrics(1080, 1920);// 既然是為了早上叫醒自己,那么就把媒體音量調(diào)到最大device.setMusicVolume(device.getMusicMaxVolume())// 運(yùn)行應(yīng)用。應(yīng)用名不是主菜單里面的名稱,而是應(yīng)用管理里面的名稱var appName = "華為收音機(jī)"launchApp(appName);// 等待廣告結(jié)束,以ms為單位,這里是6ssleep(6000)// 左劃,下方的代碼意思是從(1040,700)到(300,700),用時(shí)1sswipe(1040, 700, 300, 700, 1000);// 等待1ssleep(1000)// 點(diǎn)擊坐標(biāo)(400,1000)click(400, 1000);
應(yīng)用名以這里為準(zhǔn)
屏幕坐標(biāo)什么的可以大致估算,也可以通過開發(fā)人員工具查看。Auto.js也提供了一些工具,可以查看屏幕上控件的詳細(xì)信息。具體的方式我會(huì)放到文章后面。
腳本寫好了,點(diǎn)擊腳本右邊的三角箭頭,可以運(yùn)行該腳本。
運(yùn)行腳本
當(dāng)然,你也可以通過錄制動(dòng)作的方式寫腳本,但是系統(tǒng)要Root。我的手機(jī)沒有Root,就錄制不了。
定時(shí)執(zhí)行腳本
Auto.js提供了定時(shí)運(yùn)行腳本的功能。
點(diǎn)擊腳本右邊的三個(gè)小點(diǎn),點(diǎn)擊“更多”→“定時(shí)任務(wù)”,可以設(shè)置定時(shí)任務(wù)。
這里面的功能非常強(qiáng)大,可以設(shè)置每天特定時(shí)間打開,也可以設(shè)置每周幾打開,也可以在特定事件觸發(fā)后運(yùn)行,也可以只執(zhí)行一次。
強(qiáng)大的定時(shí)執(zhí)行功能
我這里設(shè)置每周一至周五7:00執(zhí)行該腳本。
在鎖屏狀態(tài)下執(zhí)行
但是,實(shí)際上這樣做還是不夠,因?yàn)槲业氖謾C(jī)有鎖屏。因?yàn)槟_本中有很多屏幕操作的代碼,定時(shí)執(zhí)行這些腳本的結(jié)果就是只能打開應(yīng)用,不能進(jìn)行操作。這就需要自動(dòng)解鎖屏幕。
我的手機(jī)是榮耀9,使用以下指令可以喚醒屏幕:
device.wakeUp()
然后模擬滑動(dòng)、輸入密碼解鎖手機(jī)。這個(gè)操作可以參照上面的操作,可以打開開發(fā)人員工具進(jìn)行調(diào)試。
根據(jù)上面的操作,把需要添加的代碼放在設(shè)置音量之前,再試著定時(shí)執(zhí)行,終于執(zhí)行成功了。
根據(jù)工作時(shí)間自動(dòng)設(shè)置振動(dòng)模式、打開音量
做到這里,我想到了另一個(gè)可以使用Auto.js的情況:在上班的時(shí)候把手機(jī)設(shè)為振動(dòng)模式,下班的時(shí)候打開音量。這樣,就不需要手動(dòng)設(shè)置振動(dòng)模式,以免忘記調(diào)成振動(dòng)而造成尷尬,也避免了下班忘記調(diào)回來而錯(cuò)過外賣等的電話(雖然我基本上不點(diǎn)外賣)。
首先說明一下,Android中,可以調(diào)節(jié)媒體、鈴聲、鬧鐘和通話的音量,我這里需要調(diào)節(jié)的是媒體和鈴聲音量。
我已經(jīng)設(shè)置了靜音時(shí)振動(dòng),所以上班時(shí),只要設(shè)置媒體和鈴聲音量為0。代碼如下:
device.setMusicVolume(0)device.setNotificationVolume(0)
下班時(shí),鈴聲調(diào)到最大,媒體音量調(diào)到一半就行了。代碼如下:
device.setMusicVolume(device.getMusicMaxVolume()/2)device.setNotificationVolume(device.getNotificationMaxVolume())
上面兩個(gè)腳本在鎖屏的時(shí)候就能運(yùn)行,不用解鎖屏幕。
Auto.js還有更多玩法(包括但不限于之前提到的自動(dòng)賺喵幣、疊蛋糕),這里我就不細(xì)說了,因?yàn)槲乙膊欢?。感興趣的話可以自己學(xué)習(xí)。
附一:通過開發(fā)人員工具查看坐標(biāo)
打開系統(tǒng)的“設(shè)置”→“開發(fā)人員選項(xiàng)”(不同UI的具體操作可能不一樣,一些手機(jī)可能沒有開啟,一般來說到“關(guān)于手機(jī)”中點(diǎn)擊好幾次系統(tǒng)版本就能打開,再選擇開發(fā)人員選項(xiàng)就可以了),打開其中的“指針位置”,就能夠在屏幕上看到現(xiàn)在點(diǎn)觸的位置的坐標(biāo)。
查看指針位置
附二:通過Auto.js查看控件屬性
首先,打開懸浮窗。然后,在要分析的頁面點(diǎn)擊懸浮窗→右邊的按鈕→“布局范圍分析”,會(huì)顯示當(dāng)前頁面結(jié)構(gòu)圖。點(diǎn)擊要分析的控件→“查看控件信息”,就能看到控件的各項(xiàng)信息。