跳至主要內容

接口: Java

约 2137 字大约 7 分钟道无涯

globals.Java

目录

方法

方法

boxBoolean

boxBoolean(value): any

包装为java.lang.Boolean的包装类,在调用有重载的Java方法时可以避免混淆,从而确定地调用参数类型为boolean或java.lang.Boolean的方法。

示例

"nodejs";
require('rhino').install();
const $java = $autojs.java;

const values = new android.content.ContentValues();
// public void put(String key, Boolean value)
values.put("key", $java.boxBoolean(true));

参数

名称类型
valuenumber

返回值

any


boxByte

boxByte(value): any

包装为java.lang.Byte的包装类,在调用有重载的Java方法时可以避免混淆,从而确定地调用参数类型为byte或java.lang.Byte的方法。

示例

"nodejs";
require('rhino').install();
const $java = $autojs.java;

const values = new android.content.ContentValues();
// public void put(String key, Byte value)
values.put("key", $java.boxByte(1));

参数

名称类型
valuenumber

返回值

any


boxChar

boxChar(value): any

包装为java.lang.Char的包装类,在调用有重载的Java方法时可以避免混淆,从而确定地调用参数类型为char或java.lang.Char的方法。

示例

"nodejs";
require('rhino').install();
const $java = $autojs.java;

const values = new android.content.ContentValues();
// public void put(String key, Char value)
values.put("key", $java.boxChar(1));

参数

名称类型
valuenumber

返回值

any


boxDouble

boxDouble(value): any

包装为java.lang.Double的包装类,在调用有重载的Java方法时可以避免混淆,从而确定地调用参数类型为double或java.lang.Double的方法。

示例

"nodejs";
require('rhino').install();
const $java = $autojs.java;

const values = new android.content.ContentValues();
// public void put(String key, Double value)
values.put("key", $java.boxDouble(1));

参数

名称类型
valuenumber

返回值

any


boxFloat

boxFloat(value): any

包装为java.lang.Float的包装类,在调用有重载的Java方法时可以避免混淆,从而确定地调用参数类型为float或java.lang.Float的方法。

示例

"nodejs";
require('rhino').install();
const $java = $autojs.java;

const values = new android.content.ContentValues();
// public void put(String key, Float value)
values.put("key", $java.boxFloat(1));

参数

名称类型
valuenumber

返回值

any


boxInt

boxInt(value): any

包装为java.lang.Integer的包装类,在调用有重载的Java方法时可以避免混淆,从而确定地调用参数类型为int或java.lang.Integer的方法。

示例

"nodejs";
require('rhino').install();
const $java = $autojs.java;

const values = new android.content.ContentValues();
// public void put(String key, Integer value)
values.put("key", $java.boxInt(1));

参数

名称类型
valuenumber

返回值

any


boxLong

boxLong(value): any

包装为java.lang.Long的包装类,在调用有重载的Java方法时可以避免混淆,从而确定地调用参数类型为long或java.lang.Long的方法。

示例

"nodejs";
require('rhino').install();
const $java = $autojs.java;

const values = new android.content.ContentValues();
// public void put(String key, Long value)
values.put("key", $java.boxLong(1));

参数

名称类型
valuenumber

返回值

any


boxShort

boxShort(value): any

包装为java.lang.Short的包装类,在调用有重载的Java方法时可以避免混淆,从而确定地调用参数类型为short或java.lang.Short的方法。

示例

"nodejs";
require('rhino').install();
const $java = $autojs.java;

const values = new android.content.ContentValues();
// public void put(String key, Short value)
values.put("key", $java.boxShort(1));

参数

名称类型
valuenumber

返回值

any


create

create(constructor, args, threadMode?): Promise<any>

在指定在线程上中创建相应的Java对象并返回Promise。例如某些Android UI相关对象需要在UI线程创建。

示例

"nodejs";
const $java = $autojs.java;
const View = $java.findClass('android.view.View');
const context = $autojs.androidContext;

async function main() {
    const view = await $java.create(View, [context], 'ui');
    console.log(view);
}
main();

参数

名称类型默认值描述
constructoranyundefinedJava类构造函数,若constructor不是Java类构造函数,则抛出TypeError。
argsany[]undefined构造参数
threadModeThreadMode'current'线程模式

返回值

Promise<any>


createSync

createSync(constructor, args, threadMode?): any

类似于create,但不返回Promise,而是阻塞等待Java对象创建完成并返回该对象。因此一般不建议使用该函数,除非你清楚你在做什么。

参数

名称类型默认值描述
constructoranyundefinedJava类构造函数,若constructor不是Java类构造函数,则抛出TypeError。
argsany[]undefined构造参数
threadModeThreadMode'current'线程模式

返回值

any


defineClass

defineClass(jsClass, options?): Promise<C>

动态从给定的JavaScript类生成一个Java类。可在JavaScript类中覆写父类的方法,实现一些Java接口的方法。通常用于继承抽象类或重写某些类的方法。

比如可继承android.webkit.MyWebViewClient并重写shouldOverrideUrlLoading方法拦截请求。

本方法是动态生成dex实现的,有一定耗时,需要异步等待,第二次调用时可复用上次生成的dex。默认生成的dex文件位于当前目录下的.codecache目录中,可以通过cacheDexFile指定其他路径。

