网站说服力-营销型网站策划,淘宝网站建设好评语,网站建设 猴王网络有实力,百度推广登录平台官网OpenHarmony 有两种编译方式#xff0c;一种是通过 hb 工具编译#xff0c;一种是通过 build.sh 脚本编译。本文笔者将提升 build.sh 方式编译速度的方法整理如下#xff1a; 因为笔者只用 build.sh 脚本编译#xff0c;没用过 hb 工具#xff0c;好像下面的选项也可以用于…OpenHarmony 有两种编译方式一种是通过 hb 工具编译一种是通过 build.sh 脚本编译。本文笔者将提升 build.sh 方式编译速度的方法整理如下 因为笔者只用 build.sh 脚本编译没用过 hb 工具好像下面的选项也可以用于 hb 工具 在 OpenHarmony 源码中执行./build.sh --h会打印出./build.sh 中可以添加的所有选项
$ ./build.sh -hThe system shell is bash 4.4.20(1)-release2023-02-07 12:58:04
-h
Usage: entry.py [options]Options:-h, --help show this help message and exit--source-root-dirSOURCE_ROOT_DIR--product-namePRODUCT_NAME--device-nameDEVICE_NAME--target-cpuTARGET_CPU--target-osTARGET_OS--compile-configCOMPILE_CONFIG-T BUILD_TARGET, --build-targetBUILD_TARGET--gn-argsGN_ARGS --ninja-argsNINJA_ARGS-v, --verbose --keep-ninja-going --sparse-image --jobsJOBS --export-paraEXPORT_PARA--build-only-gn --ccache --fast-rebuild --disable-package-image--disable-post-build --disable-part-of-post-buildDISABLE_PART_OF_POST_BUILD--log-levelLOG_LEVEL--device-typeDEVICE_TYPE--build-variantBUILD_VARIANT--share-ccacheSHARE_CCACHE
build successful提升 OpenHarmony 编译速度的选项
build.sh 脚本编译 rk3568 方式命令如下
./build.sh --product-name rk3568 --ccache通过在该命令后添加如下选项提升编译速度
添加 --jobs 参数
为编译添加多线程并发执行
./build.sh --product-name rk3568 --jobsNN 为工作线程数ninja 默认的 N 是 cpu 核数 2
根据系统的内核数设置工作线程的默认数。在构建大型项目时速度可能会受到主线程分派工作和连接依赖关系图的速度的限制。如果有太多的工作线程主线程就会被耗尽并且它的整体运行速度会变慢。从理论上和实验上看工作线程数比物理 cpu 数少一个是一个不错的值。但是总是至少使用一些 worker 来防止我们在低端系统上对 I/0 延迟过于敏感。oh gn 目前的瓶颈点不在于并发度的设置主要是阻塞式的调用 py 脚本的执行这个已经在优化中预计很快会解决掉。
添加 --disable-post-build 参数
取消 Postbuild 过程最后的 ninja trace 解析、每个子系统不包括源码中的 third_party 部分的 rom size 统计等动作会没有(每个子系统部件描述文件名称为 bundle.json,里面定义了子系统的名称。)提供支持 disable post build 参数是怎么做的 https://gitee.com/openharmony/build/issues/I5MT9X
./build.sh --product-name rk3568 --disable-post-build添加 --disable-package-image 参数
取消最后所有的 image 镜像文件压缩成 tar 包的动作tar 包位置 out\rk3568\images.tar.gz
./build.sh --product-name rk3568 --disable-package-image添加 --ccache 参数:
ccache 会缓存 c/c 编译的编译输出下一次在编译输入不变的情况下直接复用缓存的产物。用来缓存编译过的.o 文件等执行 sudo apt-get install ccache 命令安装 ccache再在 --ccache 后添加 export CCACHE_NOHASHDIR“true” 和 export CCACHE_SLOPPINESS“include_file_ctime” 设置 ccache 在做 hash 的时候不 hash 路径、不检查文件的 change time
./build.sh --product-name rk3568 --ccache export CCACHE_NOHASHDIRtrue export CCACHE_SLOPPINESSinclude_file_ctime添加 --fast-rebuild 参数
编译流程主要分为preloader-loader-gn-ninja 这四个过程添加后直接基于已有 out/rk3568/build.ninja 直接执行编译链接步骤跳过前面的产品配置解析和 gn 解析在 gn 相关脚本没有发生改变的前提下使用
./build.sh --product-name rk3568 --fast-rebuild添加 --gn-args enable_notice_collectionfalse 参数
notice file 的搜集用于产品化的 LICENSE 生成取消收集开源 notice 的过程在非产品化场景开发态可关闭提升编译速度节省编译~7% 时间。OpenHarmony 开源软件 Notice 收集策略说明
./build.sh --product-name rk3568 --gn-args enable_notice_collectionfalse添加 --build-only-gn 参数
重新执行 Preloader、loader、gn不进行最后的编译动作 编译流程主要分为preloader-loader-gn-ninja 这四个过程,标准系统的编译构建过程请参考 https://ost.51cto.com/posts/13594 添加 --build-target 参数
该参数用于指定编译模块如何找模块的名字 相关仓下 BUILD.gn 中关注 group、ohos_shared_library、ohos_executable 等关键字。./build.sh --product-name 产品名 --build-target 模块名 --build-only-gn 生成 build.ninja然后去该文件中查找相关模块名。
添加 --gn-args enable_lto_O0true 参数
在链接的时候会减弱优化的等级建议在只考虑编译是否成功的时候使用会影响最后的 so 的性能和 rom 大小
添加 --gn-args archive_ndkfalse 参数
编译 sdk 的时候不执行输出压缩包的动作
添加 export NO_DEVTOOL1 参数
取消 webpack 打包过程中生成 sourcemap 的动作
添加 --gn-args skip_generate_module_list_filetrue 参数
跳过为 test 生成记录文件的过程节省 gn 解析的过程只要不跑 tdd 测试用例这个参数都可以加上编译 tdd 用例也没关系
添加 -T packages --gn-args skip_gen_module_infotrue 参数
在不编译 image 的时候-T packages --gn-args skip_gen_module_infotrue去掉 gn 阶段 module info 的生成
./build.sh --product-name rk3568 --build-target 模块名 -T packages --gn-args skip_gen_module_infotrue添加 --gn-args load_test_configfalse 参数
在不编译 test 用例的时候加上 --gn-args load_test_configfalse来去掉 gn 阶段 test 相关编译目标的解析
以上参数可叠加使用
例如全量编译笔者使用下面这条命令编译速度提升了 120
./build.sh --product-name rk3568 --disable-post-build --disable-package-image --gn-args enable_notice_collectionfalse --gn-args load_test_configfalse添加 --fast-rebuild 参数 方式等效于执行 ninja -C
首先用./build.sh 全量编译然后在源码下执行 ninja -C out/rk3568 moduleb_lib(编译对象模块)
# 例如编译wukong部件的二进制可执行文件wukong
# 将gn和ninja可执行文件添加到PATH环境变量的方法(临时改变只能在当前的终端窗口中有效)
export PATH$PATH:/home/jiajiahao/ohos3.2beta4/sources/prebuilts/build-tools/linux-x86/bin
# 然后在源码目录下执行如下语句
ninja -C out/rk3568 wukong# 例如编译ace_napi部件的动态库libace_napi.z.so
# 将gn和ninja可执行文件添加到PATH环境变量的方法(临时改变只能在当前的终端窗口中有效)
export PATH$PATH:/你自己的源码路径/sources/prebuilts/build-tools/linux-x86/bin
# 然后在源码目录下执行如下语句
ninja -C out/rk3568 ace_napi 将 gn 和 ninja 可执行文件添加到 PATH 环境变量的方法
将 gn 和 ninja 可执行文件添加到 PATH 环境变量的方法(临时改变只能在当前的终端窗口中有效)
# 找到读者你自己的OpenHarmony源码目录下的gn和ninja可执行文件绝对路径在源码下/prebuilts/build-tools/linux-x86/bin
export PATH$PATH:/home/xxx/xxx/sources/prebuilts/build-tools/linux-x86/bin例如笔者的 gn 和 ninja 可执行文件绝对路径
export PATH$PATH:/home/jiajiahao/ohos3.2beta4/sources/prebuilts/build-tools/linux-x86/binnotice file 是否收集的编译选项–gn-args enable_notice_collectionfalse 是如何支持的
指定编译期间的日志级别
在 OpenHarmony 的 build.sh 里通过–log-level 可以指定编译期间的日志级别三个级别可选:debug, info 和 error默认值是 info
./build.sh --product-name rk3568 --ccache --log-leveldebug本地打开 ninja trace 解压 out/rk3568/build.trace.gz将 build.trace 拖到 chrome 的 trace 链接 chrome://tracing/ 打开即可。
码牛课堂也为了积极培养鸿蒙生态人才让大家都能学习到鸿蒙开发最新的技术针对一些在职人员、0基础小白、应届生/计算机专业、鸿蒙爱好者等人群整理了一套纯血版鸿蒙HarmonyOS Next全栈开发技术的学习路线。大家可以进行参考学习https://qr21.cn/FV7h05 ①全方位更合理的学习路径 路线图包括ArkTS基础语法、鸿蒙应用APP开发、鸿蒙能力集APP开发、次开发多端部署开发、物联网开发等九大模块六大实战项目贯穿始终由浅入深层层递进深入理解鸿蒙开发原理 ②多层次更多的鸿蒙原生应用 路线图将包含完全基于鸿蒙内核开发的应用比如一次开发多端部署、自由流转、元服务、端云一体化等多方位的学习内容让学生能够高效掌握鸿蒙开发少走弯路真正理解并应用鸿蒙的核心技术和理念。 ③实战化更贴合企业需求的技术点 学习路线图中的每一个技术点都能够紧贴企业需求经过多次真实实践每一个知识点、每一个项目都是码牛课堂鸿蒙研发团队精心打磨和深度解析的成果注重对学生的细致教学每一步都确保学生能够真正理解和掌握。 为了能让大家更好的学习鸿蒙HarmonyOS NEXT开发技术这边特意整理了《鸿蒙开发学习手册》共计890页希望对大家有所帮助https://qr21.cn/FV7h05
《鸿蒙开发学习手册》https://qr21.cn/FV7h05
如何快速入门
基本概念构建第一个ArkTS应用…… 开发基础知识https://qr21.cn/FV7h05
应用基础知识配置文件应用数据管理应用安全管理应用隐私保护三方应用调用管控机制资源分类与访问学习ArkTS语言…… 基于ArkTS 开发https://qr21.cn/FV7h05
Ability开发UI开发公共事件与通知窗口管理媒体安全网络与链接电话服务数据管理后台任务(Background Task)管理设备管理设备使用信息统计DFX国际化开发折叠屏系列…… 鸿蒙开发面试真题含参考答案https://qr21.cn/FV7h05 大厂鸿蒙面试题https://qr18.cn/F781PH 鸿蒙开发面试大盘集篇共计319页https://qr18.cn/F781PH
1.项目开发必备面试题 2.性能优化方向 3.架构方向 4.鸿蒙开发系统底层方向 5.鸿蒙音视频开发方向 6.鸿蒙车载开发方向 7.鸿蒙南向开发方向