> 技术文档 > OpenHarmony之编译配置白名单机制深度解析:构建系统的安全防线

OpenHarmony之编译配置白名单机制深度解析:构建系统的安全防线


一、白名单机制概述

在OpenHarmony的构建系统中,compile_standard_whitelist.json是一个关键的安全验证机制,它作为编译过程中的\"守门人\",确保只有经过验证的组件和依赖关系才能被纳入最终构建产物。这个机制是OpenHarmony构建系统安全性和规范性的重要保障。

1.1 什么是编译配置白名单

编译配置白名单是OpenHarmony构建系统(hb)中用于验证构建配置合法性的机制。在构建过程中,系统会生成compile_standard_whitelist.json文件到/home/openharmony/out/preloader/{product_name}/目录下,用于记录允许通过的构建项。

1.2 白名单的工作原理

当执行hb build命令进行编译时,构建系统会按照以下流程工作:

  1. 读取编译配置:根据产品选择进行初始化 ,(主要是preloader阶段对系统所需配置进行扫描)
    编译流程可见我的主页文章
  2. 生成预加载信息:包括compile_standard_whitelist.json在内的各种配置文件
  3. 进行白名单验证:检查所有构建项是否符合安全规范
  4. 执行实际编译:通过验证的组件才会被编译

二、白名单的核心类别与功能

根据源码分析,OpenHarmony的编译白名单主要包含七大核心验证类别,每种类别负责不同维度的安全检查。

这里以Openharmony 6.0的白名单为例(像Openharmony 5.0会有部分差异):

