Autojs這個工具中,因為它本身是使用的Rhino引擎開發(fā)的,因此它可以把Android代碼轉(zhuǎn)換成JavaScript語法的代碼來運(yùn)行,Autojs提供了幾個相關(guān)的方法來輔助運(yùn)行轉(zhuǎn)換后的代碼.
以上四個方法,單獨來講一下.
runtime.loadJar(PATH);
PATH是一個 jar包的路徑,可以是相對路徑,也可是絕對路徑,但是如果腳本是以普通腳本來運(yùn)行的話,這個jar包必須是在你手機(jī)的存儲空間內(nèi), 不能是在PC上放著,因為腳本的最終執(zhí)行環(huán)境是在手機(jī)上運(yùn)行,如果你把jar包放在PC上的話,腳本執(zhí)行的時候, 是無法讀取到這個路徑的,就會報錯.
例如:
runtime.loadJar("/sdcard/腳本/lib/Jsoup-1.2.1.jar");
runtime.loadDex(PATH);
這個方法是加載一個dex包,使用方法和loadJar()方法相同.它和loadJar();的不同在于加載速度,loadDex()的加載速度相比loadJar()要快很多,因此建議將jar包轉(zhuǎn)換成dex包后再在autojs中使用.
importClass();
這個方法是引入安卓的一個類.這里呢分兩種情況,在我們引入一個類的時候,類名可以加上引號,也可以不加.如果我們在使用java的核心包的時候,例如:java.io, 在調(diào)用它里面的類時,就可以不加雙引號.但是如果我們要使用java的擴(kuò)展包就必須加上雙引號了.否則autojs中可能會報錯.
例如:
importClass(java.io.File);
importClass("javax.net.ssl.SNIServerName");
importPackage();
引入一個包使用方法同上.
例如:
importPackage(java.io);
importPackage("javax.net.ssl");
在java或者android代碼中,會有變量的類型一說.因為它們是強(qiáng)語言類型,但是JavaScript是弱語言類型,聲明變量只有 let var const或者直接寫一個變量,這個變量是什么類型完全看給它賦的什么值.因此我們在autojs中定義變量時,不需要管轉(zhuǎn)換之前這個變量是什么類型, 直接甩一個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ù)組的時候,如果java中聲明了數(shù)組的類型,比如一個字節(jié)數(shù)組
byte[] arr = new byte[8];
上面的代碼的意思是定義一個長度為8的字節(jié)數(shù)組,那如果按照常規(guī)的思路轉(zhuǎn)換成JavaScript代碼后是這樣的.
var arr = new Array(8);
這是在JavaScript中定義一個長度為8的數(shù)組.但是如果在轉(zhuǎn)換java代碼中這樣來定義一個byte數(shù)組就不對了,對于這種情況,在autojs中應(yīng)該使用下面的方法來定義一個byte數(shù)組.
var arr = util.java.array('byte', 8);
那下面我們通過一小段java代碼來實戰(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代碼的方法.這是最簡單最基礎(chǔ)的一些方法,這些掌握了,你需要熟悉大量的安卓api,才能熟練轉(zhuǎn)換.并非說看完本文即可快速上手進(jìn)行轉(zhuǎn)換. 另外本人并不屬性安卓的開發(fā),如果某些術(shù)語表達(dá)的不準(zhǔn)確,請見諒.
如果這篇文章有幫到您, 請動手點個贊在走,謝謝
-
Android
+關(guān)注
關(guān)注
12文章
3936瀏覽量
127403 -
javascript
+關(guān)注
關(guān)注
0文章
516瀏覽量
53865 -
Rhino
+關(guān)注
關(guān)注
0文章
4瀏覽量
6790
發(fā)布評論請先 登錄
相關(guān)推薦
評論