如果你对第一代API已比较熟悉,本文将引导你如何从第一代API迁移到第二代API。如果你想了解两代API的优缺点。参考第一代api和第二代api的区别
启用第二代API与Node.js引擎
为了向前兼容,Pro 9中的代码仍然默认为旧的Rhino引擎/第一代API运行。要使用第二代API需要特别标识,参考用 node.js 引擎执行代码
从全局变量函数改为导入模块
在第二代API中,所有模块都需要导入才能使用。在第一代API中的全局变量,比如app, images模块,在第二代API中都需要导入后使用,比如:
// 第一代API
app.viewFile(...)
// 第二代API
const app = require('app');
app.viewFile(...)
// 也可以这样只导入需要的函数
const { viewFile } = require('app');
viewFile(...)
第一代API中的全局变量、函数大多数也不能直接使用,比如sleep
, log
, toast
:
// 第一代API
sleep(1000)
log(context.getPackageName())
toast('')
// 第二代API
const { delay } = require('lang');
const { showToast } = require('toast')
async function main() {
await delay(1000);
const context = $autojs.androidContext;
console.log(context.getPackageName());
showToast('Hello');
}
main();
模块与函数对照表
在第二代API中,一部分模块的名称和第一代相似,比如app, color;一部分模块的功能则迁移到其他模块;一部分模块则由Node.js自带模块代替,比如files模块由Node.js的fs和path模块代替;一部分模块则由第三方npm模块代替,这些模块往往更加完善,比如WebSocket由ws模块代替。
以下是各个第一代API模块在第二代API中的对照或代替。需要注意即使模块名字一样,API设计也可能有所不同。比如在第一代API中获取屏幕宽度是device.width
,在第二代API中则是device.screenWdith
。
- app模块 在第二代API中使用app模块。
- base64模块
在第二代API中使用Buffer代替,比如字符串转换base64:
Buffer.from('autojs', 'utf8').toString('base64')
,base64转换为字符串:Buffer.from('YXV0b2pz', 'base64').toString('utf8')
。 - colors模块 在第二代API中使用color模块。
- canvas UI界面中的canvas与旧版canvas类似。暂不支持无Ui界面下使用Canvas。
- console模块
对于
console.log
等函数直接使用即可,无需迁移。设置日志路径等额外参数参考Console。
另外,print
,log
等函数需要使用console.log
代替,不能简写。比如log('hello')
需要替换为console.log('hello')
。
- crypto模块 在第二代API中使用Node.js模块crypto。
- debug模块 在第二代API中暂无代替
- device模块 在第二代API中使用device模块
- dialogs模块 在第二代API中使用dialogs模块。
- engines模块 在第二代API中使用engines模块。
- events模块 第一代API中events模块的事件在第二代API对应如下:
exit
: 用process.on('exit', () => {})
代替
- floaty模块 在第二代API中使用floating_window模块。
- files模块 在第二代API中使用Node.js模块fs和path
- globals全局函数与变量
sleep
使用lang模块中的delay
函数代替,比如await delay(1000)
toast
,toastLog
在toast模块中,比如showToast('hello', {log: true})
,showToast('hello', {log: true})
exit
使用Node.js函数process.exit()
代替random
使用Math.random
代替requiresApi
使用device模块
的requiresAndroidVersion代替requiresAutojsVersion
使用process.versions.autojspro
获取Auto.js版本后判断runtime.requesetPermissions
在ui.Activity中使用this.requesetPermissions
代替runtime.loadJar
,runtime.loadDex
使用$java.loadJar
/$java.loadDex
代替,参加javacontext
使用$autojs.androidContext
代替
- http模块 推荐使用内置的axios模块代替,功能比http模块强大得多
- media 在第二代API中使用media模块。
- plugins 在第二代API中使用plugins模块。
- power_manager 在第二代API中使用power_manager模块。
- sensors 在第二代API中使用sensors模块。
- shell 在第二代API中使用shell模块。
- storages 在第二代API中使用datastore模块。
- settings 在第二代API中使用settings模块。
- threads 参考多线程与异步。
- timers
在第二代API中使用timers模块。实际上
setTimeout
,setInterval
等全局函数在第二代API中也可直接使用。 - work_manager 在第二代API中使用work_manager模块。
- ui 在第二代API中使用ui模块。UI模块由于有较大的API差别。参考UI界面代码迁移
- util 在第二代API中使用Node.js模块util
- WebSocket 使用npm模块ws代替。ws模块比第一代API模块中的WebSocket功能更完整、更强大
- zip 在第二代API中使用zip模块