鸿蒙NEXT开发【配置多目标产物配置CPP】DevEco Studio配置构建
hvigor集成cmake,ninja为cpp代码的构建工具。在初始状态下,您无需额外配置,为了定制您的cpp代码编译,您可通过以下配置添加自定义配置。
hvigor集成cmake,ninja为cpp代码的构建工具。在初始状态下,您无需额外配置,为了定制您的cpp代码编译,您可通过以下配置添加自定义配置。
在模块的build-profile.json5中,存在以下配置项:
{
...
"buildOptionSet": [
{
"name": "release",
"arkOptions": {
"obfuscation": {
"ruleOptions": {
"enable": true,
"files": [
"./obfuscation-rules.txt"
]
}
}
},
"externalNativeOptions": {
"path": "./src/main/cpp/CMakeLists.txt", // 自定义cmake配置脚本CMakeLists.txt的位置,它是以模块根目录为起始位置的相对路径
"arguments": ["-DCMAKE_BUILD_TYPE=Debug"], // hvigor将会把此处的自定义参数传递给cmake构建工具,您可通过cmake官方文档查找您所需的编译参数,同时它也将覆盖默认同名参数
"cppFlags": "-g", // 自定义cpp flags参数
"abiFilters": ["arm64-v8a"] // 自定义cpp编译架构,默认编译架构为arm64-v8a
},
"nativeLib": {
"debugSymbol": { // 可通过此配置对cpp编译产物so执行strip,移除so中的调试信息与符号表等
"strip": true, // 执行strip
"exclude": [] //执行strip的过滤正则表达式规则
},
"filter": { // 可通过此选项自定义此cpp产物so是否打包到应用包中
"excludes": [ // 根据正则表达式排除匹配到的.so文件,匹配到的so文件将不会被打包,可用于打包时缩小包体积
"**/3.so", // 排除所有名称为“3”的so文件
"**/x86_64/*.so" // 排除所有x86_64架构的so文件
],
"pickFirsts": [], // 按照.so文件的优先级顺序,打包最高优先级的.so文件
"pickLasts": [], // 按照.so文件的优先级顺序,打包最低优先级的.so文件
"enableOverride": true, // 当.so重名冲突时,允许打包时so文件的覆盖
"select": [ // select提供native产物的精准选择能力,根据包名、版本、产物名称等选择或排除,select的优先级高于excludes、pickFirsts等配置项
{
"package": "@ohos/curl", // 包名
"version": "1.3.5", // 包版本
"include": ["libcurl.so"], // 选择打包的native产物
"exclude": ["libc++_shared.so"] // 排除的native产物
}
],
},
"headerPath": "./src/main/cpp/include" // 声明模块打包共享的c/cpp接口
"librariesInfo":[
{
"name": "libentry.so",
"linkLibraries": ["curl::curl"]
}
]
},
},
],
...
}
通过自定义externalNativeOptions参数,可修改cpp编译表现。nativeLib/headerPath声明了模块的c/cpp接口文件,并通过打包暴露给依赖模块。而通过debugSymbol、filter等配置,可修改so产物的体积与打包规则。
关于库文件so的优先级
库文件so的优先级选择,可以通过pickFirsts,pickLasts选项来选择,其中pickFirsts选择高优先级的库文件,pickLasts选择低优先级的库文件。
这个优先级是由本模块所依赖模块或三方包的收集顺序决定的,本模块依赖声明在oh-package.json5文件的dependencies配置项中,收集顺序按照广度优先的遍历方式来收集依赖。
如下图,优先级顺序为current > library0 > library1 > library5 > library2 > library3 > library4。
图1
关于select的使用
select提供native产物的精准选择能力,根据包名,版本,产物名称等,选择打包或排除native产物到hap/hsp/har产物。
例如本模块依赖的libcurl.so所在的har包为@ohos/curl,并且存在多个版本的libcurl.so,需要打包1.3.5版本,那可以通过以下配置,精确打包这个so到产物中。
{
buildOption: {
nativeLib: {
filter: {
select: [ // select的优先级高于excludes、pickFirsts等配置项
{
package: "@ohos/curl", // 包名
version: "1.3.5", // 包版本
include: ["libcurl.so"], // 选择打包的native产物
exclude: ["libc++_shared.so"] // 排除的native产物
}
]
}
}
}
}
最后呢
很多开发朋友不知道需要学习那些鸿蒙技术?鸿蒙开发岗位需要掌握那些核心技术点?为此鸿蒙的开发学习必须要系统性的进行。
而网上有关鸿蒙的开发资料非常的少,假如你想学好鸿蒙的应用开发与系统底层开发。你可以参考这份资料,少走很多弯路,节省没必要的麻烦。由两位前阿里高级研发工程师联合打造的《鸿蒙NEXT星河版OpenHarmony开发文档》里面内容包含了(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、Harmony南向开发、鸿蒙项目实战等等)鸿蒙(Harmony NEXT)技术知识点
如果你是一名Android、Java、前端等等开发人员,想要转入鸿蒙方向发展。可以直接领取这份资料辅助你的学习。下面是鸿蒙开发的学习路线图。

针对鸿蒙成长路线打造的鸿蒙学习文档。话不多说,我们直接看详细鸿蒙(OpenHarmony )手册(共计1236页)与鸿蒙(OpenHarmony )开发入门视频,帮助大家在技术的道路上更进一步。
- 《鸿蒙 (OpenHarmony)开发学习视频》
- 《鸿蒙生态应用开发V2.0白皮书》
- 《鸿蒙 (OpenHarmony)开发基础到实战手册》
- OpenHarmony北向、南向开发环境搭建
- 《鸿蒙开发基础》
- 《鸿蒙开发进阶》
- 《鸿蒙开发实战》

总结
鸿蒙—作为国家主力推送的国产操作系统。部分的高校已经取消了安卓课程,从而开设鸿蒙课程;企业纷纷跟进启动了鸿蒙研发。
并且鸿蒙是完全具备无与伦比的机遇和潜力的;预计到年底将有 5,000 款的应用完成原生鸿蒙开发,未来将会支持 50 万款的应用。那么这么多的应用需要开发,也就意味着需要有更多的鸿蒙人才。鸿蒙开发工程师也将会迎来爆发式的增长,学习鸿蒙势在必行! 自↓↓↓拿
更多推荐
所有评论(0)