当前位置:   article > 正文

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

hdc shell sync

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

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

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

1.1 hdc常用命令

  1. // 查看设备是否连接
  2. hdc list targets
  3. // 以读写模式挂载系统分区
  4. hdc shell mount -o rw,remount /
  5. // 将本地文件,加载到系统的/system/lib64/module/arkui/advanced/
  6. 这个位置
  7. hdc file send libtesthelloworld.z.so /system/lib64/module/arkui/advanced/
  8. // 同步so到系统
  9. hdc shell sync
  10. // 重启设备
  11. hdc shell reboot

 1.2 SO编译命令

  1. // 将开发包的控件代码放入华为计算云指定位置
  2. /home/user/code/oh_code/foundation/arkui/ace_engine/advanced_ui_component
  3. // 配置编译环境(仅第一次执行)
  4. ./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
  5. // 编译SO
  6. ./build_system.sh --abi-type generic_generic_arm_64only --device-type hisi_all_phone_standard --ccache --build-variant root --build-target ace_engine
  7. // 获取我们编译出来的SO包
  8. /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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/281730
推荐阅读
相关标签
  

闽ICP备14008679号