注意,若只是为了实现Java接口,则无需使用本方法,直接使用类似new View.OnClickListener(\{onClick: () => {}\})的方式即可。

示例

"nodejs";
require('rhino').install();
const $java = $autojs.java;

async function main() {
  const MyWebViewClient = await $java.defineClass(
     class MyWebViewClient extends android.webkit.WebViewClient {
         
         shouldOverrideUrlLoading(webview, url) {
              if (typeof(url) === 'string') {
                  console.log(url);
              }
              return false;
         }
    }
  );
  const client = new MyWebViewClient();
  // ...
}
main().catch(console.error);

给定一个JavaScript类,让它继承自某个Java类,并实现给定的Java接口。将生成一个相应的类,从而可在给定的JavaScript类中覆写Java类的相应方法。

参数

名称类型描述
jsClassCJavaScript类
options?DefineClassOptions选项,用于指定生成类的包名、要实现的Java接口等。

返回值

Promise<C>


findClass

findClass(name): any

搜索类名为name为Java类并加载它,返回该Java类。

返回的Java类实际上是一个javascript的构造函数,通过他可以构造一个Java对象,也可以访问Java类的静态方法。

如果要搜索内部类,需要使用'符号,比如findClass(android.app.AlertDialog'符号,比如`findClass('android.app.AlertDialogBuilder')`。

若找不到对应的类,抛出ClassNotFoundError

示例

"nodejs";
const $java = $autojs.java;
const Integer = $java.findClass('java.lang.Integer');
const int = new Integer(255);
console.log(Integer.toHexString(int));

参数

名称类型描述
namestring完整Java类名

返回值

any

Java类


findClassOrNull

findClassOrNull(name): any

类似于findClass,区别只在于,找不到类时返回null而不是抛出异常。

参见

findClass

参数

名称类型描述
namestring类名

返回值

any

Java类或者null


loadDex

loadDex(dexFile): Promise<void>

异步加载Dex文件,加载后该Dex中的类将可以在JavaScript使用。

注意,务必使用await等方式等待加载完成,在加载未完成时,无法访问dex中的Java类。

示例

"nodejs";
const $java = $autojs.java;
require('rhino').install();

async function main() {
   await $java.loadDex('/sdcard/mydex.dex');
   console.log(new com.example.MyClass());
}
main().catch(console.error);

参数

名称类型描述
dexFilestringdex文件路径

返回值

Promise<void>


loadJar

loadJar(jarFile): Promise<void>

异步加载jar文件,加载后该jar中的类将可以在JavaScript使用。

注意,务必使用await等方式等待加载完成,在加载未完成时,无法访问jar中的Java类。

加载jar实际上是通过将jar转为dex后再加载dex实现的,若jar中出现当前运行的Android环境不支持的指令等情况,则会加载失败,因此在有条件的情况下建议事先转换为dex再加载,提高加载效率和成功率。

示例

"nodejs";
const $java = $autojs.java;
require('rhino').install();

async function main() {
   await $java.loadJar('/sdcard/myjar.jar');
   console.log(new com.example.MyClass());
}
main().catch(console.error);

参数

名称类型描述
jarFilestringjar文件路径

返回值

Promise<void>


setDefaultThreadMode

setDefaultThreadMode(clazz, threadMode): any

设置Java类的默认线程模式。设置后创建该Java类新的Java对象时,默认使用该线程模式。对之前已经创建的Java对象无影响。

示例

"nodejs";
const $java = $autojs.java;
const View = $java.findClass('android.view.View');
$java.setDefaultThreadMode(View, 'ui');

参数

名称类型描述
clazzanyJava类
threadModeThreadMode线程模式

返回值

any


setThreadMode

setThreadMode(obj, threadMode): any

设置Java对象的线程模式。设置后该Java对象的所有函数调用,均会切换到执行的线程运行,若非当前线程,则这些函数调用会返回Promise。

示例

"nodejs";
const $java = $autojs.java;
const TextView = $java.findClass('android.widget.TextView');
(async () => {
    const textView = await $java.create(TextView, [$autojs.androidContext], 'ui');
    $java.setThreadMode(textView, 'ui');
    await textView.setText('Hello World');
})();

参数

名称类型描述
objanyJava对象
threadModeThreadMode线程模式

返回值

any


wrap

wrap<T>(obj, sync?): T

包装相应的JavaScript对象,让其返回的新对象的函数被Java调用时,自动切换到JavaScript所在线程。若sync为true,则这些函数会在调用时阻塞等待JavaScript线程返回,并将其值返回给Java。

通常用于设置一些不在JavaScript线程调用的Java回调。

示例

"nodejs";
const $java = $autojs.java;
const Button = $java.findClass('android.widget.Button');
(async () => {
    const button = await $java.create(Button, [$autojs.androidContext], 'ui');
    $java.setThreadMode(button, 'ui');
    button.setOnClickListener($java.wrap(() => {
       console.log('click');
    }));
    button.setOnLongClickListener($java.wrap({
         onLongClick: () => {
            console.log('long click');
            return true;
         },
    }, true));
})();

类型参数

名称
T

参数

名称类型默认值描述
objTundefinedJavaScript对象
sync?Booleanfalse是否同步阻塞调用

返回值

T