【HarmonyOS开发】鸿蒙控件与原生App的区别

控件与应用的区别,这应该是一个很少被人提及的话题,刚进入鸿蒙圈,接触的就是高阶控件的开发,引发了很多关于控件与用用的思考,也踩了不少的坑,记录一下。

1、什么是鸿蒙高阶控件?

鸿蒙控是需要写入手机系统的SO。我们的控件只有一个JS文件,通过BUILD.gnxxx.cpp文件将xxx.js编译为SO,最后,通过hdc工具命令将SO包烧录到鸿蒙系统中。

1.1 hdc常用命令

// 查看设备是否连接
hdc list targets

// 以读写模式挂载系统分区
hdc shell mount -o rw,remount /

// 将本地文件,加载到系统的/system/lib64/module/arkui/advanced/
这个位置
hdc file send libtesthelloworld.z.so /system/lib64/module/arkui/advanced/

// 同步so到系统
hdc shell sync

// 重启设备
hdc shell reboot

 1.2 SO编译命令

// 将开发包的控件代码放入华为计算云指定位置
/home/user/code/oh_code/foundation/arkui/ace_engine/advanced_ui_component

// 配置编译环境(仅第一次执行)
./build/prebuilts_download.sh --tool-repo=http://hmf.inXXXXX.com:9080 --npm -registry=http://mirrors.tools.XXXXX.com/npm/ --trusted-host=mirrors.tools.XXXXX.com --pypi-url=http://mirrors.tools.XXXXX.com/pypi/simple-skip-ssl

// 编译SO
./build_system.sh --abi-type generic_generic_arm_64only --device-type hisi_all_phone_standard --ccache --build-variant root --build-target ace_engine

// 获取我们编译出来的SO包
/home/user/code/oh_code/out/generic_generic_arm_64only/hisi_all_phone_standard/arkui/ace_engine

2、组件与应用的区别

        App应用:可以在包里面调用任何资源,中英文等我们也可以通过resources中引入,自定义性比较强。

        高阶控件:写入鸿蒙系统的应用,只能依托系统中存在的能力进行二次开发,或通过C++开发底层应用,提供给ArkTS进行调用。

  • 控件只能够调用系统资源($r(sys.xx.xx)),如果需要使用image等资源,需要转换为base64格式进行引入;
  • API9中鸿蒙的Icon图标资源还未引入鸿蒙系统, 11也是只引入了部分;
  • 组件中英文问题,控件是需要调用系统语言包的,写在resources中的是不会起作用的;
  • 作为控件,原则上不做任何业务逻辑的处理,只做两件事,获取入参功能处理,抛出回调/值等;
  • 不要在控件层调用应用层的一些方法,比如router等,否则会导致SO闪退等问题;

3、问题记录 (持续更新)

3.1 拖拽事件冲突(GridItem可以拖拽,包裹的Image无法拖拽)

原因:拖拽事件冲突

解决方案:Image增加draggable属性,设置为false

反思:鸿蒙的API文档不是很靠谱(遇到很多次了),每个版本的API属性默认不一定相同,有些属性需要自己去测试。

Image("sys.media.ic_public_ok").draggable(fasle)

2023/12/05 12:10

未完,等待继续更新...

扫描二维码关注公众号,回复: 17171204 查看本文章

猜你喜欢

转载自blog.csdn.net/qq_23334071/article/details/134764626