当前位置: 首页 > article >正文

【HarmonyOS开发】ArkTs编译为SO包的流程记录

1、创建一个Static Library的静态模块

2、编写我们的SO控件

2.1 编译配置

{
  "apiType": "stageMode",
  "buildOption": {
    "artifactType": "obfuscation"
  },
  "targets": [
    {
      "name": "default",
      "runtimeOS": "HarmonyOS"
    }
  ]
}

2.2 构建我们的包(AtkTs生成js和d.ts文件)

2.2.1 选中我们的Library包 ===> 点击构建我们创建的模块  ===> 修改我们的编译文件

2.2.2 Ctrl+Alt+Shift+L 快捷键格式化我们的生成的JS文件

2.2.3 增加特殊的配置,为生成SO做准备

警告!

警告!!

警告!!!

观察我们生成的JS中有多少个export,如果有多个,一定要增加下面的配置(巨坑)

export default {
    GridEditType,
    StateType,
    GridEdit
}

 不要观察你的ets源码中export导出了多少个文件,直接看js的就行,很大的坑。。。

2.3 注意点(API版本之间的差异):

  1. API9+的版本对TS的要求更加严格,不能包含any、Object等不确定的数据类型;
  2. API9+中不能使用type定义纯对象的数据类型,需要使用interface;
  3. @Prop在API9中无法支持enum类型;
  4. API9+中不能使用Object[item]的语法,只能使用Object.item的写法;
  5. Grid组件比较神奇,慎用
    1. supportAnimation(true)开启动画后,自定义动画配合animate和animateTo将会触发不可预知的错误;
    2. Grid默认容器是不能拖出容器的,可以使用clip(false)进行开启

2.4 参考Demo:

官方仓库,包含高阶组件icon-default.png?t=N7T8https://gitee.com/openharmony/arkui_ace_engine/tree/master/advanced_ui_component

3、准备生成SO的准备文件

参考代码

arkui_ace_engine: ArkUI framework | ArkUI开发框架 - Gitee.comicon-default.png?t=N7T8http://SO准备文件不需要sourse,暂时无用,可以将自己的源码放入其中。

注意文件全部小写,只有Cpp文件中包含5个大写,否则调用会出问题

3.1、新建一个目录gridedit

3.2、增加目录interfaces

放入下方的三个文件

3.3、修改BUILD.gn文件

将所有的subheader改为自己的组件名称gridedit即可

3.4、修改.cpp文件

将所有的subheader改为自己的组件名称gridedit,其中标红的地方注意改为大写

3.5、将我们修改后的JS文件放入interfaces文件夹

 然后通过华为的计算云编译为SO包进行调用

4、修改我们的d.ts文件

参考代码

api/@ohos.arkui.advanced.SubHeader.d.ets · 兵腾傲宇/interface_sdk-js - Gitee.comicon-default.png?t=N7T8https://gitee.com/bingtengaoyu/interface_sdk-js/blob/master/api/@ohos.arkui.advanced.SubHeader.d.ets仅保留export导出的以及@prop、@Link等组件传值类即可,删除其他无用的接口声明

 

下一步,控件和应用开发的区别


http://www.kler.cn/a/154167.html

相关文章:

  • 深度学习基础练习:代码复现transformer重难点
  • Quartus+Nios II for eclipse问题合集
  • SpringSecurity+jwt+captcha登录认证授权总结
  • 如何轻松导出所有 WordPress URL 为纯文本格式
  • 基于单片机智能温室大棚监测系统
  • C++网络编程之SSL/TLS加密通信
  • k8s中Service负载均衡和Service类型介绍
  • Mac苹果视频剪辑:Final Cut Pro Mac
  • 线上CPU飙高问题排查!
  • React-hook-form-mui(五):包含内嵌表单元素的表单
  • 蓝桥杯每日一题2023.12.2
  • 微服务实战系列之Cache
  • 华为OD机试真题-两个字符串间的最短路径问题-2023年OD统一考试(C卷)
  • #Css篇:实现一个元素水平和垂直居中实现左右固定,中间自身适应布局 左侧固定 右侧自适应
  • 【小布_ORACLE笔记】Part11-1--RMAN Backups
  • Maven安装
  • LeeCode前端算法基础100题(5)- 最长公共前缀
  • git修改远程地址
  • 【Linux】信号概念和信号的产生
  • Hdoop学习笔记(HDP)-Part.07 安装MySQL
  • 计算机体系结构补充篇----静态超标量流水线及循环展开(一)
  • rtmp 协议详解
  • 【1】基于多设计模式下的同步异步日志系统
  • SHEIN出口儿童玩具加拿大站CCPSA安全标准办理解析
  • 如何使用Go与MQTT进行通信
  • 多线程(初阶六:单例模式)