0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

汽车电子技术 来源:安卓脚本 作者:Dcrclub 2023-03-03 14:05 次阅读

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,才能熟练转换.并非说看完本文即可快速上手进行转换. 另外本人并不属性安卓的开发,如果某些术语表达的不准确,请见谅.

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

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

    关注

    12

    文章

    3851

    浏览量

    125642
  • javascript
    +关注

    关注

    0

    文章

    511

    浏览量

    53403
  • Rhino
    +关注

    关注

    0

    文章

    4

    浏览量

    6757
收藏 人收藏

    评论

    相关推荐

    在芯片内部是如何将程序的0或1转换成高低电平的?

    在芯片(或者说在单片机内部)内部是如何将程序的0或1转换成物理的高低电平的?
    发表于 05-19 00:36

    如何将歌曲简谱的音符转换成汇编代码

    我有两个转换器但是都是转换成C语言的音乐代码,没有汇编的。如图,那些DB的16进制是怎么来的,求过程。高了好几天都没搞懂。。。。。
    发表于 10-28 17:34

    如何将一维字符数组转换成字符串输出

    望大神解惑如何将一维字符数组转换成字符串输出
    发表于 05-02 10:36

    Multisim 如何将电路图转换成Ultiboard 可以识别的文件

    求助Multisim 如何将电路图转换成Ultiboard 可以识别的文件
    发表于 07-04 13:37

    如何将char型指针强制转换成UCHAR型指针

    如何将char型指针强制转换成UCHAR型指针??????、、
    发表于 12-21 15:51

    如何将浮点转换成PSOC5上的字符串?

    缺氧缺血性脑病,有没有人知道如何将浮点转换成PSOC5(GCC编译器)上的字符串?我想把浮点转换成字符串,这样我就可以在我的GLCD上显示,它具有只显示字符串类型的库函数。 以上来自于百度翻译
    发表于 03-28 06:55

    HDL如何转换成RTL视图?

    先生,我是DTU的第三年ECE学生。我想问一下HDL(Code)如何转换成RTL视图..?主席先生,是任何转换给定RTL视图(用户定义)转换为HDL
    发表于 03-23 10:05

    如何将数组转换成整形数值

    labview中将一维数组转换成对应的整型数值呢?...可能我描述的不清楚,就像图上显示的那样,如何将labview中那个100,200的一维数组转换成PLC监控到的10进制双字的 13107300那个值呢?
    发表于 08-26 00:23

    如何将陀螺仪的原始数据转换成角速度呢

    我正在使用 lsm6dsl 传感器。我正在获取有关寄存器的数据。如何将原始数据转换成角度
    发表于 12-15 08:19

    单片机如何将磁场转换成电流呢?

    单片机如何将磁场转换成电流呢?
    发表于 04-13 10:08

    如何将一个INT型数据转换成2个CHAR型数据?

    如何将一个INT型数据转换成2个CHAR型数据?
    发表于 11-03 06:20

    如何将pads2007转换成cadence文件

    pads2007转cadence:如何将pads2007转换成cadence文件
    发表于 09-14 09:55 0次下载
    <b class='flag-5'>如何将</b>pads2007<b class='flag-5'>转换成</b>cadence文件

    探析源代码如何在硬件上运行

    C语言的编译链接过程要把我们编写的一个c程序(源代码转换成可以在硬件上运行的程序(可执行代码),需要进行编译和链接。
    的头像 发表于 01-07 16:22 3541次阅读
    探析源<b class='flag-5'>代码</b>如何在硬件上<b class='flag-5'>运行</b>

    如何将RMS噪声转换成峰峰值噪声

    ADI公司的Matt Duff就如何将RMS噪声转换成峰峰值噪声进行说明。
    的头像 发表于 06-12 06:20 8128次阅读

    如何将Protel DXP转换成Gerber详细教程免费下载

    本文档的主要内容详细介绍的是如何将Protel DXP转换成Gerber详细教程资料免费下载。
    发表于 08-09 16:36 0次下载
    <b class='flag-5'>如何将</b>Protel DXP<b class='flag-5'>转换成</b>Gerber详细教程免费下载