当前位置: 首页 > 科技观察

鸿蒙HarmonyOS单模块编译及源码指南

时间:2023-03-19 22:47:53 科技观察

更多内容请访问:与华为官方共建的Harmonyos技术社区https://harmonyos.51cto.com/#zz这里我以3518开发板为例举例说明,3516也是通用的。以下是之前全量编译的脚本:pythonbuild.pyipcamera_hi3518ev300-bdebugHarmonyOS一开始只能支持全量编译。这种方式最大的缺点是我们在系统源码上开发用户态程序,每次都需要对系统进行全量编译。编译和烧录镜像至少需要15分钟。对于我们的开发和测试以及所花费的时间,想象一下如果每次都加一行log去debug会有多麻烦。好在后来随着HarmonyOS的源码更新,开始支持用户态程序的单模块编译。编译后的脚本如下:pythonbuild.pyipcamera_hi3518ev300-T//applications/sample/camera/app:camera_app这里HarmonyOS自带单独编译以HelloWorld项目为例,-T参数很重要,它代表单机模块编译,//applications/sample/camera/app只是待编译模块的绝对路径,camera_app是待编译模块的名称。这里先结合HarmonyOS源码说说-T参数的由来。如果下载官方code1。模块编译。我们来看看这个参数是什么时候更新到源码库的。首先,我们去gitee中找到编译构建框架所在的代码仓库,如下图:然后,我们查看仓库下的commit记录,可以找到如下关键记录。查看commitlog,很明显这里添加了单模块构建。接下来我们打开commit记录仔细看看到底修改了什么。看到这里,大家就知道-T参数是怎么来的了。为了让你的代码支持单模块编译,去git更新代码。如果你下载的是code1.0离线代码,不用担心,你可以直接把Downloadallthelatestcodeunderthebuildwarehouse替换掉之前的build仓库。接下来说说前面单模块编译最后的模块名camera_app是怎么来的。关于如何编译用户态程序,建议大家好好看看官方源码“UserProgramFramework”仓库下的介绍,一定会让你受益匪浅。许多。在这里,我将重点介绍重点。首先在文件//build/lite/product/ipcamera_hi3518ev300.json中进行用户程序编译的相关配置,可以理解为一个配置列表,告诉系统哪些用户态程序需要参与编译。我们可以在其中找到如下配置:{"name":"applications","component":[{"name":"camera","dir":"//applications/sample/camera/app:camera_app","features":[]},{"name":"communication","dir":"//applications/sample/camera/communication:sample","features":[]}]},看dir后面的配置很自然的会想到我们之前为什么要用-T后面的参数,那么最后一个冒号后面的camera_app参数是从哪里来的呢?所以这里首先要对linux下的c语言编译有一定的了解,下面的不懂的可以先去补一下Makefile和gn的知识。这里,每个用户态程序都是通过gn文件配置编译的。我们先在源码目录下找到模块路径,如下图:哈哈,你可能会奇怪我为什么要用idea看代码,因为我的电脑没有安装Sourceinsight,加上我最精通的技术是java和Android,所以习惯用idea,一个快速搜索功能就足够我看系统源码了。这里我们看到了BUILD.gn脚本,打开它,可以看到如下关键代码:在这里配置。下面简单列出一个gn的标准helloworld用法,如下:executable("hello_world"){sources=["hello_world.c",]}后面会讲到如何创建一个独立的用户态程序来写这个gn文件和json文件。这篇文章够长了,我会在下一篇博文中进行说明。看系统源码确实很有意思,但是自己工作太忙,没时间看。..了解更多请访问:与华为官方共建鸿蒙科技社区https://harmonyos.51cto.com/#zz