Autojs這個(gè)工具中,因?yàn)樗旧硎鞘褂玫腞hino引擎開發(fā)的,因此它可以把Android代碼轉(zhuǎn)換成JavaScript語法的代碼來運(yùn)行,Autojs提供了幾個(gè)相關(guān)的方法來輔助運(yùn)行轉(zhuǎn)換后的代碼.
以上四個(gè)方法,單獨(dú)來講一下.
runtime.loadJar(PATH);
PATH是一個(gè) jar包的路徑,可以是相對(duì)路徑,也可是絕對(duì)路徑,但是如果腳本是以普通腳本來運(yùn)行的話,這個(gè)jar包必須是在你手機(jī)的存儲(chǔ)空間內(nèi), 不能是在PC上放著,因?yàn)槟_本的最終執(zhí)行環(huán)境是在手機(jī)上運(yùn)行,如果你把jar包放在PC上的話,腳本執(zhí)行的時(shí)候, 是無法讀取到這個(gè)路徑的,就會(huì)報(bào)錯(cuò).
例如:
runtime.loadJar("/sdcard/腳本/lib/Jsoup-1.2.1.jar");
runtime.loadDex(PATH);
這個(gè)方法是加載一個(gè)dex包,使用方法和loadJar()方法相同.它和loadJar();的不同在于加載速度,loadDex()的加載速度相比loadJar()要快很多,因此建議將jar包轉(zhuǎn)換成dex包后再在autojs中使用.
importClass();
這個(gè)方法是引入安卓的一個(gè)類.這里呢分兩種情況,在我們引入一個(gè)類的時(shí)候,類名可以加上引號(hào),也可以不加.如果我們?cè)谑褂胘ava的核心包的時(shí)候,例如:java.io, 在調(diào)用它里面的類時(shí),就可以不加雙引號(hào).但是如果我們要使用java的擴(kuò)展包就必須加上雙引號(hào)了.否則autojs中可能會(huì)報(bào)錯(cuò).
例如:
importClass(java.io.File);
importClass("javax.net.ssl.SNIServerName");
importPackage();
引入一個(gè)包使用方法同上.
例如:
importPackage(java.io);
importPackage("javax.net.ssl");
在java或者android代碼中,會(huì)有變量的類型一說.因?yàn)樗鼈兪菑?qiáng)語言類型,但是JavaScript是弱語言類型,聲明變量只有 let var const或者直接寫一個(gè)變量,這個(gè)變量是什么類型完全看給它賦的什么值.因此我們?cè)赼utojs中定義變量時(shí),不需要管轉(zhuǎn)換之前這個(gè)變量是什么類型, 直接甩一個(gè)var全部搞定.
例如在java代碼中這些寫:
import java.io.File
File f = new File("/sdcard/1.txt");
那么轉(zhuǎn)換成JavaScript代碼運(yùn)行后則可以這樣寫.
importClass(java.io.File);
var f = new File("/sdcard/1.txt");
或者
var f = new java.io.File("/sdcard/1.txt");
另外在定義數(shù)組的時(shí)候,如果java中聲明了數(shù)組的類型,比如一個(gè)字節(jié)數(shù)組
byte[] arr = new byte[8];
上面的代碼的意思是定義一個(gè)長(zhǎng)度為8的字節(jié)數(shù)組,那如果按照常規(guī)的思路轉(zhuǎn)換成JavaScript代碼后是這樣的.
var arr = new Array(8);
這是在JavaScript中定義一個(gè)長(zhǎng)度為8的數(shù)組.但是如果在轉(zhuǎn)換java代碼中這樣來定義一個(gè)byte數(shù)組就不對(duì)了,對(duì)于這種情況,在autojs中應(yīng)該使用下面的方法來定義一個(gè)byte數(shù)組.
var arr = util.java.array('byte', 8);
那下面我們通過一小段java代碼來實(shí)戰(zhàn)轉(zhuǎn)換一下成為JavaScript代碼在autojs中運(yùn)行.
JAVA代碼:
import java.io.File;
import java.util.ArrayList;
public class FileTest {
private static ArrayList
轉(zhuǎn)換后的JavaScript代碼(可在Autojs中運(yùn)行的)
importClass(java.io.File);
importClass(java.util.ArrayList);
var filelist = new ArrayList();
main();
function main() {
var filePath = "/sdcard/腳本/";
getFiles(filePath);
}
function getFiles(filePath) {
var root = new File(filePath);
var files = root.listFiles();
for (let file in files) {
if (files[file].isDirectory()){
getFiles(files[file].getAbsolutePath());
filelist.add(files[file].getAbsolutePath());
console.log("顯示"+filePath+"下所有子目錄及其文件"+files[file].getAbsolutePath());
} else {
console.log("顯示"+filePath+"下所有子目錄"+files[file].getAbsolutePath());
}
}
}
以上就是在Autojs中把java或者android代碼轉(zhuǎn)換成autojs可執(zhí)行的JavaScript代碼的方法.這是最簡(jiǎn)單最基礎(chǔ)的一些方法,這些掌握了,你需要熟悉大量的安卓api,才能熟練轉(zhuǎn)換.并非說看完本文即可快速上手進(jìn)行轉(zhuǎn)換. 另外本人并不屬性安卓的開發(fā),如果某些術(shù)語表達(dá)的不準(zhǔn)確,請(qǐng)見諒.
如果這篇文章有幫到您, 請(qǐng)動(dòng)手點(diǎn)個(gè)贊在走,謝謝
-
Android
+關(guān)注
關(guān)注
12文章
3935瀏覽量
127339 -
javascript
+關(guān)注
關(guān)注
0文章
516瀏覽量
53850 -
Rhino
+關(guān)注
關(guān)注
0文章
4瀏覽量
6788
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論