{ \"bundle_subsystem_error\": [ \"device/board/hihope/rk3568/ohos.build\", \"device/board/hisilicon/hispark_taurus/linux/ohos.build\", \"device/board/hisilicon/hispark_taurus/ohos.build\", \"device/qemu/arm_virt/linux/ohos.build\", \"third_party/flutter/glfw/bundle.json\", \"vendor/hihope/rk3568/ohos.build\", \"vendor/hihope/ipcamera/ohos.build\" ], \"subsystem_components\": [], \"gn_part_or_subsystem_error\": [ \"//arkcompiler/toolchain/tooling/test:debugger_entry\", \"//arkcompiler/toolchain/tooling/test:jsdebugtest\", \"//arkcompiler/toolchain/tooling:libark_ecma_debugger_test\", \"//arkcompiler/toolchain/tooling/client:libark_client\", \"//device/board/hihope/rk3568/camera/vdi_impl/v4l2/device_manager:camera_device_manager\", \"//device/board/hihope/rk3568/camera/vdi_impl/v4l2/driver_adapter:camera_v4l2_adapter\", \"//device/board/hihope/rk3568/camera/vdi_impl/v4l2/metadata_manager:camera_metadata_manager\", \"//device/board/hihope/rk3568/camera/vdi_impl/v4l2/pipeline_core:camera_ipp_algo_example\", \"//device/board/hihope/rk3568/camera/vdi_impl/v4l2/pipeline_core:camera_pipeline_core\", \"//device/board/hihope/rk3568/camera/vdi_impl/v4l2:camera_host_vdi_impl_1.0\", \"//device/board/hihope/rk3568/camera/vdi_impl/v4l2:camera_pipeline_config\", \"//device/soc/rockchip/rk3568/hardware/codec/jpeg:libjpeg_vdi_impl\", \"//device/soc/rockchip/rk3568/hardware/codec:libcodec_oem_interface\", \"//device/soc/rockchip/rk3568/hardware/display:display_composer_vendor\", \"//device/soc/rockchip/rk3568/hardware/display:display_gfx\", \"//device/soc/rockchip/rk3568/hardware/display:libdisplay_buffer_vdi_impl\", \"//device/soc/rockchip/rk3568/hardware/display:libdisplay_buffer_vendor\", \"//device/soc/rockchip/rk3568/hardware/display:libdisplay_composer_vdi_impl\", \"//device/soc/rockchip/rk3568/hardware/mpp/mpp/legacy:librockchip_vpu\", \"//device/soc/rockchip/rk3568/hardware/omx_il/component/common:libRkOMX_Resourcemanager\", \"//device/soc/rockchip/rk3568/hardware/omx_il/component/video/dec:libomxvpu_dec\", \"//device/soc/rockchip/rk3568/hardware/omx_il/component/video/enc:libomxvpu_enc\", \"//device/soc/rockchip/rk3568/hardware/omx_il/core:libOMX_Core\", \"//device/soc/rockchip/rk3568/hardware/omx_il/libOMXPlugin:libOMX_Pluginhw\", \"//ide/tools/previewer:lite_previewer\", \"//vendor/hihope/rk3568/bluetooth:libbt_vendor\", \"//vendor/hihope/ipcamera/bluetooth:libbt_vendor\" ], \"deps_added_external_part_module\": [ \"//arkcompiler/toolchain/inspector:ark_debugger_static\", \"//arkcompiler/toolchain/tooling:libark_ecma_debugger\", \"//arkcompiler/toolchain/tooling:libark_ecma_debugger_set\", \"//arkcompiler/toolchain/websocket:websocket\", \"//base/hiviewdfx/hilog/interfaces/js/kits/napi:libhilognapi_src\", \"//base/hiviewdfx/hiview/test/plugins/examples/event_processor_example1:event_processor_example1\", \"//base/hiviewdfx/hiview/test/plugins/examples/event_processor_example2:event_processor_example2\", \"//base/hiviewdfx/hiview/test/plugins/examples/event_processor_example3:event_processor_example3\", \"//base/hiviewdfx/hiview/test/plugins/examples/event_processor_example4:event_processor_example4\", \"//base/hiviewdfx/hiview/test/plugins/examples/event_processor_example5:event_processor_example5\", \"//base/hiviewdfx/hiview/test/plugins/examples/event_source_example:event_source_example\", \"//base/hiviewdfx/hiview/test/plugins/examples_bundle/bundle_event_source_example:bundle_event_source_example\", \"//base/hiviewdfx/hiview/test/plugins/examples_bundle/bundle_plugin_example1:bundle_plugin_example1\", \"//base/hiviewdfx/hiview/test/plugins/examples_bundle/bundle_plugin_example2:bundle_plugin_example2\", \"//base/hiviewdfx/hiview/test/plugins/examples_bundle/bundle_plugin_example3:bundle_plugin_example3\", \"//base/security/device_security_level/baselib/msglib:messenger_static\", \"//base/security/device_security_level/baselib/utils:utils_static\", \"//base/security/device_security_level/interfaces/inner_api:dslm_sdk\",\"//base/security/device_security_level/interfaces/inner_api:dslm_sdk_small\", \"//base/security/device_security_level/oem_property/ohos/lite:dslm_ohos_cred_obj\", \"//base/security/device_security_level/services/common:service_common_obj\", \"//base/security/device_security_level/services/dslm:service_dslm_obj\", \"//base/security/device_security_level/services/msg:service_msg_obj\", \"//base/security/device_security_level/services/sa:dslm_server\", \"//base/security/device_security_level/services/sa:service_sa_static\", \"//base/security/huks/frameworks/huks_standard/main/core:libhuks_core_small_static\", \"//base/security/huks/frameworks/huks_standard/main/crypto_engine/mbedtls:libhuks_mbedtls_small_static\", \"//base/security/huks/frameworks/huks_standard/main/crypto_engine:libhuks_crypto_engine_small_static\", \"//base/security/huks/frameworks/huks_standard/main/os_dependency:libhuks_os_dependency_small_static\", \"//base/security/huks/interfaces/inner_api/huks_lite:huks_3.0_sdk\", \"//base/security/huks/interfaces/inner_api/huks_lite:huks_server\", \"//base/security/huks/services/huks_standard/huks_engine/main/core:huks_engine_core_standard\", \"//base/security/huks/services/huks_standard/huks_service/main/core:libhuks_service_core_small_static\", \"//base/security/huks/services/huks_standard/huks_service/main/os_dependency/idl:libhuks_service_idl_small_static\", \"//base/security/huks/services/huks_standard/huks_service/main:libhuks_service_small_static\", \"//base/security/huks/utils/crypto_adapter:libhuks_utils_client_service_adapter_static\", \"//base/security/huks/utils/file_operator:libhuks_utils_file_operator_static\", \"//base/security/huks/utils/mutex:libhuks_utils_mutex_static\", \"//base/startup/init/interfaces/innerkits:libbegetutil\", \"//base/startup/init/services/begetctl:begetctl\", \"//base/startup/init/services/begetctl:param\", \"//base/startup/init/services/begetctl:paramshell\", \"//base/startup/init/services/init/standard:init\", \"//base/startup/init/services/param/base:parameterbase_ext\", \"//base/startup/init/services/sandbox:sandbox\", \"//build/rust/tests/test_bin_cargo_crate:test_bin_cargo_crate\", \"//build/rust/tests/test_bindgen_test/test_for_h:bindgen_test_for_h\", \"//build/rust/tests/test_bindgen_test/test_for_hello_world:bindgen_test\", \"//build/rust/tests/test_bindgen_test/test_for_hpp:bindgen_test_hpp\", \"//build/rust/tests/test_cdylib_crate:test_cdylib_crate\", \"//build/rust/tests/test_cxx:test_cxx_exe\", \"//build/rust/tests/test_cxx_rust:test_cxx_rust\", \"//build/rust/tests/test_cxx_rust:test_cxx_rust_staticlib\", \"//build/rust/tests/test_dylib_crate:test_dylib_crate\", \"//build/rust/tests/test_proc_macro_crate/test_attribute_macro:test_attribute_macro\", \"//build/rust/tests/test_proc_macro_crate/test_derive_helper_macro:test_derive_helper_macro\", \"//build/rust/tests/test_proc_macro_crate/test_function_macro:test_function_macro\", \"//build/rust/tests/test_rlib_cargo_crate:target\", \"//build/rust/tests/test_rlib_cargo_crate:test_rlib_crate_associated_bin\", \"//build/rust/tests/test_rlib_crate:test_rlib_crate\", \"//build/rust/tests/test_staticlib_crate:test_staticlib_crate\", \"//commonlibrary/utils_lite/js/builtin/simulator:ace_kit_deviceinfo_simulator\", \"//commonlibrary/utils_lite/js/builtin/simulator:ace_kit_file_simulator\", \"//commonlibrary/utils_lite/js/builtin/simulator:ace_kit_kvstore_simulator\", \"//developtools/syscap_codec:syscap_tool_bin\", \"//device/board/hihope/rk3568/camera/vdi_impl/v4l2/pipeline_core:camera_pipeline_core\", \"//device/board/hihope/rk3568/camera/vdi_impl/v4l2:camera_host_vdi_impl_1.0\", \"//device/soc/rockchip/rk3568/hardware/codec:libcodec_oem_interface\", \"//device/soc/rockchip/rk3568/hardware/display:display_composer_vendor\", \"//device/soc/rockchip/rk3568/hardware/display:display_gfx\", \"//device/soc/rockchip/rk3568/hardware/display:libdisplay_buffer_vdi_impl\", \"//device/soc/rockchip/rk3568/hardware/display:libdisplay_buffer_vendor\", \"//device/soc/rockchip/rk3568/hardware/display:libdisplay_composer_vdi_impl\", \"//device/soc/rockchip/rk3568/hardware/mpp/mpp/hdi_mpp:hdi_mpp\", \"//device/soc/rockchip/rk3568/hardware/mpp/mpp/legacy:librockchip_vpu\", \"//device/soc/rockchip/rk3568/hardware/mpp/mpp/legacy:rockchip_vpu_src\", \"//device/soc/rockchip/rk3568/hardware/omx_il/component/common:RkOMX_Basecomponent\", \"//device/soc/rockchip/rk3568/hardware/omx_il/component/common:libRkOMX_Resourcemanager\", \"//device/soc/rockchip/rk3568/hardware/omx_il/component/video/dec:libomxvpu_dec\", \"//device/soc/rockchip/rk3568/hardware/omx_il/component/video/enc:libomxvpu_enc\", \"//device/soc/rockchip/rk3568/hardware/omx_il/core:libOMX_Core\", \"//device/soc/rockchip/rk3568/hardware/omx_il/osal:RkOMX_OSAL\", \"//drivers/hdf_core/adapter/build/test_common:libhdf_test_common\", \"//drivers/hdf_core/adapter/uhdf/manager:hdf_core\", \"//drivers/hdf_core/adapter/uhdf/posix:hdf_posix_osal\", \"//drivers/hdf_core/adapter/uhdf2/hdi:libhdi\", \"//drivers/hdf_core/adapter/uhdf2/utils:libhdf_utils\", \"//drivers/peripheral/bluetooth/audio/hal/hdi_passthrough:hdi_audio_bluetooth\", \"//drivers/peripheral/partitionslot/hdi_service:libpartitionslot_driver\", \"//drivers/peripheral/usb/sample/device/liteos:usb_dev_test\", \"//drivers/peripheral/usb/sample/host/liteos_test:liteos_host_speed_test\", \"//drivers/peripheral/usb/sample/host:usbhost_ddk_test\", \"//foundation/arkui/ace_engine/adapter/preview/entrance:preview_entrance_source\", \"//foundation/arkui/ace_engine/adapter/preview/osal:preview_osal_source\", \"//foundation/arkui/ace_engine/frameworks/bridge/js_frontend/engine/jsi:js_engine_bridge_ark_linux\", \"//foundation/arkui/ace_engine/frameworks/bridge/js_frontend/engine/jsi:js_engine_bridge_ark_windows\", \"//foundation/arkui/ace_engine/frameworks/core/components_ng/animation:ace_core_components_animation_ng_linux\", \"//foundation/arkui/ace_engine/frameworks/core/components_ng/animation:ace_core_components_animation_ng_windows\", \"//foundation/arkui/ace_engine/frameworks/core/components_ng/base:ace_core_components_base_ng_linux\", \"//foundation/arkui/ace_engine/frameworks/core/components_ng/base:ace_core_components_base_ng_windows\", \"//foundation/arkui/ace_engine/frameworks/core/components_ng/event:ace_core_components_event_ng_linux\", \"//foundation/arkui/ace_engine/frameworks/core/components_ng/event:ace_core_components_event_ng_windows\", \"//foundation/arkui/ace_engine/frameworks/core/components_ng/gestures:ace_core_components_gestures_ng_linux\", \"//foundation/arkui/ace_engine/frameworks/core/components_ng/gestures:ace_core_components_gestures_ng_windows\", \"//foundation/arkui/ace_engine/frameworks/core/components_ng/image_provider:ace_core_components_image_provider_ng_linux\", \"//foundation/arkui/ace_engine/frameworks/core/components_ng/image_provider:ace_core_components_image_provider_ng_windows\", \"//foundation/arkui/ace_engine/frameworks/core/components_ng/layout:ace_core_components_layout_ng_linux\", \"//foundation/arkui/ace_engine/frameworks/core/components_ng/layout:ace_core_components_layout_ng_windows\", \"//foundation/arkui/ace_engine/frameworks/core/components_ng/manager:ace_core_components_manager_ng_linux\", \"//foundation/arkui/ace_engine/frameworks/core/components_ng/manager:ace_core_components_manager_ng_windows\", \"//foundation/arkui/ace_engine/frameworks/core/components_ng/pattern/patternlock:ace_core_components_patternlock_pattern_ng_linux\", \"//foundation/arkui/ace_engine/frameworks/core/components_ng/pattern/patternlock:ace_core_components_patternlock_pattern_ng_windows\", \"//foundation/arkui/ace_engine/frameworks/core/components_ng/pattern/preview_mock:ace_core_components_preview_mock_pattern_ng_linux\", \"//foundation/arkui/ace_engine/frameworks/core/components_ng/pattern/preview_mock:ace_core_components_preview_mock_pattern_ng_windows\", \"//foundation/arkui/ace_engine/frameworks/core/components_ng/pattern/qrcode:ace_core_components_qrcode_pattern_ng_linux\", \"//foundation/arkui/ace_engine/frameworks/core/components_ng/pattern/qrcode:ace_core_components_qrcode_pattern_ng_windows\", \"//foundation/arkui/ace_engine/frameworks/core/components_ng/pattern/security_component:ace_core_components_security_component_pattern_ng_linux\", \"//foundation/arkui/ace_engine/frameworks/core/components_ng/pattern/security_component:ace_core_components_security_component_pattern_ng_windows\", \"//foundation/arkui/ace_engine/frameworks/core/components_ng/pattern/text_field:ace_core_components_text_field_pattern_ng_linux\", \"//foundation/arkui/ace_engine/frameworks/core/components_ng/pattern/text_field:ace_core_components_text_field_pattern_ng_windows\", \"//foundation/arkui/ace_engine/frameworks/core/components_ng/pattern:ace_core_components_pattern_ng_linux\", \"//foundation/arkui/ace_engine/frameworks/core/components_ng/pattern:ace_core_components_pattern_ng_windows\", \"//foundation/arkui/ace_engine/frameworks/core/components_ng/property:ace_core_components_property_ng_linux\", \"//foundation/arkui/ace_engine/frameworks/core/components_ng/property:ace_core_components_property_ng_windows\", \"//foundation/arkui/ace_engine/frameworks/core/components_ng/render:ace_core_components_render_ng_linux\", \"//foundation/arkui/ace_engine/frameworks/core/components_ng/render:ace_core_components_render_ng_windows\", \"//foundation/arkui/ace_engine/frameworks/core/components_ng/svg:ace_core_components_svg_ng_linux\", \"//foundation/arkui/ace_engine/frameworks/core/components_ng/svg:ace_core_components_svg_ng_windows\", \"//foundation/arkui/ace_engine/frameworks/core/components_ng/syntax:ace_core_components_syntax_ng_linux\", \"//foundation/arkui/ace_engine/frameworks/core/components_ng/syntax:ace_core_components_syntax_ng_windows\", \"//foundation/arkui/ace_engine_lite/frameworks/targets/simulator:ace_lite\", \"//foundation/arkui/ui_lite/ext/ide:ui_ide\", \"//foundation/communication/ipc/ipc/test/auxiliary/native:ipc_client_test\", \"//foundation/communication/ipc/ipc/test/auxiliary/native:ipc_server_test\", \"//foundation/communication/ipc/ipc/test/auxiliary/native:ipc_server_test_extra\", \"//foundation/communication/ipc/ipc/test/auxiliary/native:ipc_test_helper\", \"//foundation/communication/ipc/ipc/test/auxiliary/native:ipc_test_helper_extra\", \"//foundation/communication/netstack/frameworks/js/napi/http:http\", \"//foundation/communication/netstack/utils/napi_utils:napi_utils_static\", \"//foundation/distributeddatamgr/kv_store/kvstoremock/distributeddb:distributeddb_mock\", \"//foundation/distributeddatamgr/kv_store/kvstoremock/interfaces/innerkits/distributeddata:distributeddata_inner_mock\", \"//foundation/distributeddatamgr/kv_store/kvstoremock/interfaces/jskits/distributeddata:distributeddata\", \"//foundation/distributeddatamgr/kv_store/kvstoremock/interfaces/jskits/distributedkvstore:distributedkvstore\", \"//foundation/distributeddatamgr/preferences/frameworks/js/napi/preferences:preferences\", \"//foundation/distributeddatamgr/preferences/interfaces/inner_api:native_preferences\", \"//foundation/distributeddatamgr/relational_store/frameworks/js/napi/rdb:napi_rdb\", \"//foundation/distributeddatamgr/relational_store/frameworks/js/napi/rdb:rdb\", \"//foundation/distributeddatamgr/relational_store/interfaces/inner_api/rdb:native_rdb\", \"//foundation/distributedhardware/distributed_camera/services/cameraservice/cameraoperator/client/test/sample:dcamera_client_demo\", \"//foundation/multimedia/camera_framework/interfaces/inner_api/native/test:camera_capture\", \"//foundation/multimedia/camera_framework/interfaces/inner_api/native/test:camera_capture_video\", \"//foundation/multimedia/camera_framework/interfaces/inner_api/native/test:camera_video\", \"//foundation/multimedia/player_framework/interfaces/inner_api/native:media_client\", \"//foundation/window/window_manager/previewer:previewer_window\", \"//foundation/window/window_manager/previewer:previewer_window_napi\", \"//foundation/window/window_manager/test/demo:demo_mirror_screen_listener\", \"//foundation/window/window_manager/test/demo:demo_snapshot_virtual_screen\", \"//foundation/window/window_manager/test/demo:demo_system_sub_window\", \"//foundation/window/window_manager/test/demo:demo_water_mark_listener\", \"//foundation/window/window_manager/utils:libwmutil_static\", \"//ide/tools/previewer/cli:cli_lite\", \"//ide/tools/previewer/jsapp:jsapp_lite\", \"//ide/tools/previewer/mock:mock_lite\", \"//test/testfwk/arkxtest/uitest:uitest_server\", \"//test/xts/acts/arkui/ace_ets_xcomponent/entry/src/main/cpp:nativerender\", \"//test/xts/acts/arkui/libuv:libuvruntest\", \"//test/xts/acts/bundlemanager/bundle_standard/bundlemanager/actsbundlenativeninthapitest/entry/src/main/cpp:bundlendk1\", \"//test/xts/acts/graphic/vkgl/src/deqpgles2/build0001:libdeqpgles2func0001\", \"//test/xts/acts/graphic/vkgl/src/deqpgles2/build0002:libdeqpgles2func0002\", \"//test/xts/acts/graphic/vkgl/src/deqpgles2/build0004:libdeqpgles2func0004\", \"//test/xts/acts/graphic/vkgl/src/deqpgles2/build0005:libdeqpgles2func0005\", \"//test/xts/acts/graphic/vkgl/src/deqpgles2/build0006:libdeqpgles2func0006\", \"//test/xts/acts/graphic/vkgl/src/deqpgles2/build0007:libdeqpgles2func0007\", \"//test/xts/acts/graphic/vkgl/src/deqpgles2/build0008:libdeqpgles2func0008\", \"//test/xts/acts/graphic/vkgl/src/deqpgles2/build0009:libdeqpgles2func0009\", \"//test/xts/acts/graphic/vkgl/src/deqpgles2/build0010:libdeqpgles2func0010\", \"//test/xts/acts/graphic/vkgl/src/deqpgles2/build0011:libdeqpgles2func0011\", \"//test/xts/acts/graphic/vkgl/src/deqpgles2/build0012:libdeqpgles2func0012\", \"//test/xts/acts/graphic/vkgl/src/deqpgles2/build0015:libdeqpgles2func0015\", \"//test/xts/acts/graphic/vkgl/src/deqpgles2/build0016:libdeqpgles2func0016\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0001:libdeqpgles3func0001\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0002:libdeqpgles3func0002\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0003:libdeqpgles3func0003\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0004:libdeqpgles3func0004\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0005:libdeqpgles3func0005\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0006:libdeqpgles3func0006\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0007:libdeqpgles3func0007\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0008:libdeqpgles3func0008\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0009:libdeqpgles3func0009\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0010:libdeqpgles3func0010\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0011:libdeqpgles3func0011\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0012:libdeqpgles3func0012\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0013:libdeqpgles3func0013\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0014:libdeqpgles3func0014\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0015:libdeqpgles3func0015\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0016:libdeqpgles3func0016\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0017:libdeqpgles3func0017\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0018:libdeqpgles3func0018\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0019:libdeqpgles3func0019\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0020:libdeqpgles3func0020\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0021:libdeqpgles3func0021\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0022:libdeqpgles3func0022\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0023:libdeqpgles3func0023\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0024:libdeqpgles3func0024\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0025:libdeqpgles3func0025\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0027:libdeqpgles3func0027\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0028:libdeqpgles3func0028\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0029:libdeqpgles3func0029\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0030:libdeqpgles3func0030\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0031:libdeqpgles3func0031\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0032:libdeqpgles3func0032\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0033:libdeqpgles3func0033\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0034:libdeqpgles3func0034\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0035:libdeqpgles3func0035\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0037:libdeqpgles3func0037\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0038:libdeqpgles3func0038\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0039:libdeqpgles3func0039\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0041:libdeqpgles3func0041\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0042:libdeqpgles3func0042\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0043:libdeqpgles3func0043\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0044:libdeqpgles3func0044\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0001:libdeqpgles31func0001\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0002:libdeqpgles31func0002\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0003:libdeqpgles31func0003\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0004:libdeqpgles31func0004\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0005:libdeqpgles31func0005\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0006:libdeqpgles31func0006\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0007:libdeqpgles31func0007\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0008:libdeqpgles31func0008\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0009:libdeqpgles31func0009\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0010:libdeqpgles31func0010\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0011:libdeqpgles31func0011\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0012:libdeqpgles31func0012\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0014:libdeqpgles31func0014\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0015:libdeqpgles31func0015\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0016:libdeqpgles31func0016\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0017:libdeqpgles31func0017\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0018:libdeqpgles31func0018\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0019:libdeqpgles31func0019\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0020:libdeqpgles31func0020\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0021:libdeqpgles31func0021\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0022:libdeqpgles31func0022\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0023:libdeqpgles31func0023\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0024:libdeqpgles31func0024\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0025:libdeqpgles31func0025\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0026:libdeqpgles31func0026\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0027:libdeqpgles31func0027\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0028:libdeqpgles31func0028\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0029:libdeqpgles31func0029\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0030:libdeqpgles31func0030\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0031:libdeqpgles31func0031\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0032:libdeqpgles31func0032\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0033:libdeqpgles31func0033\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0034:libdeqpgles31func0034\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0035:libdeqpgles31func0035\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0036:libdeqpgles31func0036\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0037:libdeqpgles31func0037\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0038:libdeqpgles31func0038\", \"//test/xts/acts/graphic/vkgl/src/khrgles2/build0001:libkhrgles2func0001\", \"//test/xts/acts/graphic/vkgl/src/khrgles3/build0001:libkhrgles3func0001\", \"//test/xts/acts/graphic/vkgl/src/khrgles3/build0002:libkhrgles3func0002\", \"//test/xts/acts/graphic/vkgl/src/khrgles3/build0003:libkhrgles3func0003\", \"//test/xts/acts/graphic/vkgl/src/khrgles3/build0005:libkhrgles3func0005\", \"//test/xts/acts/graphic/vkgl/src/khrgles31/build0001:libkhrgles31func0001\", \"//test/xts/acts/graphic/vkgl/src/khrgles31/build0002:libkhrgles31func0002\", \"//test/xts/acts/graphic/vkgl/src/khrgles31/build0004:libkhrgles31func0004\", \"//test/xts/acts/hiviewdfx/hilogtest/hilogjstest/src/main/cpp:hilogndk\", \"//test/xts/acts/hiviewdfx/utils/native:utilskit\", \"//third_party/flutter/build/skia:ace_fontmgr_standard\", \"//third_party/flutter/build/skia:skia_shared\", \"//third_party/vk-gl-cts/framework/platform/ohos/rosen_context:rosen_context\", \"//third_party/vk-gl-cts/framework/platform:libdeqp_ohos_platform\" ], \"external_deps_added_self_part_module\": [ \"//build/rust/tests/test_bin_crate:test_bin_crate\", \"//build/rust/tests/test_bindgen_test/test_for_extern_c:test_extern_c\", \"//build/rust/tests/test_bindgen_test/test_for_h:bindgen_test_for_h\", \"//build/rust/tests/test_bindgen_test/test_for_hello_world:bindgen_test\", \"//build/rust/tests/test_bindgen_test/test_for_hpp:bindgen_test_hpp\", \"//build/rust/tests/test_cdylib_crate:simple_printer_cdylib\", \"//build/rust/tests/test_cxx:test_cxx_examp_rust\", \"//build/rust/tests/test_cxx_rust:test_cxx_rust\", \"//build/rust/tests/test_dylib_crate:test_dylib_crate\", \"//build/rust/tests/test_proc_macro_crate/test_attribute_macro:test_attribute_macro\", \"//build/rust/tests/test_proc_macro_crate/test_derive_helper_macro:test_derive_helper_macro\", \"//build/rust/tests/test_proc_macro_crate/test_function_macro:test_function_macro\", \"//build/rust/tests/test_rlib_crate:test_rlib_crate\", \"//build/rust/tests/test_static_link:test_static_link\", \"//build/rust/tests/test_staticlib_crate:simple_printer_staticlib\", \"//drivers/hdf_core/adapter/uhdf/manager:hdf_core\", \"//drivers/hdf_core/adapter/uhdf/platform:hdf_platform\", \"//drivers/peripheral/codec/test/demo/adapter:codec_hdi_adapter_decode\", \"//drivers/peripheral/codec/test/demo/adapter:codec_hdi_adapter_encode\", \"//drivers/peripheral/codec/test/demo/v1.0:codec_decode_test_async\", \"//drivers/peripheral/codec/test/demo/v1.0:codec_decode_test_ipc\", \"//drivers/peripheral/codec/test/demo/v1.0:codec_encode_test_async\", \"//drivers/peripheral/codec/test/demo/v1.0:codec_encode_test_ipc\", \"//drivers/peripheral/codec/test/demo/v2.0:codec_hdi_omx_decode\", \"//drivers/peripheral/codec/test/demo/v2.0:codec_hdi_omx_encode\", \"//foundation/communication/dsoftbus/tests/sdk/transmission/integration_test:softbus_test_server\", \"//foundation/communication/ipc/ipc/test/auxiliary/native:ipc_client_test\", \"//foundation/communication/ipc/ipc/test/auxiliary/native:ipc_server_test\", \"//foundation/communication/ipc/ipc/test/auxiliary/native:ipc_server_test_extra\", \"//foundation/communication/ipc/ipc/test/auxiliary/native:ipc_test_helper\", \"//foundation/communication/ipc/ipc/test/auxiliary/native:ipc_test_helper_extra\", \"//test/xts/acts/arkui/ace_napi_test/entry/src/main/cpp:napitest\", \"//test/xts/acts/multimedia/image/image_js_standard/imagePixelMapNDK/entry/src/main/cpp:ImagePixelMapNDKTest\", \"//test/xts/acts/multimedia/image/image_js_standard/imageReceiverNDK/entry/src/main/cpp:ImageReceiverNDKTest\", \"//test/xts/acts/multimedia/image/image_js_standard/imageColorSpaceTransfer/entry/src/main/cpp:ImageColorSpaceTransferTest\", \"//test/xts/acts/multimedia/image/image_js_standard/image_ndk_test/entry/src/main/cpp:imagePixelmap\", \"//third_party/libinput:libinput-third-mmi\", \"//third_party/libinput:patch_gen_libinput-third-mmi\" ], \"external_deps_bundle_not_add\": [ \"//arkcompiler/toolchain/tooling/test:jsdebugtest\", \"//arkcompiler/toolchain/tooling:libark_ecma_debugger_test\", \"//arkcompiler/toolchain/tooling/client:libark_client\", \"//base/security/device_security_level/oem_property/common:oem_common_obj\", \"//base/security/device_security_level/services/common:service_common_obj\", \"//base/security/huks/frameworks/crypto_lite/cipher:cipher_shared\", \"//base/security/huks/frameworks/huks_standard/main/common:libhuks_common_small_static\", \"//base/security/huks/frameworks/huks_standard/main/core:libhuks_core_small_static\", \"//base/security/huks/frameworks/huks_standard/main/crypto_engine/mbedtls:libhuks_mbedtls_small_static\", \"//base/security/huks/frameworks/huks_standard/main/os_dependency:libhuks_os_dependency_small_static\", \"//base/security/huks/interfaces/inner_api/huks_lite:huks_3.0_sdk\", \"//base/security/huks/interfaces/inner_api/huks_lite:huks_server\", \"//base/security/huks/services/huks_standard/huks_engine/main/core:huks_engine_core_standard\", \"//base/security/huks/services/huks_standard/huks_service/main/core:libhuks_service_core_small_static\", \"//base/security/huks/services/huks_standard/huks_service/main/os_dependency/idl:libhuks_service_idl_small_static\", \"//base/security/huks/services/huks_standard/huks_service/main:libhuks_service_small_static\", \"//base/security/huks/test/unittest/huks_lite_test/common:huks_3.0_test_common\", \"//base/security/huks/test/unittest/modify_old_version_key_test_util:huks_modify_old_version_key_util\", \"//base/security/huks/utils/crypto_adapter:libhuks_utils_client_service_adapter_static\", \"//base/security/huks/utils/file_operator:libhuks_utils_file_operator_static\", \"//base/security/huks/utils/mutex:libhuks_utils_mutex_static\", \"//base/startup/init/services/begetctl:begetctl\", \"//base/startup/init/services/modules/seccomp:libseccomp_static\", \"//device/board/hihope/rk3568/camera/vdi_impl/v4l2/device_manager:camera_device_manager\", \"//device/board/hihope/rk3568/camera/vdi_impl/v4l2/driver_adapter:camera_v4l2_adapter\", \"//device/board/hihope/rk3568/camera/vdi_impl/v4l2/metadata_manager:camera_metadata_manager\", \"//device/board/hihope/rk3568/camera/vdi_impl/v4l2/pipeline_core:camera_ipp_algo_example\", \"//device/board/hihope/rk3568/camera/vdi_impl/v4l2/pipeline_core:camera_pipeline_core\", \"//device/board/hihope/rk3568/camera/vdi_impl/v4l2:camera_host_vdi_impl_1.0\", \"//device/soc/rockchip/rk3568/hardware/codec/jpeg:libjpeg_vdi_impl\", \"//device/soc/rockchip/rk3568/hardware/codec:libcodec_oem_interface\", \"//device/soc/rockchip/rk3568/hardware/display:display_composer_vendor\", \"//device/soc/rockchip/rk3568/hardware/display:display_gfx\", \"//device/soc/rockchip/rk3568/hardware/display:libdisplay_buffer_vdi_impl\", \"//device/soc/rockchip/rk3568/hardware/display:libdisplay_buffer_vendor\", \"//device/soc/rockchip/rk3568/hardware/display:libdisplay_composer_vdi_impl\", \"//device/soc/rockchip/rk3568/hardware/display:libhigbm_vendor\", \"//device/soc/rockchip/rk3568/hardware/mpp/mpp/hdi_mpp:hdi_mpp\", \"//device/soc/rockchip/rk3568/hardware/mpp/mpp/legacy:rockchip_vpu_src\", \"//device/soc/rockchip/rk3568/hardware/omx_il/component/common:RkOMX_Basecomponent\", \"//device/soc/rockchip/rk3568/hardware/omx_il/component/common:libRkOMX_Resourcemanager\", \"//device/soc/rockchip/rk3568/hardware/omx_il/component/video/dec:libomxvpu_dec\", \"//device/soc/rockchip/rk3568/hardware/omx_il/component/video/enc:libomxvpu_enc\", \"//device/soc/rockchip/rk3568/hardware/omx_il/core:libOMX_Core\", \"//device/soc/rockchip/rk3568/hardware/omx_il/libOMXPlugin:libOMX_Pluginhw\", \"//device/soc/rockchip/rk3568/hardware/omx_il/osal:RkOMX_OSAL\", \"//drivers/hdf_core/adapter/uhdf/platform:hdf_platform\", \"//drivers/peripheral/input/hal:hdi_input\", \"//drivers/peripheral/light/hal:hdi_light\", \"//drivers/peripheral/sensor/hal:hdi_sensor\", \"//drivers/peripheral/usb/sample/device/liteos:usb_dev_test\", \"//drivers/peripheral/vibrator/hal:hdi_vibrator\", \"//foundation/ability/dmsfwk/services/dtbschedmgr:distributedschedsvr\", \"//foundation/distributedhardware/distributed_screen/services/screendemo:distributedScreenTest\", \"//foundation/graphic/graphic_2d/rosen/samples/texgine:libskia_rs_framework\", \"//foundation/multimedia/camera_framework/interfaces/inner_api/native/test:camera_video\", \"//foundation/multimedia/player_framework/services/services:media_service\", \"//foundation/window/window_manager/wmserver:libwms\", \"//test/xts/acts/hiviewdfx/utils/native:utilskit\", \"//test/xts/hats/hdf/display/composer/common:disp_dev_hdi_test\", \"//third_party/libfuse:libfuse\", \"//vendor/hihope/rk3568/bluetooth:libbt_vendor\", \"//vendor/hihope/ipcamera/bluetooth:libbt_vendor\", \"//vendor/hihope/ipcamera/bluetooth:libbt_vendor\", \"//commonlibrary/c_utils/base:utils\", \"//commonlibrary/c_utils/base:utilsbase\", \"//third_party/f2fs-tools/fsck:fsck.f2fs\", \"//third_party/f2fs-tools/mkfs:mkfs.f2fs\", \"//base/startup/init/services/modules/bootevent:libbootevent_static\", \"//base/startup/init/services/modules/init_hook:inithook\", \"//base/startup/init/services/modules/reboot:libreboot_static\", \"//commonlibrary/c_utils/base:utils_static_cxx_rust\", \"//foundation/ai/intelligent_voice_framework/services/intell_voice_service:intell_voice_server\", \"//foundation/bundlemanager/bundle_framework/interfaces/kits/js/bundlemgr:bundle\", \"//foundation/bundlemanager/bundle_framework/interfaces/kits/js/package:package\", \"//foundation/bundlemanager/bundle_framework/interfaces/kits/js/default_app:defaultappmanager\", \"//foundation/bundlemanager/bundle_framework/interfaces/kits/js/installer:installer\", \"//foundation/bundlemanager/bundle_framework/interfaces/kits/js/launchermgr:innerbundlemanager\", \"//foundation/bundlemanager/bundle_framework/interfaces/kits/js/zip:zlib\", \"//foundation/bundlemanager/ecological_rule_manager/services:ecologicalrulemgr_service\", \"//foundation/distributeddatamgr/kv_store/frameworks/libs/distributeddb:customtokenizer\", \"//foundation/distributeddatamgr/kv_store/databaseutils:database_utils\", \"//foundation/distributeddatamgr/kv_store/frameworks/libs/distributeddb:distributeddb\", \"//foundation/distributeddatamgr/kv_store/frameworks/libs/distributeddb/gaussdb_rd:gaussdb_rd\", \"//foundation/distributeddatamgr/kv_store/interfaces/jskits/distributeddata:distributeddata\", \"//foundation/distributeddatamgr/kv_store/interfaces/jskits/distributedkvstore:distributedkvstore\", \"//foundation/multimedia/audio_framework/services/audio_policy:audio_policy_service\", \"//foundation/multimedia/audio_framework/frameworks/native/audioutils:audio_xml_utils\", \"//foundation/multimedia/audio_framework/services/audio_service:audio_service\", \"//foundation/multimedia/av_session/services/session:avsession_item\", \"//foundation/multimedia/audio_framework/services/audio_service:audio_client\", \"//foundation/multimedia/av_session/services/session:avsession_service\", \"//foundation/multimedia/av_codec/services/services:av_codec_service\", \"//foundation/multimedia/av_session/services/session:avsession_cast_item\", \"//foundation/multimedia/camera_framework/services/camera_service:camera_service\", \"//foundation/multimedia/player_framework/services/utils:media_service_utils\", \"//foundation/resourceschedule/background_task_mgr/interfaces/innerkits:bgtaskmgr_innerkits\", \"//third_party/cups-filters:cupsfilters\", \"//third_party/cups-filters:imagetoraster\", \"//third_party/f2fs-tools/fsck:fsck.f2fs\", \"//third_party/f2fs-tools/mkfs:mkfs.f2fs\", \"//third_party/mindspore/mindspore-src/source/mindspore/lite:mindspore_lib\", \"//third_party/mindspore/mindspore-src/source/mindspore/lite:mindspore_ndk\", \"//third_party/mindspore/mindspore-src/source/mindspore/lite:mindspore_train_lib\", \"//third_party/mindspore/mindspore-src/source/mindspore/lite/mindir:mindir_lib\", \"//third_party/vulkan-loader:vulkan_loader\", \"//third_party/libinput:libinput-third-mmi\", \"//third_party/libinput:patch_gen_libinput-third-mmi\", \"//foundation/communication/netstack/utils/napi_utils:napi_utils_static\", \"//foundation/multimedia/audio_framework/services/audio_policy:audio_policy_service_static\", \"//foundation/multimedia/audio_framework/services/audio_service:audio_service_static\", \"//foundation/multimedia/av_session/services/session:avsession_cast_item_static\", \"//foundation/multimedia/av_session/services/session:avsession_item_static\", \"//foundation/multimedia/av_session/services/session:avsession_service_static\" ], \"third_deps_bundle_not_add\": [ \"//arkcompiler/toolchain/tooling:libark_ecma_debugger_test\", \"//arkcompiler/toolchain/tooling/client:libark_client\", \"//base/global/i18n_lite/interfaces/kits/js/builtin:nativeapi_locale_simulator\", \"//base/global/resource_management_lite/frameworks/resmgr_lite:global_resmgr_simulator\", \"//base/security/device_security_level/services/sa:dslm_server\", \"//base/security/device_security_level/services/sa:service_sa_static\", \"//base/security/huks/frameworks/crypto_lite/cipher:cipher_shared\", \"//base/security/huks/frameworks/huks_standard/main/core:libhuks_core_small_static\", \"//base/security/huks/frameworks/huks_standard/main/crypto_engine/mbedtls:libhuks_mbedtls_small_static\", \"//base/security/huks/interfaces/inner_api/huks_lite:hks_compatibility_bin\", \"//base/security/huks/interfaces/inner_api/huks_lite:huks_3.0_sdk\", \"//base/security/huks/interfaces/inner_api/huks_lite:huks_server\", \"//base/security/huks/utils/crypto_adapter:libhuks_utils_client_service_adapter_static\", \"//device/board/hihope/rk3568/camera/vdi_impl/v4l2/pipeline_core:camera_pipeline_core\", \"//device/soc/rockchip/rk3568/hardware/display:display_composer_vendor\", \"//device/soc/rockchip/rk3568/hardware/display:libdisplay_buffer_vendor\", \"//device/soc/rockchip/rk3568/hardware/display:libhigbm_vendor\", \"//drivers/peripheral/codec/test/demo/adapter:codec_hdi_adapter_decode\", \"//drivers/peripheral/codec/test/demo/adapter:codec_hdi_adapter_encode\", \"//drivers/peripheral/codec/test/demo/v2.0:codec_hdi_omx_decode\", \"//drivers/peripheral/codec/test/demo/v2.0:codec_hdi_omx_encode\", \"//drivers/peripheral/input/hal:hdi_input\", \"//drivers/peripheral/light/hal:hdi_light\", \"//drivers/peripheral/sensor/hal:hdi_sensor\", \"//drivers/peripheral/usb/sample/device/liteos:usb_dev_test\", \"//drivers/peripheral/usb/sample/host/liteos_test:liteos_host_speed_test\", \"//drivers/peripheral/vibrator/hal:hdi_vibrator\", \"//drivers/peripheral/wlan/client:wifi_driver_client\", \"//drivers/peripheral/wlan/hal:wifi_hal\", \"//foundation/arkui/ace_engine_lite/frameworks/targets/simulator:ace_lite\", \"//foundation/arkui/ui_lite/ext/ide:graphic_utils_static_ide\", \"//foundation/arkui/ui_lite/ext/ide:ui_ide\", \"//foundation/communication/netstack/frameworks/js/napi/http:http\", \"//foundation/communication/netstack/utils/napi_utils:napi_utils_static\", \"//foundation/distributeddatamgr/kv_store/kvstoremock/distributeddb:distributeddb_mock\", \"//foundation/graphic/graphic_2d/rosen/modules/glfw_render_context:libglfw_render_context\", \"//test/testfwk/arkxtest/uitest:uitest_addon\", \"//test/xts/acts/graphic/vkgl/src/deqpgles2/build0001:libdeqpgles2func0001\", \"//test/xts/acts/graphic/vkgl/src/deqpgles2/build0002:libdeqpgles2func0002\", \"//test/xts/acts/graphic/vkgl/src/deqpgles2/build0004:libdeqpgles2func0004\", \"//test/xts/acts/graphic/vkgl/src/deqpgles2/build0005:libdeqpgles2func0005\", \"//test/xts/acts/graphic/vkgl/src/deqpgles2/build0006:libdeqpgles2func0006\", \"//test/xts/acts/graphic/vkgl/src/deqpgles2/build0007:libdeqpgles2func0007\", \"//test/xts/acts/graphic/vkgl/src/deqpgles2/build0008:libdeqpgles2func0008\", \"//test/xts/acts/graphic/vkgl/src/deqpgles2/build0009:libdeqpgles2func0009\", \"//test/xts/acts/graphic/vkgl/src/deqpgles2/build0010:libdeqpgles2func0010\", \"//test/xts/acts/graphic/vkgl/src/deqpgles2/build0011:libdeqpgles2func0011\", \"//test/xts/acts/graphic/vkgl/src/deqpgles2/build0012:libdeqpgles2func0012\", \"//test/xts/acts/graphic/vkgl/src/deqpgles2/build0015:libdeqpgles2func0015\", \"//test/xts/acts/graphic/vkgl/src/deqpgles2/build0016:libdeqpgles2func0016\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0001:libdeqpgles3func0001\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0002:libdeqpgles3func0002\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0003:libdeqpgles3func0003\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0004:libdeqpgles3func0004\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0005:libdeqpgles3func0005\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0006:libdeqpgles3func0006\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0007:libdeqpgles3func0007\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0008:libdeqpgles3func0008\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0009:libdeqpgles3func0009\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0010:libdeqpgles3func0010\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0011:libdeqpgles3func0011\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0012:libdeqpgles3func0012\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0013:libdeqpgles3func0013\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0014:libdeqpgles3func0014\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0015:libdeqpgles3func0015\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0016:libdeqpgles3func0016\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0017:libdeqpgles3func0017\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0018:libdeqpgles3func0018\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0019:libdeqpgles3func0019\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0020:libdeqpgles3func0020\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0021:libdeqpgles3func0021\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0022:libdeqpgles3func0022\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0023:libdeqpgles3func0023\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0024:libdeqpgles3func0024\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0025:libdeqpgles3func0025\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0027:libdeqpgles3func0027\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0028:libdeqpgles3func0028\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0029:libdeqpgles3func0029\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0030:libdeqpgles3func0030\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0031:libdeqpgles3func0031\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0032:libdeqpgles3func0032\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0033:libdeqpgles3func0033\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0034:libdeqpgles3func0034\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0035:libdeqpgles3func0035\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0037:libdeqpgles3func0037\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0038:libdeqpgles3func0038\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0039:libdeqpgles3func0039\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0041:libdeqpgles3func0041\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0042:libdeqpgles3func0042\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0043:libdeqpgles3func0043\", \"//test/xts/acts/graphic/vkgl/src/deqpgles3/build0044:libdeqpgles3func0044\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0001:libdeqpgles31func0001\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0002:libdeqpgles31func0002\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0003:libdeqpgles31func0003\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0004:libdeqpgles31func0004\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0005:libdeqpgles31func0005\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0006:libdeqpgles31func0006\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0007:libdeqpgles31func0007\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0008:libdeqpgles31func0008\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0009:libdeqpgles31func0009\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0010:libdeqpgles31func0010\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0011:libdeqpgles31func0011\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0012:libdeqpgles31func0012\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0014:libdeqpgles31func0014\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0015:libdeqpgles31func0015\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0016:libdeqpgles31func0016\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0017:libdeqpgles31func0017\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0018:libdeqpgles31func0018\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0019:libdeqpgles31func0019\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0020:libdeqpgles31func0020\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0021:libdeqpgles31func0021\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0022:libdeqpgles31func0022\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0023:libdeqpgles31func0023\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0024:libdeqpgles31func0024\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0025:libdeqpgles31func0025\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0026:libdeqpgles31func0026\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0027:libdeqpgles31func0027\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0028:libdeqpgles31func0028\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0029:libdeqpgles31func0029\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0030:libdeqpgles31func0030\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0031:libdeqpgles31func0031\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0032:libdeqpgles31func0032\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0033:libdeqpgles31func0033\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0034:libdeqpgles31func0034\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0035:libdeqpgles31func0035\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0036:libdeqpgles31func0036\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0037:libdeqpgles31func0037\", \"//test/xts/acts/graphic/vkgl/src/deqpgles31/build0038:libdeqpgles31func0038\", \"//test/xts/acts/graphic/vkgl/src/khrgles2/build0001:libkhrgles2func0001\", \"//test/xts/acts/graphic/vkgl/src/khrgles3/build0001:libkhrgles3func0001\", \"//test/xts/acts/graphic/vkgl/src/khrgles3/build0002:libkhrgles3func0002\", \"//test/xts/acts/graphic/vkgl/src/khrgles3/build0003:libkhrgles3func0003\", \"//test/xts/acts/graphic/vkgl/src/khrgles3/build0005:libkhrgles3func0005\", \"//test/xts/acts/graphic/vkgl/src/khrgles31/build0001:libkhrgles31func0001\", \"//test/xts/acts/graphic/vkgl/src/khrgles31/build0002:libkhrgles31func0002\", \"//test/xts/acts/graphic/vkgl/src/khrgles31/build0004:libkhrgles31func0004\", \"//third_party/flutter/build/libpng:ace_libpng\", \"//third_party/flutter/build/skia:ace_fontmgr_standard\", \"//third_party/flutter/build/skia:ace_fontmgr_windows\", \"//third_party/flutter/build/skia:ace_xml\", \"//third_party/flutter/build/skia:skia_shared\", \"//third_party/glslang/OGLCompilersDLL:libdeqp_OGLCompiler\", \"//third_party/glslang/SPIRV:SPIRV_source\", \"//third_party/glslang/SPIRV:libdeqp_spirv\", \"//third_party/glslang/SPIRV:libdeqp_spvremapper\", \"//third_party/glslang/glslang:MachineIndependent_source\", \"//third_party/glslang/glslang:glslang_source\", \"//third_party/glslang/glslang:libdeqp_GenericCodeGen\", \"//third_party/glslang/glslang:libdeqp_MachineIndependent\", \"//third_party/glslang/glslang:libdeqp_OSDependent\", \"//third_party/glslang/glslang:libdeqp_glslang\", \"//third_party/glslang/hlsl:libdeqp_hlsl\", \"//third_party/libcoap:libcoap\", \"//third_party/libusb:libusb\", \"//third_party/spirv-tools/source/link:libdeqp_spirvtools-link\", \"//third_party/spirv-tools/source/lint:libdeqp_spirvtools-lint\", \"//third_party/spirv-tools/source/opt:libdeqp_spirvtools-opt\", \"//third_party/spirv-tools/source/reduce:libdeqp_spirvtools-reduce\", \"//third_party/spirv-tools:libdeqp_spirvtools\", \"//third_party/sqlite:sqlite_sdk\", \"//third_party/vk-gl-cts/external/openglcts/modules/common/subgroups:deqp-gl-subgroups_source\", \"//third_party/vk-gl-cts/external/openglcts/modules/common/subgroups:libdeqp-gl-subgroups\", \"//third_party/vk-gl-cts/external/openglcts/modules/common:glcts-common-nocontext-package_source\", \"//third_party/vk-gl-cts/external/openglcts/modules/common:glcts-common_source\", \"//third_party/vk-gl-cts/external/openglcts/modules/common:libdeqp_glcts-common\", \"//third_party/vk-gl-cts/external/openglcts/modules/common:libdeqp_glcts-common-nocontext-package\", \"//third_party/vk-gl-cts/external/openglcts/modules/gl:glcts-gl_source\", \"//third_party/vk-gl-cts/external/openglcts/modules/gl:libdeqp_glcts-gl\", \"//third_party/vk-gl-cts/external/openglcts/modules/gles2:glcts-es2_source\", \"//third_party/vk-gl-cts/external/openglcts/modules/gles2:libdeqp_glcts-es2\", \"//third_party/vk-gl-cts/external/openglcts/modules/gles31:glcts-es31_source\", \"//third_party/vk-gl-cts/external/openglcts/modules/gles31:libdeqp_glcts-es31\", \"//third_party/vk-gl-cts/external/openglcts/modules/gles32:glcts-es32_source\", \"//third_party/vk-gl-cts/external/openglcts/modules/gles32:libdeqp_glcts-es32\", \"//third_party/vk-gl-cts/external/openglcts/modules/gles3:glcts-es3_source\", \"//third_party/vk-gl-cts/external/openglcts/modules/gles3:libdeqp_glcts-es3\", \"//third_party/vk-gl-cts/external/openglcts/modules/glesext:glcts-esext_source\", \"//third_party/vk-gl-cts/external/openglcts/modules/glesext:libdeqp_glcts-esext\", \"//third_party/vk-gl-cts/external/openglcts/modules:glcts_source\", \"//third_party/vk-gl-cts/external/openglcts/modules:libdeqp_glcts\", \"//third_party/vk-gl-cts/external/vulkancts/framework/vulkan:deqp_vkutil_source\", \"//third_party/vk-gl-cts/external/vulkancts/framework/vulkan:deqp_vkutilnoshader_source\", \"//third_party/vk-gl-cts/external/vulkancts/framework/vulkan:libdeqp_vkutil\", \"//third_party/vk-gl-cts/external/vulkancts/framework/vulkan:libdeqp_vkutilnoshader\", \"//third_party/vk-gl-cts/framework/common:libdeqp_tcutil\", \"//third_party/vk-gl-cts/framework/common:tcutil_source\", \"//third_party/vk-gl-cts/framework/delibs/debase:libdeqp_debase\", \"//third_party/vk-gl-cts/framework/delibs/decpp:deqp_delib_decpp_source\", \"//third_party/vk-gl-cts/framework/delibs/decpp:libdeqp_decpp\", \"//third_party/vk-gl-cts/framework/delibs/depool:deqp_delib_depool_source\", \"//third_party/vk-gl-cts/framework/delibs/depool:libdeqp_depool\", \"//third_party/vk-gl-cts/framework/delibs/dethread:deqp_delib_dethread_source\", \"//third_party/vk-gl-cts/framework/delibs/dethread:libdeqp_dethread\", \"//third_party/vk-gl-cts/framework/delibs/deutil:deqp_delib_deutil_source\", \"//third_party/vk-gl-cts/framework/delibs/deutil:libdeqp_deutil\", \"//third_party/vk-gl-cts/framework/egl/wrapper:eglwrapper_source\", \"//third_party/vk-gl-cts/framework/egl/wrapper:libdeqp_eglwrapper\", \"//third_party/vk-gl-cts/framework/egl:eglutil_source\", \"//third_party/vk-gl-cts/framework/egl:libdeqp_eglutil\", \"//third_party/vk-gl-cts/framework/opengl/simplereference:deqp_opengl_simplereference_source\", \"//third_party/vk-gl-cts/framework/opengl/simplereference:libdeqp_glutil-sglr\", \"//third_party/vk-gl-cts/framework/opengl/wrapper:deqp_opengl_wrapper_source\", \"//third_party/vk-gl-cts/framework/opengl/wrapper:libdeqp_glwrapper\", \"//third_party/vk-gl-cts/framework/opengl:deqp_opengl_source\", \"//third_party/vk-gl-cts/framework/opengl:libdeqp_glutil\", \"//third_party/vk-gl-cts/framework/platform:glcts\", \"//third_party/vk-gl-cts/framework/platform:libdeqp_ohos_platform\", \"//third_party/vk-gl-cts/framework/platform:libdeqp_tcutil-platform\", \"//third_party/vk-gl-cts/framework/platform:tcutil-platform_source\", \"//third_party/vk-gl-cts/framework/qphelper:deqp_qphelper_source\", \"//third_party/vk-gl-cts/framework/qphelper:libdeqp_qphelper\", \"//third_party/vk-gl-cts/framework/randomshaders:libdeqp_randomshaders\", \"//third_party/vk-gl-cts/framework/randomshaders:randomshaders_source\", \"//third_party/vk-gl-cts/framework/referencerenderer:libdeqp_referencerenderer\", \"//third_party/vk-gl-cts/framework/referencerenderer:referencerenderer_source\", \"//third_party/vk-gl-cts/framework/xexml:libdeqp_xexml\", \"//third_party/vk-gl-cts/framework/xexml:xexml_source\", \"//third_party/vk-gl-cts/modules/egl:deqp-egl_source\", \"//third_party/vk-gl-cts/modules/egl:libdeqp-egl\", \"//third_party/vk-gl-cts/modules/gles2/accuracy:deqp-gles2-accuracy_source\", \"//third_party/vk-gl-cts/modules/gles2/accuracy:libdeqp-gles2-accuracy\", \"//third_party/vk-gl-cts/modules/gles2/functional:deqp-gles2-functional_source\", \"//third_party/vk-gl-cts/modules/gles2/functional:libdeqp-gles2-functional\", \"//third_party/vk-gl-cts/modules/gles2/performance:deqp-gles2-performance_source\", \"//third_party/vk-gl-cts/modules/gles2/performance:libdeqp-gles2-performance\", \"//third_party/vk-gl-cts/modules/gles2/stress:deqp-gles2-stress_source\", \"//third_party/vk-gl-cts/modules/gles2/stress:libdeqp-gles2-stress\", \"//third_party/vk-gl-cts/modules/gles2:deqp-gles2_source\", \"//third_party/vk-gl-cts/modules/gles2:libdeqp-gles2\", \"//third_party/vk-gl-cts/modules/gles3/accuracy:deqp-gles3-accuracy_source\", \"//third_party/vk-gl-cts/modules/gles3/accuracy:libdeqp-gles3-accuracy\", \"//third_party/vk-gl-cts/modules/gles3/functional:deqp-gles3-functional_source\", \"//third_party/vk-gl-cts/modules/gles3/functional:libdeqp-gles3-functional\", \"//third_party/vk-gl-cts/modules/gles3/performance:deqp-gles3-performance_source\", \"//third_party/vk-gl-cts/modules/gles3/performance:libdeqp-gles3-performance\", \"//third_party/vk-gl-cts/modules/gles3/stress:deqp-gles3-stress_source\", \"//third_party/vk-gl-cts/modules/gles3/stress:libdeqp-gles3-stress\", \"//third_party/vk-gl-cts/modules/gles31/functional:deqp-gles31-functional_source\", \"//third_party/vk-gl-cts/modules/gles31/functional:libdeqp-gles31-functional\", \"//third_party/vk-gl-cts/modules/gles31/stress:deqp-gles31-stress_source\", \"//third_party/vk-gl-cts/modules/gles31/stress:libdeqp-gles31-stress\", \"//third_party/vk-gl-cts/modules/gles31:deqp-gles31_source\", \"//third_party/vk-gl-cts/modules/gles31:libdeqp-gles31\", \"//third_party/vk-gl-cts/modules/gles3:deqp-gles3_source\", \"//third_party/vk-gl-cts/modules/gles3:libdeqp-gles3\", \"//third_party/vk-gl-cts/modules/glshared:deqp-gl-shared_source\", \"//third_party/glslang:glslang_validator\", \"//third_party/glslang:spirv-remap\", \"//third_party/vk-gl-cts/modules/glshared:libdeqp-gl-shared\", \"//third_party/rust/crates/rust-openssl/openssl-sys:lib\" ]}

2.1 子系统存在性验证(bundle_subsystem_error)

功能:检测子系统是否存在,确保构建过程中引用的子系统是有效的。

实现机制

  • 通过hb/service/loader.py中的compile_standard_allow_info.get方法读取out/preloader目录下的compile_standard_whitelist.json文件
  • hb/util/loader/load_ohos_build.py中遍历build_files来检查子系统名称匹配性

典型问题
当在构建过程中引用了不存在的子系统时,构建系统会报错并终止编译。例如,在RK3399平台支持中,需要在build/compile_standard_whitelist.json中添加相应白名单才能成功编译。
重要说明:白名单针对某个平台就去扫描相关目录下的组件,比如dayu210\\rk3568\\purple_pi_oh\\2in1_core_system等,不同平台配置不会冲突,但如果该平台所需白名单配置缺项就会编译报错。

白名单示例

\"bundle_subsystem_error\": [ \"device/board/hihope/rk3568/ohos.build\", \"vendor/hihope/ipcamera/ohos.build\"]

2.2 子系统与组件白名单(subsystem_components)

功能:定义编译相关的组件白名单,只有列入白名单的组件才能参与编译。

实现机制

  • out/{product_name}/build_configs/parts_info/part_subsystem.json中读取内容
  • 对比vendor/hihope/dayu210/config.json(产品功能配置)和仓库的bundle.json(声明所属子系统和组件)

配置要点

  • config.json定义产品需要启用的功能
  • bundle.json声明仓库所属的子系统和组件
  • 两者必须匹配,否则会报错

2.3 GN构建与子系统匹配验证(gn_part_or_subsystem_error)

功能:验证part_subsystem.json中的子系统名称与BUILD.gn中定义的子系统是否一致。

实现机制

  • 检测out/{product_name}/build_configs/parts_info/part_subsystem.json文件
  • 比对其中的subsystems_nameBUILD.gn中定义的subsystem

典型错误
当两者不匹配时,会报错\"subsystem name or part name is incorrect\",阻止构建继续进行。

白名单示例

\"gn_part_or_subsystem_error\": [ \"//arkcompiler/toolchain/tooling/test:debugger_entry\", \"//device/board/hihope/rk3568/camera/vdi_impl/v4l2:camera_host_vdi_impl_1.0\"]

2.4 外部依赖模块验证(deps_added_external_part_module)

功能:验证BUILD.gn中的deps依赖是否符合规范。

实现机制

  • 检查BUILD.gn中的deps字段
  • 验证依赖关系是否合理

典型错误
当依赖存在异常时,会报错\"{} depend part {}, need set part deps {} info to\"和\"deps validation part_name: \'{}\', target: \'{}\', dep: \'{}\' failed!!!\"。

白名单示例

\"deps_added_external_part_module\": [ \"//arkcompiler/toolchain/inspector:ark_debugger_static\", \"//device/soc/rockchip/rk3568/hardware/omx_il/component/common:libRkOMX_Resourcemanager\"]

2.5 外部依赖自包含验证(external_deps_added_self_part_module)

功能:验证BUILD.gn中的external_deps是否合理,防止组件内部循环依赖。

实现机制

  • 检查external_deps字段
  • 确保没有不合理的内部依赖

典型错误
当依赖异常时,会报错\"{} in target {} is dependency within part {}, Need to used deps\"。

白名单示例

\"external_deps_added_self_part_module\": [ \"//build/rust/tests/test_bin_crate:test_bin_crate\", \"//drivers/hdf_core/adapter/uhdf/manager:hdf_core\"]

2.6 外部依赖缺失验证(external_deps_bundle_not_add)

功能:与external_deps_added_self_part_module功能类似,但报错信息不同。

典型错误
报错格式为\"{} {}.\",后跟配置文件信息。

白名单示例

\"external_deps_bundle_not_add\": [ \"//arkcompiler/toolchain/tooling/test:jsdebugtest\", \"//base/security/huks/frameworks/huks_standard/main/core:libhuks_core_small_static\"]

2.7 第三方库依赖验证(third_deps_bundle_not_add)

功能:专门验证第三方依赖库是否在白名单中。

典型错误
当白名单中没有包含第三方依赖库时,会报错\"f\"{_tips_info} {part_deps_info.get(\'build_config_file\')}.\"

白名单示例

\"third_deps_bundle_not_add\": [ \"//third_party/flutter/build/skia:ace_fontmgr_standard\", \"//third_party/vk-gl-cts/framework/platform:libdeqp_ohos_platform\"]

三、白名单配置实战指南

3.1 白名单文件位置与结构

文件位置

  • 源码树中:build/compile_standard_whitelist.json
  • 构建过程中生成:out/preloader/{product_name}/compile_standard_whitelist.json

文件结构

{ \"bundle_subsystem_error\": [...], \"subsystem_components\": [...], \"gn_part_or_subsystem_error\": [...], ...}

3.2 如何添加新的白名单条目

当需要添加新的组件或解决构建错误时,可以按照以下步骤操作:

  1. 确定错误类型:根据构建错误信息判断属于哪种类别的白名单验证问题
  2. 定位构建配置:找到相关的BUILD.gn或bundle.json文件
  3. 添加白名单条目:在build/compile_standard_whitelist.json中对应类别添加条目
  4. 重新构建验证:执行hb build确认问题是否解决

示例:添加RK3399支持时,需要在build/compile_standard_whitelist.json中添加相应白名单条目。

3.3 白名单配置最佳实践

  1. 精确匹配原则:白名单条目应尽可能精确,避免使用通配符
  2. 分类管理:按功能模块组织白名单条目,便于维护
  3. 注释说明:为每个新增条目标注原因和时间
  4. 定期清理:随着代码演进,及时清理不再需要的白名单条目
  5. 权限控制:白名单修改应经过严格审查,防止安全风险

四、常见问题与解决方案

4.1 子系统名称不匹配问题

现象:构建时出现\"subsystem name or part name is incorrect\"错误

原因part_subsystem.json中的子系统名称与BUILD.gn定义不一致

解决方案

  1. 检查BUILD.gn中定义的subsystem名称
  2. 确认config.json中配置的子系统
  3. gn_part_or_subsystem_error中添加对应条目

4.2 依赖关系错误

现象:出现\"deps validation part_name\"相关错误

原因:组件间的依赖关系不符合构建规范

解决方案

  1. 检查BUILD.gn中的deps和external_deps配置
  2. 确认依赖组件是否已在白名单中
  3. 根据错误类型在相应白名单类别中添加条目

4.3 第三方库集成问题

现象:第三方库依赖报错

原因:第三方库未被添加到third_deps_bundle_not_add白名单

解决方案

  1. 确认第三方库的路径和目标名称
  2. 在third_deps_bundle_not_add中添加完整路径
  3. 对于复杂依赖,可能需要同时添加多个相关条目

五、高级应用场景

5.1 定制化产品构建

当开发基于OpenHarmony的定制产品时,往往需要添加新的硬件适配层或专有功能模块。这些新增内容很可能触发白名单验证错误,需要针对性地添加白名单条目。

操作流程

  1. 在device或vendor目录下创建新产品配置
  2. 执行构建,记录所有白名单错误
  3. 有针对性地在build/compile_standard_whitelist.json中添加条目
  4. 重复测试直到构建成功

5.2 第三方库集成最佳实践

集成第三方库时,常遇到依赖验证问题。以集成Flutter为例:

  1. 确认需要的Flutter相关组件
  2. third_deps_bundle_not_add中添加:
    \"//third_party/flutter/build/skia:ace_fontmgr_standard\",\"//third_party/flutter/build/skia:skia_shared\"
  3. 如有必要,在deps_added_external_part_module中添加相关依赖

六、白名单机制的演进

随着OpenHarmony版本迭代,白名单机制也在不断完善:

  1. OpenHarmony 3.x:基础白名单机制建立,主要关注子系统验证
  2. OpenHarmony 4.0:增强依赖验证,细化错误分类
  3. OpenHarmony 5.0:进一步优化白名单管理,提升构建效率
  4. Openharmony6.0 :优化完善构建白名单,避免更多bug
  • 动态白名单机制,根据产品配置自动生成
  • 更智能的错误提示和自动修复建议
  • 白名单配置的可视化管理工具

七、总结

OpenHarmony的编译配置白名单机制是保障系统安全性和构建规范性的关键环节。通过深入理解七大验证类别及其工作机制,开发者可以更高效地解决构建问题,确保代码质量和系统稳定性。

在实际开发中,合理配置白名单不仅能避免构建失败,还能提升代码规范性,防止不合理的依赖关系引入系统。随着OpenHarmony生态的不断发展,掌握白名单机制将成为OpenHarmony开发者的核心技能之一。