Auto.JS
Auto.js
是個基於 JavaScript
語言運行在Android平台上的腳本框架。Auto.js主要工作原理是基於輔助服務AccessibilityService
。
手機環境:auto.js下載(資源自己尋找)及安裝,開啟無障礙服務
pc環境:推薦使用vscode,點擊 擴展
搜索 Auto.js
或 hyb1996
即可找到Auto.JS插件。
一、准備工作
在pc端開啟服務
在vscode中按 Ctrl+Shift+P 或點擊"查看"->"命令面板"可調出命令面板,輸入 Auto.js 可以看到幾個命令,移動光標到命令Auto.js: Start Server,按回車鍵執行該命令。(VS Code會在右上角顯示"Auto.js server running",即開啟服務成功)。
手機app連接pc(同一局域網或有公網ip)
點手機app左上角,在“其他”選項中,有“連接電腦”這個開關,點開啟會讓輸入pc的ip地址,輸入pcIP地址后,在pc端會提示“New device attached:........”,這樣就手機和pc連接成功了。
運行
run或者快捷鍵F5,會自動在手機端運行。
保存項目到手機終端
按 Ctrl+Shift+P 或點擊"查看"->"命令面板"可調出命令面板,輸入
Auto.js:Save On device
命令(vscode版本不同,語句不同,但意思都是save on/to device,都一樣意思),會找到已連接手機終端,點擊device,就可以在手機端查看了。
二、常用命令
按 Ctrl+Shift+P 或點擊"查看"->"命令面板"可調出命令面板,輸入 Auto.js 可以看到幾個命令:
Start Server: 啟動插件服務。之后在確保手機和電腦在同一區域網的情況下,在Auto.js的側拉菜單中使用連接電腦功能連接。
Stop Server: 停止插件服務。
Run 運行當前編輯器的腳本。如果有多個設備連接,則在所有設備運行。
Rerun 停止當前文件對應的腳本並重新運行。如果有多個設備連接,則在所有設備重新運行。
Stop 停止當前文件對應的腳本。如果有多個設備連接,則在所有設備停止。
StopAll 停止所有正在運行的腳本。如果有多個設備連接,則在所有設備運行所有腳本。
Save 保存當前文件到手機的腳本默認目錄(文件名會加上前綴remote)。如果有多個設備連接,則在所有設備保存。
RunOnDevice: 彈出設備菜單並在指定設備運行腳本。
SaveToDevice: 彈出設備菜單並在指定設備保存腳本。
New Project(新建項目):選擇一個空文件夾(或者在文件管理器中新建一個空文件夾),將會自動創建一個項目
Run Project(運行項目):運行一個項目,需要Auto.js 4.0.4Alpha5以上支持
Save Project(保存項目):保存一個項目,需要Auto.js 4.0.4Alpha5以上支持
三、基本語法
1、變量-var
語法:var 變量名=值;
var 變量名=new 數據類型(傳入值);
如聲明數組d:var d=new Array();
聲明變量a:var a= 10;
2、輸出
日志輸出:
log(要輸出的內容);
console.verbose("要輸出的內容");顏色為灰色,一般用來打印不重要內容。
console.info("要輸出的內容");顏色為綠色,一般用來打印運行信息。
console.warn("要輸出的內容");顏色為藍色,一般用來打印運行警報。
console.error("要輸出的內容");顏色為紅色,一般用來打印運行報錯信息。
氣泡輸出:
toast("要輸出內容");
對話框輸出:
alert("標題","內容");
3、變量賦值
同其它高級語言
4、注釋
同c++
//注釋一行
/*注釋
一塊*/
5、if語句
同c++
else if同c++
switch case同c++
6、while循環
同c++
7、for循環
同c++
8、break/continue
同c++
四、基本函數
1、click(x,y);
點擊功能。然后把其中x換成你要點的坐標的橫坐標,y換成你要點的坐標的縱坐標即可。
2、sleep();
能讓腳本運行到這一步時,暫停一段時間,再繼續運行下去。t改成需要暫停運行的毫秒數,1秒=1000毫秒 。可用sleep(10*60*1000);意思是暫停十分鍾。
3、press(x,y,t);
長按操作,x和y分別為點擊的坐標,t為點擊時長。例如press(200,200,2000);意思為點擊(200,200)位置2秒。
4、swipe(x1,y1,x2,y2,t);
意思為從(x1,y1)滑動到(x2,y2),滑動時間為t。
5、device.width/height;
device.width//獲取屏幕分辨率寬度
device.height//獲取屏幕分辨率高度
eg:
var a = device.width; //將分辨率寬度賦值給a
toast(a); //氣泡輸出a的值
6、setScreenMetrics(width,height);
設置腳本坐標點擊所適合的屏幕寬高。如果腳本運行時,屏幕寬度不一致會自動放縮坐標。這個功能可以設置屏幕上坐標點擊的等比縮放效果。
傳入值width為要修改到的寬度,單位像素,height為要修改到的高度,單位像素。
假如你的手機分辨率200*200,然后你手機上屏幕中央有個按鈕,你寫了個click點擊坐標100*100的地方,正好是你手機的中央,能點到這個按鈕。然后你發給別人用,別人手機分辨率400*400,結果點了100*100就沒有點到。雖然把坐標乘上分辨率比值就能達到效果,但加這一行代碼,明顯方便了不少。加了setScreenMetrics(200,200);在代碼開頭后,對於該腳本中的點擊命令,會把使用者的手機分辨率看成200*200,也就是運行click(100,100);時,會點擊到屏幕中央。
7、console.show();
顯示控制台。這會顯示一個控制台的懸浮窗(需要懸浮窗權限)。打印到日志的內容也會在控制台上顯示,控制台還可以輸入信息,調整大小等,非常適合調試代碼。
8.console.rawInput(data);
運行這段代碼時,程序會進入等待狀態,控制台內的輸入框,可以打印信息內容,直到點擊確定,可以把輸入框內的信息返回。
9.dialogs.confirm(title,content);
這個功能會彈出個選擇對話框,下面有確定和取消兩個按鈕,點擊確定會返回true,點擊取消會返回false。使用簡單,可以自己嘗試。
title和content都為字符串類型。分別設置為對話框的標題和內容的文字。
10.engines.execScriptFile(path);
通過腳本文件路徑,用一個腳本,啟動另一個腳本,path是字符串是文件保存的路徑,比如從手機sd卡開始找文件夾就用/sdcard/文件夾名/....../文件名.js或者如果想直接找與自己腳本同一文件夾下的腳本文件,就用./腳本名.js表示同一文件夾下的路徑。相對路徑還有別的功能可以自己百度。
11.engines.stopAll();
停止所有在運行的腳本文件,包括腳本自身。
12.exit();
停止當前腳本,關閉前記得釋放需要釋放資源,該功能對懸浮窗等無效。
13.app.launchApp(appName);
appName要打開的app名
通過應用名稱啟動應用。如果該名稱對應的應用不存在,則返回false; 否則返回true。如果該名稱對應多個應用,則只啟動其中某一個。該函數也可以作為全局函數使用。
14.app.launch(packageName);
通過包名啟動app。包名可以在懸浮窗設置中查看到,也可以用app.getPackageName(appName);通過輸入應用名獲取到。
15.app.uninstall(packageName);
通過包名卸載app,會有確認提示框。包名如上。
16.app.openUrl(url);
打開瀏覽器,並打開指定網址的網站,如果沒瀏覽器,會拋出ActivityNotException報錯信息。
17.back();
返回。模仿手機返回鍵效果。
18.home();
桌面。模仿手機主屏幕鍵效果。
19.random(min,max);
隨機數,隨機生成min和max之間的一個整數。輸入min最小數,max最大數。 比如random(0,2);返回0,1,2中任意一個。
20.toastLog(message);
相當於toast(message);log(message)。顯示信息message並在控制台中輸出。把氣泡輸出和打印輸出結合,提高代碼簡潔度。message輸入要打印的信息。
21.device.vibrate(millis);
讓手機振動輸入millis為要振動的時間,單位是毫秒,比如振動一秒的代碼為:device.vibrate(1000);
22.device.keepScreenOn(time);
讓手機屏幕保持常亮,輸入要保持常亮的時間time單位是毫秒,不輸入則為永遠。
23.setClip(text);
設置手機剪貼板的內容,輸入要設置的文字text字符串。
24.getClip()
獲取手機剪貼板內容,返回手機剪貼板上的文字,字符串。
五、自定義函數
1、function
function 代碼名(){
代碼塊內容;
}
2、return
函數可以只有運行內容,但是我們也可以讓他有返回內容。比如說在我們需要獲取到函數運行的結果,或者快速停止函數的時候,我們都會用到return來返回。
3、同c++,函數可重載
六、例子
最后給個簡單應用例子
auto.waitFor();//申請無障礙,如果沒開啟權限,跳轉到無障礙;如果開啟權限,繼續運行
var height = device.height;//將設備分辨率高度賦值給height變量
var width = device.width;
toast("設備寬" + width + "\n" + "設備高" + height + "\n" + "手機型號" + device.model + "\n安卓版本" + device.release)//氣泡輸出設備信息
setScreenMetrics(width, height);//設置腳本坐標點擊所適合的屏幕寬高
var a=10;//聲明變量a
var b= 15;//聲明變量b
if(a==b) toast("a等於b");//if判斷
else toast("a不等於b" + "\n" + "a=" + a + " , b=" + b);
console.show();//控制台懸浮窗
log(a);//懸浮窗輸出a
log(b);
device.vibrate(500);//設備震動
back();//返回
logabc();//自定義函數
function logabc()//自定義函數在控制台輸出a,b,c
{
log("a");
log("b");
log("c");
}
auto.js可以實現很多功能,自己想象。