一、白名单机制概述
在OpenHarmony的构建系统中,compile_standard_whitelist.json
是一个关键的安全验证机制,它作为编译过程中的"守门人",确保只有经过验证的组件和依赖关系才能被纳入最终构建产物。这个机制是OpenHarmony构建系统安全性和规范性的重要保障。
1.1 什么是编译配置白名单
编译配置白名单是OpenHarmony构建系统(hb)中用于验证构建配置合法性的机制。在构建过程中,系统会生成compile_standard_whitelist.json
文件到/home/openharmony/out/preloader/{product_name}/
目录下,用于记录允许通过的构建项。
1.2 白名单的工作原理
当执行hb build
命令进行编译时,构建系统会按照以下流程工作:
- 读取编译配置:根据产品选择进行初始化 ,(主要是preloader阶段对系统所需配置进行扫描)
编译流程可见我的主页文章 - 生成预加载信息:包括
compile_standard_whitelist.json
在内的各种配置文件 - 进行白名单验证:检查所有构建项是否符合安全规范
- 执行实际编译:通过验证的组件才会被编译
二、白名单的核心类别与功能
根据源码分析,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_name
与BUILD.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 如何添加新的白名单条目
当需要添加新的组件或解决构建错误时,可以按照以下步骤操作:
- 确定错误类型:根据构建错误信息判断属于哪种类别的白名单验证问题
- 定位构建配置:找到相关的BUILD.gn或bundle.json文件
- 添加白名单条目:在
build/compile_standard_whitelist.json
中对应类别添加条目 - 重新构建验证:执行
hb build
确认问题是否解决
示例:添加RK3399支持时,需要在build/compile_standard_whitelist.json
中添加相应白名单条目。
3.3 白名单配置最佳实践
- 精确匹配原则:白名单条目应尽可能精确,避免使用通配符
- 分类管理:按功能模块组织白名单条目,便于维护
- 注释说明:为每个新增条目标注原因和时间
- 定期清理:随着代码演进,及时清理不再需要的白名单条目
- 权限控制:白名单修改应经过严格审查,防止安全风险
四、常见问题与解决方案
4.1 子系统名称不匹配问题
现象:构建时出现"subsystem name or part name is incorrect
"错误
原因:part_subsystem.json
中的子系统名称与BUILD.gn定义不一致
解决方案:
- 检查BUILD.gn中定义的subsystem名称
- 确认config.json中配置的子系统
- 在
gn_part_or_subsystem_error
中添加对应条目
4.2 依赖关系错误
现象:出现"deps validation part_name
"相关错误
原因:组件间的依赖关系不符合构建规范
解决方案:
- 检查BUILD.gn中的deps和external_deps配置
- 确认依赖组件是否已在白名单中
- 根据错误类型在相应白名单类别中添加条目
4.3 第三方库集成问题
现象:第三方库依赖报错
原因:第三方库未被添加到third_deps_bundle_not_add白名单
解决方案:
- 确认第三方库的路径和目标名称
- 在third_deps_bundle_not_add中添加完整路径
- 对于复杂依赖,可能需要同时添加多个相关条目
五、高级应用场景
5.1 定制化产品构建
当开发基于OpenHarmony的定制产品时,往往需要添加新的硬件适配层或专有功能模块。这些新增内容很可能触发白名单验证错误,需要针对性地添加白名单条目。
操作流程:
- 在device或vendor目录下创建新产品配置
- 执行构建,记录所有白名单错误
- 有针对性地在
build/compile_standard_whitelist.json
中添加条目 - 重复测试直到构建成功
5.2 第三方库集成最佳实践
集成第三方库时,常遇到依赖验证问题。以集成Flutter为例:
- 确认需要的Flutter相关组件
- 在
third_deps_bundle_not_add
中添加:"//third_party/flutter/build/skia:ace_fontmgr_standard", "//third_party/flutter/build/skia:skia_shared"
- 如有必要,在
deps_added_external_part_module
中添加相关依赖
六、白名单机制的演进
随着OpenHarmony版本迭代,白名单机制也在不断完善:
- OpenHarmony 3.x:基础白名单机制建立,主要关注子系统验证
- OpenHarmony 4.0:增强依赖验证,细化错误分类
- OpenHarmony 5.0:进一步优化白名单管理,提升构建效率
- Openharmony6.0 :优化完善构建白名单,避免更多bug
- 动态白名单机制,根据产品配置自动生成
- 更智能的错误提示和自动修复建议
- 白名单配置的可视化管理工具
七、总结
OpenHarmony的编译配置白名单机制是保障系统安全性和构建规范性的关键环节。通过深入理解七大验证类别及其工作机制,开发者可以更高效地解决构建问题,确保代码质量和系统稳定性。
在实际开发中,合理配置白名单不仅能避免构建失败,还能提升代码规范性,防止不合理的依赖关系引入系统。随着OpenHarmony生态的不断发展,掌握白名单机制将成为OpenHarmony开发者的核心技能之一。