0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何將Android代碼轉(zhuǎn)換成JS代碼運(yùn)行

汽車電子技術(shù) ? 來源:安卓腳本 ? 作者:Dcrclub ? 2023-03-03 14:05 ? 次閱讀

Autojs這個工具中,因為它本身是使用的Rhino引擎開發(fā)的,因此它可以把Android代碼轉(zhuǎn)換成JavaScript語法的代碼來運(yùn)行,Autojs提供了幾個相關(guān)的方法來輔助運(yùn)行轉(zhuǎn)換后的代碼.

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

以上四個方法,單獨來講一下.

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)確,請見諒.

如果這篇文章有幫到您, 請動手點個贊在走,謝謝

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(liá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
收藏 人收藏

    評論

    相關(guān)推薦

    在芯片內(nèi)部是如何將程序的0或1轉(zhuǎn)換成高低電平的?

    在芯片(或者說在單片機(jī)內(nèi)部)內(nèi)部是如何將程序的0或1轉(zhuǎn)換成物理的高低電平的?
    發(fā)表于 05-19 00:36

    如何將歌曲簡譜的音符轉(zhuǎn)換成匯編代碼

    我有兩個轉(zhuǎn)換器但是都是轉(zhuǎn)換成C語言的音樂代碼,沒有匯編的。如圖,那些DB的16進(jìn)制是怎么來的,求過程。高了好幾天都沒搞懂。。。。。
    發(fā)表于 10-28 17:34

    如何將一維字符數(shù)組轉(zhuǎn)換成字符串輸出

    望大神解惑如何將一維字符數(shù)組轉(zhuǎn)換成字符串輸出
    發(fā)表于 05-02 10:36

    Multisim 如何將電路圖轉(zhuǎn)換成Ultiboard 可以識別的文件

    求助Multisim 如何將電路圖轉(zhuǎn)換成Ultiboard 可以識別的文件
    發(fā)表于 07-04 13:37

    如何將char型指針強(qiáng)制轉(zhuǎn)換成UCHAR型指針

    如何將char型指針強(qiáng)制轉(zhuǎn)換成UCHAR型指針??????、、
    發(fā)表于 12-21 15:51

    HDL如何轉(zhuǎn)換成RTL視圖?

    先生,我是DTU的第三年ECE學(xué)生。我想問一下HDL(Code)如何轉(zhuǎn)換成RTL視圖..?主席先生,是任何轉(zhuǎn)換給定RTL視圖(用戶定義)轉(zhuǎn)換為HDL
    發(fā)表于 03-23 10:05

    如何將數(shù)組轉(zhuǎn)換成整形數(shù)值

    labview中將一維數(shù)組轉(zhuǎn)換成對應(yīng)的整型數(shù)值呢?...可能我描述的不清楚,就像圖上顯示的那樣,如何將labview中那個100,200的一維數(shù)組轉(zhuǎn)換成PLC監(jiān)控到的10進(jìn)制雙字的 13107300那個值呢?
    發(fā)表于 08-26 00:23

    如何將陀螺儀的原始數(shù)據(jù)轉(zhuǎn)換成角速度呢

    我正在使用 lsm6dsl 傳感器。我正在獲取有關(guān)寄存器的數(shù)據(jù)。如何將原始數(shù)據(jù)轉(zhuǎn)換成角度
    發(fā)表于 12-15 08:19

    單片機(jī)如何將磁場轉(zhuǎn)換成電流呢?

    單片機(jī)如何將磁場轉(zhuǎn)換成電流呢?
    發(fā)表于 04-13 10:08

    如何將一個INT型數(shù)據(jù)轉(zhuǎn)換成2個CHAR型數(shù)據(jù)?

    如何將一個INT型數(shù)據(jù)轉(zhuǎn)換成2個CHAR型數(shù)據(jù)?
    發(fā)表于 11-03 06:20

    如何將pads2007轉(zhuǎn)換成cadence文件

    pads2007轉(zhuǎn)cadence:如何將pads2007轉(zhuǎn)換成cadence文件
    發(fā)表于 09-14 09:55 ?0次下載
    <b class='flag-5'>如何將</b>pads2007<b class='flag-5'>轉(zhuǎn)換成</b>cadence文件

    數(shù)學(xué)原理:如何將ADC代碼轉(zhuǎn)換為電壓(第1篇)

    許多初步了解模數(shù)轉(zhuǎn)換器(ADC)的人想知道如何將ADC代碼轉(zhuǎn)換為電壓?;蛘撸麄兊膯栴}是針對特定應(yīng)用,例如:如何將ADC
    發(fā)表于 04-18 03:30 ?4063次閱讀

    如何將頻譜噪聲密度轉(zhuǎn)換成均方根噪聲的操作方法分析

    ADI公司的Matt Duff就如何將頻譜噪聲密度(nV/√Hertz)轉(zhuǎn)換成均方根噪聲(mV rms)進(jìn)行說明。
    的頭像 發(fā)表于 06-13 06:00 ?9246次閱讀

    如何將RMS噪聲轉(zhuǎn)換成峰峰值噪聲

    ADI公司的Matt Duff就如何將RMS噪聲轉(zhuǎn)換成峰峰值噪聲進(jìn)行說明。
    的頭像 發(fā)表于 06-12 06:20 ?8748次閱讀

    如何將Protel DXP轉(zhuǎn)換成Gerber詳細(xì)教程免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是如何將Protel DXP轉(zhuǎn)換成Gerber詳細(xì)教程資料免費(fèi)下載。
    發(fā)表于 08-09 16:36 ?0次下載
    <b class='flag-5'>如何將</b>Protel DXP<b class='flag-5'>轉(zhuǎn)換成</b>Gerber詳細(xì)教程免費(fèi)下載