是否支持模块的动态加载?如何实现

是否支持模块的动态加载?如何实现

HarmonyOS
2024-03-17 14:21:17
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
richard_li_li

当前不支持动态加载设备侧的二进制包;可以使用动态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 instanseAdd, %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() 
});
分享
微博
QQ
微信
回复
2024-03-18 17:00:25
相关问题
如何在HarmonyOS中实现动态加载模块?
21浏览 • 0回复 待解决
按需加载场景中加载动态模块失败
1572浏览 • 1回复 待解决
HAP是否提供动态加载能力
1691浏览 • 1回复 待解决
鸿蒙是否支持加载HTML
12556浏览 • 3回复 待解决
ArkTs是否支持创建动态变量名
1859浏览 • 1回复 待解决
ArkTS是否支持require方式引入模块
1831浏览 • 1回复 待解决
是否支持动态授权,你知道多少?
2229浏览 • 1回复 待解决
动态布局下加载loading效果实现
888浏览 • 1回复 待解决
TabContent组件是否支持加载
1563浏览 • 1回复 待解决
studio是否支持加载呢?
175浏览 • 1回复 待解决
HarmonyOS模块加载机制
206浏览 • 1回复 待解决
$r('xxxxx')是否支持字符串动态拼接
1768浏览 • 1回复 待解决
如何实现路由动态跳转呢
294浏览 • 1回复 待解决
如何在ArkTS中动态加载so
354浏览 • 1回复 待解决
ArkTS和Native如何动态加载、卸载so
1893浏览 • 1回复 待解决