鸿蒙OS——.gn和.rc知识总结(基于security_huks)


鸽了好久
由于每个项目都多多少少有这样一个文件:bulid.gn xxx.rc
所以这里简单学习并总结一下这两个文件的若干知识

1. GN

首先我们来看看.gn文件:
在这里插入图片描述
刚开始我和大家一样也是看的一头雾水,但是等大家通读完这篇文件就知道如何看GN文件啦!

1.1 GN的目的和设计理念

首先GN是一个为Ninja生成构建文件的构建系统,目的是为了工程师更高效的makefile

由于想要使它具备高效性,所以当初设计的理念如下:

  • 理想情况下,相同需求应该生成相同的构建文件
  • 不是必须的情况下,不需要具备灵活性

1.2 语法

  1. 五种类型变量:
  • bool
  • signed 64 bit int
  • string :使用双引号和反斜线使用作为转义字符
  • list:我们无法获取list的航都,列表支持类似的附加:
a = ["first"]
a += ["second"]
b = a + ["third","fourth"]
b -= ["second"]
  • 作用域
  1. 条件语句:
if(is_Linux || target_cpu == "x86"){
	sources -= ["lite.c"]
}else if(……){
	……
}

类似C语言的条件分支

  1. 循环
    使用foreach遍历每个列表
foreach(i, list){
	print(i)
}

一般来说构建的大多数事情是不需要循环来表达的,所以不建议使用循环

  1. 函数调用
    类似C语言,接收{}括起来的代码块

  2. 作用域
    文件和函数调用后{}引入新的作用域,作用域是嵌套的

1.3 命名表示

  • 文件和目录名:都是字符串,解释为相对于当前构建文件的目录或文件
  • 标识:有着预定格式的字符串,由唯一标识识别
    一般由三部分组成:source-tree 绝对路径,:,路径

1.4 构建流程

整个流程如下:首先在当前目录下查询.gn文件,不存在时像上级目录查询,直到找到一个设置为sourceroot,解析该gn文件获得bulid config文件名称。然后执行build config,根据root目录下的build.gn文件找到目标其依赖的其他目录下的bulid.gn文件——当所有的目标依赖都找到后编译出.ninja

其中涉及的目标时构造表中的一个节点,通常用于表示某个要产生的可执行或库文件,目标之间相互依赖,GN内置的一些目标类型:

  • action:运行一个脚本产生一个文件
  • bundle_data:产生iOS数据
  • executable:生成可执行文件
  • group:包含一个或多个目标的虚节点
  • shared_library:一个.dll或.so
  • source_set:一个轻量的虚拟静态库——指向真实库
  • static_library:一个.lib文件
  • component:基于构造类型
  • test:用于测试
  • app:可执行程序
  • android_apk:生成一个APK

1.5 CONFIGS

配置时指定标志集,包含目录和定义的命名对象,可以应用于目标并推送到依赖目标,比如第三方目标——需要一些定义或包含目录才能使其头文件正常导入

config("config"){
	includes = ["src/include"]
	defines = ["HUKS_MESSAGE"]
}

将其应用于目标:

executable("service"){
	configs += [":config"]
}

build config文件通常指定设置默认配置列表的目标默认值。所以实践中我们通常把自定义的config以configs += [":config"]的方式添加

1.6 import

在上面的例子中我们就可以看的import的使用,我们可以使用import将.gni导入当前文件中,这里的import机制与C中的不太一样,它是将import的文件执行完毕的内容复制到当前文件中

这里大家就要问了.gni文件是什么?不是只有.gn文件吗?——这就是接下来要讲的复用的template模板

1.7 模板

一般来说模板定义在.gni文件中,用户import该文件看的模板的定义并使用

//模板的定义
template("ipc"){
	ipc_target_name = "xxx"
	……
}

//模板的调用
import("//tools/ipc_utils.gni")
ipc("my_interfaces"){
	……
}

1.8 GN在harmony中的实践使用

由于知识水平的有限以及对鸿蒙研究不够深入,所以贴上别的研究者的一篇博客分析的比较清楚:

GN在harmony中的实际应用

1.9 尝试读一读

首先我们找到外围的build.gn
在这里插入图片描述
可以看的这是用于test的构建文件目录,我们顺着路径再往下找
在这里插入图片描述
可以看到给出了很多测试的文件和目录,下面也给出了其依赖的目标deps

通过.gn文件我们很方便的将整个文件结构组织起来

2. RC文件

在这里插入图片描述
除了.gn文件这里还有一个.rc文件——是做什么的呢?

首先这是一个资源文件,里面包括了引入的位图文件,窗口,图标,光标等等。
拿EXE文件举例,如果要生成一个.exe文件,文件的图标是我们自定义的图标,我们就需要添加该图标并保存到.rc中

.rc文件实质上是一类txt文本文件与.h文件配合使用

我们来看看huks_services.rc
在这里插入图片描述
里面定义了shell、system、auth_service等资源

  • 16
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
结合下面hive元数据信息,生成hive建表语句,并且加上comment,注意day是分区 dwd_weibo_crawl NULL appmarket_appinfo GN线应用市场 2021-01-07 15:07:29 apk 应用包名 string day string入库日期 org.apache.hadoop.hive.ql.io.orc.OrcSerde serialization.format 1 hdfs://DSbigdata/hiveDW/dwd_exten_crawl/appmarket_appinfo org.apache.hadoop.hive.ql.io.orc.OrcInputFormat org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat dwd_weibo_crawl NULL appmarket_appinfo GN线应用市场 2021-01-07 15:07:29 app_name 应用名称 string day string 入库日期 org.apache.hadoop.hive.ql.io.orc.OrcSerde serialization.format 1 hdfs://DSbigdata/hiveDW/dwd_exten_crawl/appmarket_appinfo org.apache.hadoop.hive.ql.io.orc.OrcInputFormat org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat dwd_weibo_crawl NULL appmarket_appinfo GN线应用市场 2021-01-07 15:07:29 app_url 平台详情页链接 string day string入库日期 org.apache.hadoop.hive.ql.io.orc.OrcSerde serialization.format 1 hdfs://DSbigdata/hiveDW/dwd_exten_crawl/appmarket_appinfo org.apache.hadoop.hive.ql.io.orc.OrcInputFormat org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat dwd_weibo_crawl NULL appmarket_appinfo GN线应用市场 2021-01-07 15:07:29 cate 应用所属分类 string day string入库日期 org.apache.hadoop.hive.ql.io.orc.OrcSerde serialization.format 1 hdfs://DSbigdata/hiveDW/dwd_exten_crawl/appmarket_appinfo org.apache.hadoop.hive.ql.io.orc.OrcInputFormat org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat dwd_weibo_crawl NULL appmarket_appinfo GN线应用市场 2021-01-07 15:07:29 other 其他 string day string 入库日期 org.apache.hadoop.hive.ql.io.orc.OrcSerde serialization.format 1 hdfs://DSbigdata/hiveDW/dwd_exten_crawl/appmarket_appinfo org.apache.hadoop.hive.ql.io.orc.OrcInputFormat org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat dwd_weibo_crawl NULL appmarket_appinfo GN线应用市场 2021-01-07 15:07:29 region 平台名称 string day stri
06-10

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

国家一级假勤奋研究牲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值