本文介绍如何在Android和iOS侧自定义Native插件,并供Doric调用。
本文以定义一个原生的加法器举例.
步骤
- 在Doric TS侧定义好TS语言的API
- 在Android和iOS端根据定义的API实现相应功能
- 在Doric TS代码中调用TS API
JS API
首先需要定义JS部分的API,注意此处API定义的名称需要在接下来Android和iOS的开发中保持一致。
定义API如下,context
参数代表JS环境上下文在调用时直接传入即可。nativeAdd
参数为first
,second
,都是number
类型,返回值为number
类型的Promise
。
context.callNative
方法参数1为插件名,参数2为插件内方法名,参数3为插件方法接收的参数。
请注意,对于有返回值的Plugin,其返回值都为Promise
类型,即异步返回。
export function examplePlugin(context: BridgeContext) { |
Android
- 新建Plugin类,如下:
/**
* 此处注解值name对应TS步骤中的插件名
*/
"examplePlugin") (name =
public class DoricExamplePlugin extends DoricJavaPlugin {
public DoricExamplePlugin(DoricContext doricContext) {
super(doricContext);
}
/**
* 方法名nativeAdd对应TS步骤中的插件方法名,需要加上DoricMethod注解
* @param argument 从TS侧传入的插件方法接收参数,即 { first, second }
* @param promise DoricPromise封装类,用于JS Promise回调。
*/
public void nativeAdd(JSObject argument, DoricPromise promise) {
try {
// 取值
double first = argument.getProperty("first").asNumber().toDouble();
// 取值
double second = argument.getProperty("second").asNumber().toDouble();
// 返回值
JavaValue returnValue = new JavaValue(first + second);
// 传回返回值
promise.resolve(returnValue);
} catch (Exception e) {
// 出错,回调
promise.reject(new JavaValue(e.getLocalizedMessage()));
}
}
} - 在对应的
DoricLibrary
类中进行注册。
public class MyLibrary extends DoricLibrary {
public void load(DoricRegistry registry) {
registry.registerNativePlugin(DoricExamplePlugin.class);
}
} - 结束Android部分的开发,重新编译代码并安装运行。
iOS
- 新建Plugin类,如下:
@interface DoricExamplePlugin : DoricNativePlugin |
1.在对应的DoricLibrary
类中进行注册。
@implementation DemoLibrary |
1.结束iOS部分的开发,重新编译代码并安装运行。
TypeScript调用
使用时,调用JS API即可。
examplePlugin(context).nativeAdd(1,2).then(result=>{ |
或者使用await
,async
方式调用
async function callNativeExamplePlugin() { |