接口: Java
globals.Java
目录
方法
- boxBoolean
- boxByte
- boxChar
- boxDouble
- boxFloat
- boxInt
- boxLong
- boxShort
- create
- createSync
- defineClass
- findClass
- findClassOrNull
- loadDex
- loadJar
- setDefaultThreadMode
- setThreadMode
- wrap
方法
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));
参数
名称 | 类型 |
---|---|
value | number |
返回值
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));
参数
名称 | 类型 |
---|---|
value | number |
返回值
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));
参数
名称 | 类型 |
---|---|
value | number |
返回值
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));
参数
名称 | 类型 |
---|---|
value | number |
返回值
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));
参数
名称 | 类型 |
---|---|
value | number |
返回值
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));
参数
名称 | 类型 |
---|---|
value | number |
返回值
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));
参数
名称 | 类型 |
---|---|
value | number |
返回值
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));
参数
名称 | 类型 |
---|---|
value | number |
返回值
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();
参数
名称 | 类型 | 默认值 | 描述 |
---|---|---|---|
constructor | any | undefined | Java类构造函数,若constructor不是Java类构造函数,则抛出TypeError。 |
args | any [] | undefined | 构造参数 |
threadMode | ThreadMode | 'current' | 线程模式 |
返回值
Promise
<any
>
createSync
▸ createSync(constructor
, args
, threadMode?
): any
类似于create,但不返回Promise,而是阻塞等待Java对象创建完成并返回该对象。因此一般不建议使用该函数,除非你清楚你在做什么。
参数
名称 | 类型 | 默认值 | 描述 |
---|---|---|---|
constructor | any | undefined | Java类构造函数,若constructor不是Java类构造函数,则抛出TypeError。 |
args | any [] | undefined | 构造参数 |
threadMode | ThreadMode | '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类的相应方法。
参数
名称 | 类型 | 描述 |
---|---|---|
jsClass | C | JavaScript类 |
options? | DefineClassOptions | 选项,用于指定生成类的包名、要实现的Java接口等。 |
返回值
Promise
<C
>
findClass
▸ findClass(name
): any
搜索类名为name为Java类并加载它,返回该Java类。
返回的Java类实际上是一个javascript的构造函数,通过他可以构造一个Java对象,也可以访问Java类的静态方法。
如果要搜索内部类,需要使用'Builder')`。
若找不到对应的类,抛出ClassNotFoundError
。
示例
"nodejs";
const $java = $autojs.java;
const Integer = $java.findClass('java.lang.Integer');
const int = new Integer(255);
console.log(Integer.toHexString(int));
参数
名称 | 类型 | 描述 |
---|---|---|
name | string | 完整Java类名 |
返回值
any
Java类
findClassOrNull
▸ findClassOrNull(name
): any
类似于findClass,区别只在于,找不到类时返回null而不是抛出异常。
参见
参数
名称 | 类型 | 描述 |
---|---|---|
name | string | 类名 |
返回值
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);
参数
名称 | 类型 | 描述 |
---|---|---|
dexFile | string | dex文件路径 |
返回值
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);
参数
名称 | 类型 | 描述 |
---|---|---|
jarFile | string | jar文件路径 |
返回值
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');
参数
名称 | 类型 | 描述 |
---|---|---|
clazz | any | Java类 |
threadMode | ThreadMode | 线程模式 |
返回值
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');
})();
参数
名称 | 类型 | 描述 |
---|---|---|
obj | any | Java对象 |
threadMode | ThreadMode | 线程模式 |
返回值
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 |
参数
名称 | 类型 | 默认值 | 描述 |
---|---|---|---|
obj | T | undefined | JavaScript对象 |
sync? | Boolean | false | 是否同步阻塞调用 |
返回值
T