OpenHarmony轻量系统开发【10】编写自己的软件包

news2024/9/22 15:46:17

10.1 添加第一个a_myparty软件包

打开鸿蒙系统的源码,可以看到有这么一个文件夹:third_party。里面存放的是第三方的代码。

点开我们可以看到有很多第三方代码:

后续我们如果需要往系统中添加、移植任何开源代码,都可以添加到这个文件夹中。接下来,教大家如何添加一个自己的软件包,名字为a_myparty。

1. 新建一个文件夹a_myparty

2. 往文件中放置软件包源码
这里我放在的是 myparty.c和myparty.h文件

3. 新建BUILD.gn文件
整个代码目录如下:

4. myparty.c文件内容如下:
其实,我这个只是为了演示的,所以里面代码没什么作用

#include <stdio.h>

void myparty_test(void)
{
    printf("first myparty \r\n");
}

5. BUILD.gn文件内容如下:

BUILD.gn文件主要是描述了软件包的相关信息,包括编译哪些源文件,头文件路径、编译方式(目前Hi3861 只支持静态加载)

import("//build/lite/config/component/lite_component.gni")
import("//build/lite/ndk/ndk.gni")

#这里是配置头文件路径
config("a_myparty_config") {
    include_dirs = [
        ".",
    ]
}

#这里是配置要编译哪些源码
a_myparty_sources = [
    "myparty.c",
]

#这里是静态链接,类似于Linux系统的 .a文件
lite_library("a_myparty_static") {
    target_type = "static_library"
    sources = a_myparty_sources
    public_configs = [ ":a_myparty_config" ]

}

#这里是动态加载,类似于Linux系统的 .so文件
lite_library("a_myparty_shared") {
    target_type = "shared_library"
    sources = a_myparty_sources
    public_configs = [ ":a_myparty_config" ]

}

#这里是入口,选择是静态还是动态
ndk_lib("a_myparty_ndk") {

    if (kernel_type != "liteos_m") {
        lib_extension = ".so"
        deps = [
            ":a_myparty_shared"
        ]
    } else {
        deps = [
            ":a_myparty_static"
        ]
    }
    head_files = [
        "//third_party/a_myparty"
    ]

}

到了这里我们基本上就写完了。
最后我们要让这个第3放软件包编译到我们固件中。

10.2 如何使用a_myparty软件包

我们在app里面新建一个 myparty_demo的文件夹,目录如下:

其中BUILD.gn内容如下:

static_library("myparty_demo") {
    sources = [
        "myparty_demo.c"
    ]
#注意需要把a_myparty的头文件路径加进来
    include_dirs = [
        "//utils/native/lite/include",
        "//third_party/a_myparty",
    ]

#表示需要a_myparty 软件包
    deps = [
        "//third_party/a_myparty:a_myparty_static",
    ]
}

myparty_demo.c里面内容如下

#include <stdio.h>
#include "ohos_init.h"
#include "ohos_types.h"

#include "myparty.h"

void myparty_demo(void)
{
    myparty_test();
    printf("___________>>>>>>>>>>>>>>>>>>>> [DEMO] Hello world.\n");
}
SYS_RUN(myparty_demo);

编译烧录后可以看到myparty_test的打印信息:

为了能让大家更好的学习鸿蒙(HarmonyOS NEXT)开发技术,这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05

《鸿蒙开发学习手册》:

如何快速入门:https://qr21.cn/FV7h05

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. ……

开发基础知识:https://qr21.cn/FV7h05

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ……

基于ArkTS 开发:https://qr21.cn/FV7h05

  1. Ability开发
  2. UI开发
  3. 公共事件与通知
  4. 窗口管理
  5. 媒体
  6. 安全
  7. 网络与链接
  8. 电话服务
  9. 数据管理
  10. 后台任务(Background Task)管理
  11. 设备管理
  12. 设备使用信息统计
  13. DFX
  14. 国际化开发
  15. 折叠屏系列
  16. ……

鸿蒙开发面试真题(含参考答案):https://qr18.cn/F781PH

