【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.mzph.cn/news/191077.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux:查看端口占用的进程

命令 netstat -tunlp可以从图中看到,端口被那个进程占用,对应进程的pid是多少。

dart语言多线程遇到的问题:Isolate.spawnUri(),在真机调试中无法生成隔离

报错原因 [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: IsolateSpawnException: Unable to spawn isolate: Unsupported isolate URI: 未处理的异常:IsolateSpawnException:无法生成隔离:不支持隔离 URI&…

递归实例化导致的栈溢出问题【简直蠢得出奇】

问题描述 今天在练习数据库增删改查,体验三层架构思想时,随便写了点DAO层代码,但服务器运行时竟然爆出了栈溢出的问题,说实话,空指针问题我还能放着耐心去代码里找找问题,但这个栈溢出,我之前就…

Jetson Nano部署YOLOv5与Tensorrtx加速

一、烧录镜像 1、Jetson Nano烧写系统镜像 Jetson Nano是一款形状、外接口类似于树莓派的嵌入式主板,搭载了四核Cortex-A57处理器,GPU则是拥有128个NVIDIA CUDA核心的NVIDIA Maxwell架构显卡,内存为4GB的LPDDR4,存储则为16GB eM…

入侵redis之准备---VMware上面安装部署centos7镜像系统【详细含云盘镜像】

入侵redis之准备—VMware上面安装部署centos7镜像系统【详细含云盘镜像 其他文章: 入侵redis并实现反弹shell控制【实战一】 学习大概步骤如下 第一步:先学习怎么安装部署kail系统服务器 入侵redis之准备—VMware安装部署kail镜像服务器【详细包含云盘镜像】 第二…

计网Lesson6 - IP 地址分类管理

文章目录 1. I P IP IP 地址定义2. I P v 4 IPv4 IPv4 的表示方法2.1 I P v 4 IPv4 IPv4 的分类编址法2.2 I P v 4 IPv4 IPv4 的划分子网法2.2.1 如何划分子网2.2.2 如何确定子网的借位数2.2.3 总结2.2.4 题目练习 2.3 I P v 4 IPv4 IPv4 的无分类编址法 1. I P IP IP 地…

04.里氏替换原则(Liskov Substitution Principle)

暴论:一般的,如果一个富二代不想着证明自己,那么他一辈子都会衣食无忧。 一言 里氏替换原则想告诉我们在继承过程中会遇到什么问题,以及继承有哪些注意事项。 概述 这是流传较广的一个段子: “一个坐拥万贯家财的富二…

亚马逊云科技Aurora MySQL在复制性能提升上的不断优化和尝试

前言 Amazon Aurora是亚马逊云科技自研的云原生关系数据库,它在提供和开源数据库MySQL、PostgreSQL的完好兼容性同时,也能够提供和商业数据库媲美的性能和可用性。 Aurora的性能提升不仅包含应用读写吞吐量的提升,也包含复制延迟的降低。一个…

代码随想录算法训练营第38天| 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯

JAVA代码编写 动态规划(Dynamic Programming) 一个问题可以划分为多个子问题,且子问题之间有关联,就可以使用动态规划。 动态规划问题步骤: 确定dp数组(dp table)以及下标的含义确定递推公式…

栈顺序存储的实现(详解)

栈是一种数据结构,它具有后进先出(LIFO)的特性。栈可以用来存储一组元素,并且只能在栈顶进行插入和删除操作。栈的基本概念包括: 1. 入栈(push):将元素添加到栈顶的操作。 2. 出栈&…

图片消除笔哪些软件有?这三款智能消除软件值得收藏

图片消除笔哪些软件有?日常在社交媒体上分享照片或制作海报,广告时,经常会遇到需要删除图片中多余的元素,比如水印、日期、人物等,以便更好的去将这些图片进行二次创作,那么有哪些软件有图片消除笔可以选择…

MySQL5.7安装与配置:自动化一键安装配置

介绍 本文介绍了一个自动化安装MySQL的Shell脚本。该脚本可以帮助用户快速安装MySQL,并自动进行配置和初始化。通过使用该脚本,用户无需手动执行繁琐的安装步骤,大大简化了MySQL的安装过程。 使用shell自动化安装教程 1. 复制脚本 首先&a…

webGIS使用JS,高德API完成简单的智慧校园项目基础

代码实现 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-width, i…

Java研学-配置文件

一 配置文件 1 作用–解决硬编码的问题 在实际开发中,有时将变量的值直接定义在.java源文件中;如果维护人员想要修改数据,无法完成(因为没有修改权限),这种操作称之为硬编码 2 执行原理: 将经常需要改变的数据定义在指定类型的文件中,通过java代码对指定的类型的文件进行操作…

鸿蒙学习之TypeScript 语法理解笔记

1、变量及数据类型 // string&#xff1a;字符串&#xff0c;单引号或双引号 let msg : string hello wprld console.log(msg:msg)// number&#xff1a;数值、整数、浮点let num :number 21console.log(num:num)//boolean&#xff1a;布尔let finished: boolean truecons…

读书笔记:《Effective Modern C++(C++14)》

Effective Modern C&#xff08;C14&#xff09; GitHub - CnTransGroup/EffectiveModernCppChinese: 《Effective Modern C》- 完成翻译 Deducing Types 模版类型推导&#xff1a; 引用&#xff0c;const&#xff0c;volatile被忽略数组名和函数名退化为指针通用引用&#…

java学习part30callabel和线程池方式

140-多线程-线程的创建方式3、4&#xff1a;实现Callable与线程池_哔哩哔哩_bilibili 1.Callable 实现类 使用方式 返回值 2.线程池

检测判断IP合法性API接口

检测判断IP合法性API接口 一、检测判断IP合法性API接口二、使用步骤1、接口2、请求参数3、请求参数示例4、接口 返回示例 三、 如何获取appKey和uid1、申请appKey:2、获取appKey和uid 四、重要说明 一、检测判断IP合法性API接口 一款免费的帮助你检测判断IP合法性API接口 二、…

“于阗佛国、美食和田”——“万人游新疆”推广活动走进企业

11月23日&#xff0c;在安徽省文旅厅、安徽省援疆指挥部、和田地区文旅局的指导和支持下&#xff0c;由安徽环球文旅集团组织的“于阗佛国、美食和田”——“万人游新疆”分享会在安徽合肥市财富广场瑞众保险&#xff08;原华夏保险&#xff09;3楼黄山厅会议室举行&#xff0c…

【06】ES6:数组的扩展

一、扩展运算符 扩展运算符&#xff08;spread&#xff09;是三个点&#xff08;…&#xff09;。它是 rest 参数的逆运算&#xff0c;将一个数组转为用逗号分隔的参数序列。 1、基本语法 [...array] // array表示要转换的数组console.log(...[1, 2, 3]) // 1 2 3 console.l…