【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,一经查实,立即删除!

相关文章

【FISCO BCOS】二十、多机部署区块链

目录 一、准备环境 二、开始搭建 三、检查节点 1.检查节点进程

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&…

基于eBPF实现监控ssh登陆功能

以下是一个基于eBPF监控SSH登录的程序的示例代码&#xff0c;使用Python编写&#xff1a; python import os import ctypes from bcc import BPF # eBPF程序 bpf_text """ #include <uapi/linux/ptrace.h> #include <linux/sched.h> struct ssh…

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

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

Vue学习笔记-Vuex基本使用

基本使用 初始化数据、配置actions、mutations&#xff0c;操作文件/store/index.js //index.js文件用于创建Vuex中最为核心的store对象 import Vue from vue import Vuex from vuex Vue.use(Vuex) //actions对象用于响应组件中的动作,专门负责业务逻辑 const actions {//函数…

Jetson Nano部署YOLOv5与Tensorrtx加速

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

Postgresql和mysql的区别探究

PostgreSQL和MySQL是两个流行的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;具有各自的特点和优点。虽然两种数据库都可以处理大量数据&#xff0c;但在不同情况下&#xff0c;会有一些区别。下面将着重介绍PostgreSQL和MySQL的区别&#xff0c;并附带案例说…

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

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

linux审计功能及规则 (audit.rule)

linux审计功能&#xff08;audit log&#xff09;是什么 audit是Linux自带的一套审计功能&#xff0c;可以监控我们日常的一些操作&#xff0c;然后将这些操作记录在audit.log中&#xff0c;方便我们查看日志。 审计规则是什么 在 /etc/audit/rules.d/audit.rules文件中&…

计网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)

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

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

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

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

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

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

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

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

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

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

介绍 本文介绍了一个自动化安装MySQL的Shell脚本。该脚本可以帮助用户快速安装MySQL&#xff0c;并自动进行配置和初始化。通过使用该脚本&#xff0c;用户无需手动执行繁琐的安装步骤&#xff0c;大大简化了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…

基于jsonrpc4j实现JSON-RPC over TCP

1.JSON-RPC说明 JSON-RPC是一个无状态且轻量级的远程过程调用(RPC)协议。 它主要定义了一些数据结构及其相关的处理规则。 它运行时可以基于tcp(socket),http等不同的消息传输方式&#xff0c; 即它不关心底层传输方式的细节。 它使用JSON&#xff08;RFC 4627&#xff09;作为…

Java研学-配置文件

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