鸿蒙开发面试大盘集篇(共计319页):https://qr18.cn/F781PH

1.项目开发必备面试题
2.性能优化方向
3.架构方向
4.鸿蒙开发系统底层方向
5.鸿蒙音视频开发方向
6.鸿蒙车载开发方向
7.鸿蒙南向开发方向

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1596705.html

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

相关文章

ChatGPT们写高考作文会发生什么?

2023年的高考结束了&#xff0c;今年共有1291万考生参加了高考了&#xff0c;再次创造了历史参考人数之最。在高考中&#xff0c;要说什么最引人讨论&#xff0c;那高考作文当仁不让啊。今年随着ChatGPT的爆火&#xff0c;可谓是给文字工作者带来一大助力&#xff0c;如果让AI来…

做测试,不会接口测试怎么能行?

接口测试的测试点 功能测试&#xff1a;单接口功能、业务场景功能 性能测试&#xff1a;响应时长、错误率、吞吐量、服务器资源使用率 安全测试&#xff1a;敏感数据是否加密、SQL注入、其他 本篇文章以接口功能测试为主。 接口用例设计方法&#xff1a; 单接口测试用例设…

在网上打印资料多少钱一张

随着互联网的普及和线上服务的完善&#xff0c;越来越多的人选择在网上打印资料。这种方式不仅方便快捷&#xff0c;而且通常价格更为透明和实惠。那么&#xff0c;在网上打印资料到底多少钱一张呢&#xff1f;这主要取决于您选择的打印平台、纸张规格、打印质量以及打印数量等…

SpringBoot的旅游管理系统+论文+ppt+免费远程调试

项目介绍: 基于SpringBoot旅游网站 旅游管理系统 本旅游管理系统采用的数据库是Mysql&#xff0c;使用SpringBoot框架开发。在设计过程中&#xff0c;充分保证了系统代码的良好可读性、实用性、易扩展性、通用性、便于后期维护、操作方便以及页面简洁等特点。 &#xff08;1&…

ModuleNotFoundError: No module named ‘llama_index.readers“解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

Day55 动态规划 part15

Day55 动态规划 part15 392.判断子序列 我的思路&#xff1a; 自己还是只能想到双指针法 解答: class Solution {public boolean isSubsequence(String s, String t) {if(s.length() 0) {return true;}if(s.length() > t.length() || t.length() 0) {return false;}ch…

牛客小白月赛90(A,B,C,D,E,F)

比赛链接 官方题解&#xff08;视频&#xff09; 这场偏思维&#xff0c;感觉好像没啥算法。E需要动态维护前 k k k 小&#xff0c;F是个离散化加dp&#xff0c;状态和递推方程比较 非常规&#xff0c;建议还是看一下涨涨姿势。 A 小A的文化节 思路&#xff1a; 签到 cod…

都2024年了,还不知道怎么学习网络安全?来看看吧,很难找全的

前言 最近收到不少关注朋友的私信和留言&#xff0c;大多数都是零基础小友入门网络安全&#xff0c;需要相关资源学习。其实看过的铁粉都知道&#xff0c;之前的文里是有过推荐过的。新来的小友可能不太清楚&#xff0c;这里就系统地叙述一遍。 01.简单了解一下网络安全 说白…

CUDA编程---全局内存

CUDA内存模型概述 内存的访问和管理是所有编程语言的重要部分。在现代加速器中&#xff0c;内存管理对高性能计算有着很大的影响。因为多数工作负载被加载和存储数据的速度所限制&#xff0c;所以有大量低延迟、高带宽的内存对性能是十分有利的。 然而&#xff0c;大容量、高性…

如何做信创测试

信创测试是一种系统化的方法&#xff0c;旨在评估和验证创意和创新项目的潜力和可行性。进行信创测试可以帮助企业在投入大量资源之前&#xff0c;对创意进行客观、科学的评估&#xff0c;以减少失败的风险并最大化成功的可能性。以下是一般性的信创测试步骤&#xff1a; 确定…

Linux的学习之路:11、地址空间

