当前不支持动态加载设备侧的二进制包;可以使用动态import进行异步加载,达到类似于Class.forName()反射的效果。
示例如下,hap动态import harlibrary,并调用静态成员函数staticAdd()、实例成员函数instanceAdd(),以及全局方法addHarLibrary()。
// harlibrary的src/main/ets/utils/Calc.ets
export class Calc {
public constructor() {
}
public static staticAdd(a: number, b: number): number {
let c = a + b;
console.log("DynamicImport I'm harLibrary in staticAdd, %d + %d = %d", a, b, c);
return c;
}
public instanceAdd(a: number, b: number): number {
let c = a + b;
console.log("DynamicImport I'm harLibrary in instanceAdd, %d + %d = %d", a, b, c);
return c;
}
}
export function addHarLibrary(a: number, b: number): number {
let c = a + b;
console.log("DynamicImport I'm harLibrary in addHarLibrary, %d + %d = %d", a, b, c);
return c;
}
// harlibrary的index.ets
export { Calc, addHarLibrary } from './src/main/ets/utils/Calc';
// hap的index.ets
let harLibrary = 'harlibrary';
import(harLibrary).then((ns: ESObject) => { // 动态import变量是新增特性,入参换成字符串'harlibrary'是现有特性。也可使用await import方式。
ns.Calc.staticAdd(7, 8); // 反射调用静态成员函数staticAdd()
let calc: ESObject = new ns.Calc(); // 实例化类Calc
calc.instanceAdd(8, 9); // 调用实例成员函数instanceAdd()
ns.addHarLibrary(6, 7); // 调用全局方法addHarLibrary()
});