如何将Android代码转换成JS代码运行

描述

Autojs这个工具中,因为它本身是使用的Rhino引擎开发的,因此它可以把Android代码转换成JavaScript语法的代码来运行,Autojs提供了几个相关的方法来辅助运行转换后的代码.

  • runtime.loadJar();
  • runtime.loadDex();
  • importClass();
  • importPackage();

以上四个方法,单独来讲一下.

runtime.loadJar(PATH);

PATH是一个 jar包的路径,可以是相对路径,也可是绝对路径,但是如果脚本是以普通脚本来运行的话,这个jar包必须是在你手机的存储空间内, 不能是在PC上放着,因为脚本的最终执行环境是在手机上运行,如果你把jar包放在PC上的话,脚本执行的时候, 是无法读取到这个路径的,就会报错.

例如:

runtime.loadJar("/sdcard/脚本/lib/Jsoup-1.2.1.jar");

runtime.loadDex(PATH);

这个方法是加载一个dex包,使用方法和loadJar()方法相同.它和loadJar();的不同在于加载速度,loadDex()的加载速度相比loadJar()要快很多,因此建议将jar包转换成dex包后再在autojs中使用.

importClass();

这个方法是引入安卓的一个类.这里呢分两种情况,在我们引入一个类的时候,类名可以加上引号,也可以不加.如果我们在使用java的核心包的时候,例如:java.io, 在调用它里面的类时,就可以不加双引号.但是如果我们要使用java的扩展包就必须加上双引号了.否则autojs中可能会报错.

例如:

importClass(java.io.File);
importClass("javax.net.ssl.SNIServerName");

importPackage();

引入一个包使用方法同上.

例如:

importPackage(java.io);
importPackage("javax.net.ssl");

在java或者android代码中,会有变量的类型一说.因为它们是强语言类型,但是JavaScript是弱语言类型,声明变量只有 let var const或者直接写一个变量,这个变量是什么类型完全看给它赋的什么值.因此我们在autojs中定义变量时,不需要管转换之前这个变量是什么类型, 直接甩一个var全部搞定.

例如在java代码中这些写:

import java.io.File
File f = new File("/sdcard/1.txt");

那么转换成JavaScript代码运行后则可以这样写.

importClass(java.io.File);
var f = new File("/sdcard/1.txt");

或者

var f = new java.io.File("/sdcard/1.txt");

另外在定义数组的时候,如果java中声明了数组的类型,比如一个字节数组

byte[] arr = new byte[8];

上面的代码的意思是定义一个长度为8的字节数组,那如果按照常规的思路转换成JavaScript代码后是这样的.

var arr = new Array(8);

这是在JavaScript中定义一个长度为8的数组.但是如果在转换java代码中这样来定义一个byte数组就不对了,对于这种情况,在autojs中应该使用下面的方法来定义一个byte数组.

var arr = util.java.array('byte', 8);

那下面我们通过一小段java代码来实战转换一下成为JavaScript代码在autojs中运行.

JAVA代码:

import java.io.File;
import java.util.ArrayList;

public class FileTest {
 private static ArrayList

转换后的JavaScript代码(可在Autojs中运行的)

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代码转换成autojs可执行的JavaScript代码的方法.这是最简单最基础的一些方法,这些掌握了,你需要熟悉大量的安卓api,才能熟练转换.并非说看完本文即可快速上手进行转换. 另外本人并不属性安卓的开发,如果某些术语表达的不准确,请见谅.

如果这篇文章有帮到您, 请动手点个赞在走,谢谢

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分