摘要 本章主要是说一下地址空间&#xff0c;我也只是按照我的理解进行解释&#xff0c;可能说不清楚&#xff0c;欢迎指正 目录 摘要 一、空间布局图 二、代码测试一下 三、进程地址空间 四、测试代码 一、空间布局图 如下方图片可以看出地址空间有几种&#xff0c;这里…

成都欣丰洪泰文化传媒有限公司领航电商新纪元

在当今数字化飞速发展的时代&#xff0c;电商行业异军突起&#xff0c;成为推动经济增长的重要力量。在这股浪潮中&#xff0c;成都欣丰洪泰文化传媒有限公司以其专业的电商服务脱颖而出&#xff0c;成为业界的佼佼者。本文将带您一探这家公司的独特魅力和专业服务&#xff0c;…

MySQL查看表大小

1、使用SHOW TABLE STATUS命令&#xff1a; SHOW TABLE STATUS LIKE table_name;上述命令会返回包含表格信息的一行结果&#xff0c;其中有一个列为Data_length&#xff0c;表示表格占用的数据空间大小&#xff08;以字节为单位&#xff09;。 2、使用INFORMATION_SCHEMA库的…

Docker 学习笔记(五):梳理 Docker 镜像知识,附带 Commit 方式提交镜像副本,安装可视化面板 portainer

一、前言 记录时间 [2024-4-10] 前置文章&#xff1a; Docker学习笔记&#xff08;一&#xff09;&#xff1a;入门篇&#xff0c;Docker概述、基本组成等&#xff0c;对Docker有一个初步的认识 Docker学习笔记&#xff08;二&#xff09;&#xff1a;在Linux中部署Docker&…

吴恩达2022机器学习专项课程(一) 第二周课程实验:使用 scikit-learn 进行线性回归(Lab_05 Lab_06)

目标 使用scikit-learn实现线性回归(SGDRegressor和LinearRegression)。 1.什么是scikit-learn? 一个用于 Python 编程语言的开源机器学习库,用于实现各种机器学习算法。 2.特征缩放&#xff08;Z标准化&#xff09; 第一步先使用Z标准化处理训练样本&#xff0c;减少训练…

人员聚集监测识别摄像机

随着科技的不断发展&#xff0c;人员聚集监测识别摄像机已经成为了现代社会安全管理的重要工具。这种摄像机能够对人员聚集的情况进行实时监测和识别&#xff0c;帮助相关部门及时发现和处理潜在的安全风险。 人员聚集监测识别摄像机可以通过高清晰度的摄像头和先进的人脸识别技…

使用DockerCompose配置基于哨兵模式的redis主从架构集群

文章目录 一、注意事项&#xff08;坑点&#xff01;&#xff01;&#xff01;&#xff09;二、配置Redis主从架构集群第一步&#xff1a;创建目录文件结构第二步&#xff1a;编写DockerCompose配置文件第三步&#xff1a;编写redis.conf第四步&#xff1a;启动redis主从集群 三…

LeetCode 59.螺旋矩阵II

LeetCode 59.螺旋矩阵II 1、题目 力扣题目链接&#xff1a;59. 螺旋矩阵 II - 力扣&#xff08;LeetCode&#xff09; 给你一个正整数 n &#xff0c;生成一个包含 1 到 n2 所有元素&#xff0c;且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1&#xff1…

02_按键控制LED

按键控制LED 按键控制LED 按键控制LED while (1){//按键控制LEDif(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_5)GPIO_PIN_RESET)//读取PC5引脚状态&#xff0c;即检测按键是否按下{while(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_5)GPIO_PIN_RESET);//松手检测HAL_GPIO_WritePin(GPIOA,GPIO_PI…

使用IT-Tools+Cpolar在Windows搭建自己的IT工具箱并实现远程在线使用

文章目录 1. 使用Docker本地部署it-tools2. 本地访问it-tools3. 安装cpolar内网穿透4. 固定it-tools公网地址 本篇文章将介绍如何在Windows上使用Docker本地部署IT- Tools&#xff0c;并且同样可以结合cpolar实现公网访问。 在前一篇文章中我们讲解了如何在Linux中使用Docker搭…