harmonyos-best-practices-mcp 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +121 -0
- package/data/docs/bpta-2in1-window-shape.md +296 -0
- package/data/docs/bpta-abckitts-implements-instrumentation.md +1279 -0
- package/data/docs/bpta-add-watermark.md +379 -0
- package/data/docs/bpta-ads-jump.md +67 -0
- package/data/docs/bpta-agent.md +472 -0
- package/data/docs/bpta-always-on-market-watch.md +703 -0
- package/data/docs/bpta-analysis-of-image-blurring.md +231 -0
- package/data/docs/bpta-analyze-memory-problem.md +17 -0
- package/data/docs/bpta-animation-frame.md +28 -0
- package/data/docs/bpta-antipeep-protection.md +291 -0
- package/data/docs/bpta-app-architecture-overview.md +25 -0
- package/data/docs/bpta-app-asset-protection-design.md +277 -0
- package/data/docs/bpta-app-code-ob.md +180 -0
- package/data/docs/bpta-app-concurrency-design.md +1189 -0
- package/data/docs/bpta-app-data-security.md +397 -0
- package/data/docs/bpta-app-icon-configuration.md +226 -0
- package/data/docs/bpta-app-privacy-protection.md +295 -0
- package/data/docs/bpta-application-aspect-programming-design.md +675 -0
- package/data/docs/bpta-application-cold-start-optimization.md +1397 -0
- package/data/docs/bpta-application-continue-progess.md +285 -0
- package/data/docs/bpta-application-gesture-share.md +468 -0
- package/data/docs/bpta-application-knock-file-share.md +263 -0
- package/data/docs/bpta-application-knock-video-share.md +552 -0
- package/data/docs/bpta-application-latency-optimization-cases.md +615 -0
- package/data/docs/bpta-application-power-analysis.md +15 -0
- package/data/docs/bpta-application-power-optimization.md +12 -0
- package/data/docs/bpta-application-power-test.md +52 -0
- package/data/docs/bpta-application-track-practice.md +595 -0
- package/data/docs/bpta-arkts-high-performance.md +464 -0
- package/data/docs/bpta-arkts-js-memory-analysis.md +111 -0
- package/data/docs/bpta-arkts-language.md +18 -0
- package/data/docs/bpta-arkweb-component-security.md +1134 -0
- package/data/docs/bpta-arkweb_rendering_framework.md +412 -0
- package/data/docs/bpta-aspect-implements-aop.md +505 -0
- package/data/docs/bpta-audio-and-video.md +30 -0
- package/data/docs/bpta-audio-cast.md +460 -0
- package/data/docs/bpta-audio-focus-management.md +862 -0
- package/data/docs/bpta-audio-in-ear-monitor.md +803 -0
- package/data/docs/bpta-audio-playback-series.md +16 -0
- package/data/docs/bpta-audio-record-base-on-audiocapturer.md +188 -0
- package/data/docs/bpta-audio-record-base-on-avrecorder-arkts.md +179 -0
- package/data/docs/bpta-audio-record-base-on-avrecorder.md +207 -0
- package/data/docs/bpta-audio-record-base-on-avscreencapture.md +165 -0
- package/data/docs/bpta-audio-record-base-on-ohaudio.md +162 -0
- package/data/docs/bpta-audio-record-overview.md +34 -0
- package/data/docs/bpta-audio-record.md +16 -0
- package/data/docs/bpta-audio-ripple-animation.md +198 -0
- package/data/docs/bpta-audio-video-synchronization.md +508 -0
- package/data/docs/bpta-audio-video.md +15 -0
- package/data/docs/bpta-automated-testing-frameworks.md +481 -0
- package/data/docs/bpta-avplayer-basic-control.md +533 -0
- package/data/docs/bpta-avplayer-embeded-network-video.md +486 -0
- package/data/docs/bpta-avplayer-embeded-short-video.md +512 -0
- package/data/docs/bpta-avplayer-long-video.md +907 -0
- package/data/docs/bpta-avplayer-short-video.md +158 -0
- package/data/docs/bpta-avplayer-video-practices.md +15 -0
- package/data/docs/bpta-avscreencapture-for-screen-recording.md +1121 -0
- package/data/docs/bpta-back-task-implement.md +317 -0
- package/data/docs/bpta-background-blur.md +316 -0
- package/data/docs/bpta-background-sensors-baned-analysis.md +93 -0
- package/data/docs/bpta-best-practices-long-list.md +891 -0
- package/data/docs/bpta-best-practices-overview.md +48 -0
- package/data/docs/bpta-bluetooth-low-energy.md +905 -0
- package/data/docs/bpta-buffer-mode-transcoding.md +728 -0
- package/data/docs/bpta-buffer-power-optimization.md +224 -0
- package/data/docs/bpta-camera-shot2see.md +368 -0
- package/data/docs/bpta-card-update-and-data-interaction.md +670 -0
- package/data/docs/bpta-carousel-graphic-works.md +379 -0
- package/data/docs/bpta-cell-phone.md +13 -0
- package/data/docs/bpta-click-to-click-response-optimization.md +264 -0
- package/data/docs/bpta-click-to-complete-delay-analysis.md +637 -0
- package/data/docs/bpta-collaboration-office.md +1178 -0
- package/data/docs/bpta-comment-reply-pop-up-window.md +523 -0
- package/data/docs/bpta-common-list-flows.md +688 -0
- package/data/docs/bpta-common-list-operations.md +828 -0
- package/data/docs/bpta-common-network-query.md +784 -0
- package/data/docs/bpta-comparative_practice_of_taskpool_and_worker.md +381 -0
- package/data/docs/bpta-compatible-scheme.md +11 -0
- package/data/docs/bpta-complex-type-pass.md +868 -0
- package/data/docs/bpta-component-nesting-optimization.md +421 -0
- package/data/docs/bpta-component-reuse-issue-diagnosis-and-analysis.md +637 -0
- package/data/docs/bpta-component-reuse.md +1258 -0
- package/data/docs/bpta-concurrency-capability.md +23 -0
- package/data/docs/bpta-concurrent-optimization.md +369 -0
- package/data/docs/bpta-content-creation.md +646 -0
- package/data/docs/bpta-continue-cast.md +702 -0
- package/data/docs/bpta-continue-data.md +335 -0
- package/data/docs/bpta-continue.md +1323 -0
- package/data/docs/bpta-control-rendering-range.md +29 -0
- package/data/docs/bpta-controlling-background-process-cpu.md +31 -0
- package/data/docs/bpta-crash-monitor-practice.md +116 -0
- package/data/docs/bpta-cross-domain-solutions-for-web-pages.md +308 -0
- package/data/docs/bpta-cross-end-migration.md +13 -0
- package/data/docs/bpta-cross-module-reference.md +406 -0
- package/data/docs/bpta-cross-platform-compatibility.md +321 -0
- package/data/docs/bpta-custom-camera-photo.md +454 -0
- package/data/docs/bpta-custom-camera-preview.md +1170 -0
- package/data/docs/bpta-custom-camera-video.md +322 -0
- package/data/docs/bpta-custom-font-settings.md +354 -0
- package/data/docs/bpta-custom-hvigor-plugin.md +159 -0
- package/data/docs/bpta-custom-keyboard.md +519 -0
- package/data/docs/bpta-customdialog-selection-and-development.md +406 -0
- package/data/docs/bpta-dark-mode-adaptation.md +321 -0
- package/data/docs/bpta-deal-stride-solution.md +261 -0
- package/data/docs/bpta-decrease_pakage_size.md +126 -0
- package/data/docs/bpta-delayed-trigger-operation.md +215 -0
- package/data/docs/bpta-desktop-shortcuts.md +180 -0
- package/data/docs/bpta-detection.md +12 -0
- package/data/docs/bpta-developing-high-performance-ui.md +19 -0
- package/data/docs/bpta-development-scenarios-for-tabs.md +934 -0
- package/data/docs/bpta-dialog-encapsulation.md +201 -0
- package/data/docs/bpta-dispose-highly-loaded-component-render.md +352 -0
- package/data/docs/bpta-distribute-drag-cast.md +60 -0
- package/data/docs/bpta-distributed-pasteboard-cast.md +88 -0
- package/data/docs/bpta-distributed-pasteboard.md +314 -0
- package/data/docs/bpta-drawing-capability-improve-performance.md +436 -0
- package/data/docs/bpta-dynamic-link-library.md +272 -0
- package/data/docs/bpta-easygo-parallel.md +402 -0
- package/data/docs/bpta-fair-use-animation.md +1693 -0
- package/data/docs/bpta-file-transmission-based-on-sfft.md +265 -0
- package/data/docs/bpta-file-upload-and-download-performance.md +484 -0
- package/data/docs/bpta-foldable-guide.md +205 -0
- package/data/docs/bpta-folded-hover.md +202 -0
- package/data/docs/bpta-form-kit.md +12 -0
- package/data/docs/bpta-frontend-invisible-animation-analysis.md +187 -0
- package/data/docs/bpta-full-scenario-collaborative-development.md +13 -0
- package/data/docs/bpta-fuzzy-scene-performance-optimization.md +256 -0
- package/data/docs/bpta-game-prelaunch-practice.md +175 -0
- package/data/docs/bpta-general-comments.md +17 -0
- package/data/docs/bpta-gestures-practice.md +619 -0
- package/data/docs/bpta-global-state-management-state-store.md +472 -0
- package/data/docs/bpta-gpu-acceleration-practices.md +11 -0
- package/data/docs/bpta-graphic-drawing-practices.md +13 -0
- package/data/docs/bpta-grid-based-on-scrollcomponents.md +1112 -0
- package/data/docs/bpta-grid-drag-swap.md +725 -0
- package/data/docs/bpta-hadss_dialoghub.md +786 -0
- package/data/docs/bpta-harmony-application-security.md +1253 -0
- package/data/docs/bpta-hdrtosdr.md +439 -0
- package/data/docs/bpta-hdrvivid.md +700 -0
- package/data/docs/bpta-high-cpu-load-analysis.md +113 -0
- package/data/docs/bpta-high-performance-json-parsing.md +263 -0
- package/data/docs/bpta-high-performance-protobuf-parsing.md +259 -0
- package/data/docs/bpta-hmos-live-stream-audio-call.md +140 -0
- package/data/docs/bpta-hmos-live-stream-solution.md +495 -0
- package/data/docs/bpta-hmrouter.md +659 -0
- package/data/docs/bpta-hopping.md +60 -0
- package/data/docs/bpta-hwc-self-rendering-layer-analysis.md +77 -0
- package/data/docs/bpta-image-processing-practices.md +13 -0
- package/data/docs/bpta-image-to-video-synthesis.md +459 -0
- package/data/docs/bpta-image-white-lump-solution.md +282 -0
- package/data/docs/bpta-image_get_and_save.md +120 -0
- package/data/docs/bpta-implement-timeline-based-on-canvas.md +493 -0
- package/data/docs/bpta-implementing-image-filters.md +406 -0
- package/data/docs/bpta-implementing-image-resizable.md +270 -0
- package/data/docs/bpta-improve-layout-performance.md +547 -0
- package/data/docs/bpta-improve-running-efficiency.md +187 -0
- package/data/docs/bpta-improve_grid_performance.md +268 -0
- package/data/docs/bpta-input-method-framework.md +12 -0
- package/data/docs/bpta-intent-recommend-practice.md +313 -0
- package/data/docs/bpta-js-leak-watcher.md +153 -0
- package/data/docs/bpta-kernel-memory-analysis.md +38 -0
- package/data/docs/bpta-keyboard-layout-adapt.md +725 -0
- package/data/docs/bpta-landscape-and-portrait-development.md +947 -0
- package/data/docs/bpta-layered-architecture-design.md +82 -0
- package/data/docs/bpta-lazyforeach-optimization.md +217 -0
- package/data/docs/bpta-link-between-apps-overview.md +99 -0
- package/data/docs/bpta-list-based-on-scrollcomponents.md +1643 -0
- package/data/docs/bpta-lite-wearable-guide.md +1899 -0
- package/data/docs/bpta-live-form-development-practice.md +544 -0
- package/data/docs/bpta-live-streaming-optimization.md +397 -0
- package/data/docs/bpta-local-file-and-data-multithreaded-io.md +367 -0
- package/data/docs/bpta-local-file.md +11 -0
- package/data/docs/bpta-lock-screen-immersive-live-window.md +473 -0
- package/data/docs/bpta-long-snapshot-practice.md +1046 -0
- package/data/docs/bpta-low-power-consumption-of-background-tasks.md +14 -0
- package/data/docs/bpta-low-power-consumption-of-foreground-tasks.md +14 -0
- package/data/docs/bpta-low-power-design-in-dark-mode.md +418 -0
- package/data/docs/bpta-ltpo-description.md +323 -0
- package/data/docs/bpta-maleoon-gpu-best-practices.md +1297 -0
- package/data/docs/bpta-malloc-dispatch-table.md +144 -0
- package/data/docs/bpta-managing-audio-input-devices.md +350 -0
- package/data/docs/bpta-managing-audio-output-devices.md +399 -0
- package/data/docs/bpta-mate-book-fold.md +229 -0
- package/data/docs/bpta-matetv-guide.md +223 -0
- package/data/docs/bpta-matext-guide.md +269 -0
- package/data/docs/bpta-memory-basic-knowledge.md +71 -0
- package/data/docs/bpta-memory-optimization.md +545 -0
- package/data/docs/bpta-modular-design.md +282 -0
- package/data/docs/bpta-multi-device-adaptive-layout.md +775 -0
- package/data/docs/bpta-multi-device-adaptive.md +11 -0
- package/data/docs/bpta-multi-device-camera.md +584 -0
- package/data/docs/bpta-multi-device-collaboration.md +19 -0
- package/data/docs/bpta-multi-device-component-layout.md +190 -0
- package/data/docs/bpta-multi-device-design-principles.md +26 -0
- package/data/docs/bpta-multi-device-function.md +99 -0
- package/data/docs/bpta-multi-device-hardware.md +12 -0
- package/data/docs/bpta-multi-device-ide.md +124 -0
- package/data/docs/bpta-multi-device-interaction.md +11 -0
- package/data/docs/bpta-multi-device-layout-overview.md +47 -0
- package/data/docs/bpta-multi-device-overview.md +340 -0
- package/data/docs/bpta-multi-device-page-layout.md +699 -0
- package/data/docs/bpta-multi-device-page.md +19 -0
- package/data/docs/bpta-multi-device-resource.md +122 -0
- package/data/docs/bpta-multi-device-responsive-layout.md +1274 -0
- package/data/docs/bpta-multi-device-responsive.md +14 -0
- package/data/docs/bpta-multi-device-screen-diff.md +197 -0
- package/data/docs/bpta-multi-device-screen-layout.md +834 -0
- package/data/docs/bpta-multi-device-start.md +376 -0
- package/data/docs/bpta-multi-device-ui-development.md +27 -0
- package/data/docs/bpta-multi-device-window-direction.md +1322 -0
- package/data/docs/bpta-multi-device-window-immersive.md +364 -0
- package/data/docs/bpta-multi-device-window-mode.md +1293 -0
- package/data/docs/bpta-multi-device-window.md +13 -0
- package/data/docs/bpta-multi-device.md +13 -0
- package/data/docs/bpta-multi-interaction.md +368 -0
- package/data/docs/bpta-multi-mobile-payment.md +282 -0
- package/data/docs/bpta-multi-music-app-overview.md +365 -0
- package/data/docs/bpta-multi-settings-application-page.md +163 -0
- package/data/docs/bpta-multi-tab-practice.md +750 -0
- package/data/docs/bpta-multi-target.md +490 -0
- package/data/docs/bpta-multi-window-practice.md +795 -0
- package/data/docs/bpta-multi_game.md +472 -0
- package/data/docs/bpta-music-card.md +1916 -0
- package/data/docs/bpta-music-playback-scenarios.md +120 -0
- package/data/docs/bpta-native-memory-analysis.md +101 -0
- package/data/docs/bpta-native-sub-main-comm.md +323 -0
- package/data/docs/bpta-navigation-scenarios.md +69 -0
- package/data/docs/bpta-network-ca-security.md +241 -0
- package/data/docs/bpta-network-reconnection.md +327 -0
- package/data/docs/bpta-network-resources.md +24 -0
- package/data/docs/bpta-news-reading.md +12 -0
- package/data/docs/bpta-news_homepage.md +449 -0
- package/data/docs/bpta-object-serialization-performance.md +12 -0
- package/data/docs/bpta-one-shot-to-the-end.md +932 -0
- package/data/docs/bpta-online-video-playback-lags-practice.md +298 -0
- package/data/docs/bpta-optimization-overview.md +227 -0
- package/data/docs/bpta-optimization-tool-practice.md +20 -0
- package/data/docs/bpta-package-structure.md +13 -0
- package/data/docs/bpta-pad-guide.md +268 -0
- package/data/docs/bpta-page-brightness-settings.md +256 -0
- package/data/docs/bpta-page-transition.md +583 -0
- package/data/docs/bpta-pc-guide.md +438 -0
- package/data/docs/bpta-pc.md +12 -0
- package/data/docs/bpta-perceived-smoothness.md +49 -0
- package/data/docs/bpta-performance-detection.md +160 -0
- package/data/docs/bpta-performance-guide-reading.md +50 -0
- package/data/docs/bpta-performance-mainthread-consumption-detection.md +11 -0
- package/data/docs/bpta-performance-optimization.md +23 -0
- package/data/docs/bpta-performance-runtime-detection.md +13 -0
- package/data/docs/bpta-performance-sliding-frame-drop-detection.md +19 -0
- package/data/docs/bpta-performance-startup-time-detection.md +13 -0
- package/data/docs/bpta-permission-application.md +318 -0
- package/data/docs/bpta-permission-timeout-analysis.md +51 -0
- package/data/docs/bpta-photo.md +15 -0
- package/data/docs/bpta-picture-preview.md +464 -0
- package/data/docs/bpta-picture.md +12 -0
- package/data/docs/bpta-playing-formatted-audio-based-avplayer-arkts.md +481 -0
- package/data/docs/bpta-playing-formatted-audio-based-avplayer-cpp.md +593 -0
- package/data/docs/bpta-playing-pcm-audio-based-audiorenderer.md +959 -0
- package/data/docs/bpta-playing-pcm-audio-based-ohaudio.md +599 -0
- package/data/docs/bpta-playing-short-audio-based-soundpool.md +182 -0
- package/data/docs/bpta-positioning.md +364 -0
- package/data/docs/bpta-power-basic-quality-test.md +35 -0
- package/data/docs/bpta-power-consumption-analysis.md +12 -0
- package/data/docs/bpta-power-consumption-develop-analysis.md +12 -0
- package/data/docs/bpta-power-consumption-experience.md +119 -0
- package/data/docs/bpta-power-consumption-runtime-analysis.md +15 -0
- package/data/docs/bpta-power_overview.md +26 -0
- package/data/docs/bpta-pptimized-component-drawing.md +27 -0
- package/data/docs/bpta-pre-connect.md +133 -0
- package/data/docs/bpta-preloading-resources.md +21 -0
- package/data/docs/bpta-program-framework.md +15 -0
- package/data/docs/bpta-properly-use-foreground-resources.md +22 -0
- package/data/docs/bpta-purax-guide.md +215 -0
- package/data/docs/bpta-quality-overview.md +79 -0
- package/data/docs/bpta-reader-page-flip.md +890 -0
- package/data/docs/bpta-reasonable-audio-playback-use.md +42 -0
- package/data/docs/bpta-reasonable-audio-use.md +163 -0
- package/data/docs/bpta-reasonable-bluetooth-use.md +52 -0
- package/data/docs/bpta-reasonable-gps-use.md +59 -0
- package/data/docs/bpta-reasonable-network-use.md +105 -0
- package/data/docs/bpta-reasonable-position-navigation-use.md +47 -0
- package/data/docs/bpta-reasonable-request-use.md +77 -0
- package/data/docs/bpta-reasonable-sensor-use.md +53 -0
- package/data/docs/bpta-reasonable-system-use.md +67 -0
- package/data/docs/bpta-recommended-use-of-device-id.md +79 -0
- package/data/docs/bpta-reduce-layout-nodes.md +30 -0
- package/data/docs/bpta-reduce-time-consuming.md +36 -0
- package/data/docs/bpta-redundancy-refresh-guide.md +409 -0
- package/data/docs/bpta-render-web-using-same-layer-render.md +601 -0
- package/data/docs/bpta-resource-and-storage-optimization.md +14 -0
- package/data/docs/bpta-retrieve-process-memory-info.md +49 -0
- package/data/docs/bpta-rich-text-display.md +475 -0
- package/data/docs/bpta-rich-text-editor.md +426 -0
- package/data/docs/bpta-risk-control-engine.md +146 -0
- package/data/docs/bpta-scenario-performance-optimization.md +17 -0
- package/data/docs/bpta-scenario-power-optimization.md +12 -0
- package/data/docs/bpta-scenario-stability-address-sanitizer.md +210 -0
- package/data/docs/bpta-scenario-stability-app-freeze.md +615 -0
- package/data/docs/bpta-scenario-stability-cppcrash.md +516 -0
- package/data/docs/bpta-scenario-stability-exception-exit.md +12 -0
- package/data/docs/bpta-scenario-stability-jscrash.md +922 -0
- package/data/docs/bpta-scenario-stability-leak.md +276 -0
- package/data/docs/bpta-scenario-stability.md +14 -0
- package/data/docs/bpta-screen-flicker-solution.md +480 -0
- package/data/docs/bpta-shared-bicycle.md +509 -0
- package/data/docs/bpta-short-video-base-adaptivevideo.md +403 -0
- package/data/docs/bpta-smart-reach.md +306 -0
- package/data/docs/bpta-smartwatch.md +755 -0
- package/data/docs/bpta-smartwatchnavigation.md +384 -0
- package/data/docs/bpta-smooth-application-design.md +225 -0
- package/data/docs/bpta-smooth-switching.md +294 -0
- package/data/docs/bpta-social-communications.md +11 -0
- package/data/docs/bpta-social-share.md +637 -0
- package/data/docs/bpta-solutions-to-special-issues.md +12 -0
- package/data/docs/bpta-sound-quality-switching.md +422 -0
- package/data/docs/bpta-spatiality-immersive.md +531 -0
- package/data/docs/bpta-special-text-recognition.md +137 -0
- package/data/docs/bpta-stability-address-illegal-way.md +190 -0
- package/data/docs/bpta-stability-address-sanitizer-catagory.md +212 -0
- package/data/docs/bpta-stability-address-sanitizer-faq.md +32 -0
- package/data/docs/bpta-stability-address-sanitizer-opt.md +170 -0
- package/data/docs/bpta-stability-address-sanitizer-overview.md +23 -0
- package/data/docs/bpta-stability-address-sanitizer-principle.md +179 -0
- package/data/docs/bpta-stability-analysis.md +17 -0
- package/data/docs/bpta-stability-app-analyzer.md +11 -0
- package/data/docs/bpta-stability-app-crash-cpp-way.md +200 -0
- package/data/docs/bpta-stability-app-crash-js-way.md +148 -0
- package/data/docs/bpta-stability-app-crash.md +13 -0
- package/data/docs/bpta-stability-app-freeze-ark-runtime.md +339 -0
- package/data/docs/bpta-stability-app-freeze-opt.md +80 -0
- package/data/docs/bpta-stability-app-freeze-way.md +410 -0
- package/data/docs/bpta-stability-app-freeze.md +12 -0
- package/data/docs/bpta-stability-app-killed-way.md +49 -0
- package/data/docs/bpta-stability-ark-detection.md +12 -0
- package/data/docs/bpta-stability-ark-exception-detection.md +38 -0
- package/data/docs/bpta-stability-ark-runtime-detection.md +134 -0
- package/data/docs/bpta-stability-asan-detection.md +450 -0
- package/data/docs/bpta-stability-coding-standard-api.md +2054 -0
- package/data/docs/bpta-stability-coding-standard-cpp.md +91 -0
- package/data/docs/bpta-stability-coding-standard-libuv.md +772 -0
- package/data/docs/bpta-stability-coding-standard-ndk-arkts.md +189 -0
- package/data/docs/bpta-stability-coding-standard-node.md +478 -0
- package/data/docs/bpta-stability-coding-standard.md +16 -0
- package/data/docs/bpta-stability-cpp-crash-opt.md +346 -0
- package/data/docs/bpta-stability-detection.md +14 -0
- package/data/docs/bpta-stability-deveco-testing.md +73 -0
- package/data/docs/bpta-stability-develop-detection.md +17 -0
- package/data/docs/bpta-stability-exception-exit-opt.md +12 -0
- package/data/docs/bpta-stability-fault-log.md +14 -0
- package/data/docs/bpta-stability-fault-type.md +31 -0
- package/data/docs/bpta-stability-file-handle-detection.md +96 -0
- package/data/docs/bpta-stability-gwpasan-detection.md +588 -0
- package/data/docs/bpta-stability-hwasan-detection.md +360 -0
- package/data/docs/bpta-stability-ide-static-detection.md +343 -0
- package/data/docs/bpta-stability-js-crash-opt.md +21 -0
- package/data/docs/bpta-stability-js-memleak-detection.md +214 -0
- package/data/docs/bpta-stability-leak-detection.md +15 -0
- package/data/docs/bpta-stability-leak-opt.md +251 -0
- package/data/docs/bpta-stability-leak-way.md +459 -0
- package/data/docs/bpta-stability-log-specs.md +31 -0
- package/data/docs/bpta-stability-log-standard-hilog.md +191 -0
- package/data/docs/bpta-stability-log-standard.md +11 -0
- package/data/docs/bpta-stability-memleak-detection-overview.md +109 -0
- package/data/docs/bpta-stability-native-memleak-detection.md +204 -0
- package/data/docs/bpta-stability-operate-apm.md +113 -0
- package/data/docs/bpta-stability-operate-app-event.md +320 -0
- package/data/docs/bpta-stability-operate-event.md +11 -0
- package/data/docs/bpta-stability-operate.md +15 -0
- package/data/docs/bpta-stability-opt.md +18 -0
- package/data/docs/bpta-stability-overview.md +17 -0
- package/data/docs/bpta-stability-ram-detection.md +17 -0
- package/data/docs/bpta-stability-runtime-address-sanitizer-detection.md +21 -0
- package/data/docs/bpta-stability-runtime-appkilled-detection.md +44 -0
- package/data/docs/bpta-stability-runtime-crash-detection.md +14 -0
- package/data/docs/bpta-stability-runtime-detection.md +14 -0
- package/data/docs/bpta-stability-runtime-exception-exit-detection.md +12 -0
- package/data/docs/bpta-stability-runtime-freeze-detection.md +21 -0
- package/data/docs/bpta-stability-runtime-leak-detection.md +31 -0
- package/data/docs/bpta-stability-testing.md +11 -0
- package/data/docs/bpta-stability-thread-detection.md +11 -0
- package/data/docs/bpta-stability-thread-leak-detection.md +35 -0
- package/data/docs/bpta-stability-tsan-detection.md +477 -0
- package/data/docs/bpta-stability-ubsan-detection.md +350 -0
- package/data/docs/bpta-startup-response-optimization.md +12 -0
- package/data/docs/bpta-state-refresh.md +48 -0
- package/data/docs/bpta-static-scenarios.md +63 -0
- package/data/docs/bpta-status-management.md +872 -0
- package/data/docs/bpta-surface-encoder.md +427 -0
- package/data/docs/bpta-swiper_high_performance_development_guide.md +357 -0
- package/data/docs/bpta-tablet-pc.md +11 -0
- package/data/docs/bpta-taskpool_usage_specifications_and_faqs.md +625 -0
- package/data/docs/bpta-text-expand-collapse.md +274 -0
- package/data/docs/bpta-texture-compression-improve-performance.md +336 -0
- package/data/docs/bpta-thread-priority-setting.md +233 -0
- package/data/docs/bpta-threads-serialization-timeout-analysis.md +169 -0
- package/data/docs/bpta-time-optimization-of-the-main-thread.md +1239 -0
- package/data/docs/bpta-travel-navigation.md +11 -0
- package/data/docs/bpta-tv.md +11 -0
- package/data/docs/bpta-ui-component-encapsulation.md +585 -0
- package/data/docs/bpta-ui-component-performance-optimization.md +597 -0
- package/data/docs/bpta-ui-dynamic-operations.md +618 -0
- package/data/docs/bpta-ui-skip-analysis.md +191 -0
- package/data/docs/bpta-unified-drag-and-drop.md +1189 -0
- package/data/docs/bpta-use-of-background-hardware-resources.md +16 -0
- package/data/docs/bpta-use-of-background-software-resources.md +14 -0
- package/data/docs/bpta-use-of-background-tasks.md +23 -0
- package/data/docs/bpta-utilize-hwc-efficiently.md +461 -0
- package/data/docs/bpta-vdeocast.md +558 -0
- package/data/docs/bpta-video-adaptation-based-web.md +462 -0
- package/data/docs/bpta-video-barrage.md +68 -0
- package/data/docs/bpta-video-codec.md +42 -0
- package/data/docs/bpta-video-component-long-video.md +659 -0
- package/data/docs/bpta-video-component-short-video.md +337 -0
- package/data/docs/bpta-video-layer.md +32 -0
- package/data/docs/bpta-video-practices.md +12 -0
- package/data/docs/bpta-video-render.md +1225 -0
- package/data/docs/bpta-video-rom.md +37 -0
- package/data/docs/bpta-video-thumbnail.md +179 -0
- package/data/docs/bpta-video-wifi.md +40 -0
- package/data/docs/bpta-vsync-power-optimization.md +116 -0
- package/data/docs/bpta-waterflow-based-on-scrollcomponents.md +989 -0
- package/data/docs/bpta-waterflow-operations.md +991 -0
- package/data/docs/bpta-waterflow-performance-optimization.md +191 -0
- package/data/docs/bpta-wavewheel-for-image-editor.md +421 -0
- package/data/docs/bpta-wear.md +12 -0
- package/data/docs/bpta-web-adaptation.md +451 -0
- package/data/docs/bpta-web-app-jump-and-pull-up.md +310 -0
- package/data/docs/bpta-web-click-response-delay-analysis.md +164 -0
- package/data/docs/bpta-web-completion-delay-analysis.md +209 -0
- package/data/docs/bpta-web-develop-optimization.md +2596 -0
- package/data/docs/bpta-web-development.md +15 -0
- package/data/docs/bpta-web-frame-rate-performance-analysis.md +252 -0
- package/data/docs/bpta-web-interceptor.md +724 -0
- package/data/docs/bpta-web-performance-optimization.md +11 -0
- package/data/docs/bpta-window-and-screen-management.md +12 -0
- package/data/docs/bpta-zhenlv.md +559 -0
- package/data/docs/changelog.md +1410 -0
- package/data/docs/low-power-consumption-suggestions.md +246 -0
- package/data/docs/multi-business-office.md +275 -0
- package/data/docs/multi-communication-app.md +240 -0
- package/data/docs/multi-community-app.md +257 -0
- package/data/docs/multi-convenient-life.md +501 -0
- package/data/docs/multi-financial-app.md +288 -0
- package/data/docs/multi-news-read.md +286 -0
- package/data/docs/multi-picture-app.md +219 -0
- package/data/docs/multi-shopping-price-comparison.md +254 -0
- package/data/docs/multi-short-video-app.md +315 -0
- package/data/docs/multi-ticket-class.md +458 -0
- package/data/docs/multi-travel-accommodation.md +361 -0
- package/data/docs/multi-travel-navigation.md +449 -0
- package/data/docs/multi-video-app.md +492 -0
- package/data/index.md +2886 -0
- package/dist/data.js +180 -0
- package/dist/index.js +203 -0
- package/dist/search.js +102 -0
- package/package.json +57 -0
- package/scripts/trim-code-extra.mjs +78 -0
- package/scripts/trim-code.mjs +106 -0
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
# 应用包体积优化
|
|
2
|
+
|
|
3
|
+
> 来源: https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-decrease_pakage_size
|
|
4
|
+
> 文档标识(fileName): bpta-decrease_pakage_size
|
|
5
|
+
> 目录(catalogName): best-practices
|
|
6
|
+
> 语言: cn
|
|
7
|
+
> 更新时间: 2026-06-23 03:39:39
|
|
8
|
+
> 导航地址: /hmos/hmos-dp1
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
#### 概述
|
|
12
|
+
|
|
13
|
+
减小应用包大小可以提升应用下载和安装体验。压缩、精简或复用代码和资源可以有效降低应用包体积。在优化包大小前,先了解HarmonyOS应用的[Stage模型应用程序包结构](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/application-package-structure-stage),对HAP、HAR、HSP等特点建立一定认知,然后使用扫描工具分析App包,根据报告优化应用。具体优化方法可以参考以下内容:
|
|
14
|
+
|
|
15
|
+
1. 对于含有so库的App工程,可以配置so库压缩选项,以减小应用包大小。
|
|
16
|
+
2. 在应用存在多包(HAP、HSP)的场景中,可以使用HSP动态共享包在多个包(HAP、HSP)之间共享代码和资源,消除使用HAR静态共享包导致的代码和资源重复拷贝,从而减小应用包大小,同时开发者需要综合评估对编译性能的影响:大量使用HSP替代HAR,会在编译引用这些HSP共享包的模块时触发更多的语言编译任务,导致编译耗时、编译内存占用增加。
|
|
17
|
+
3. 使用ohpm的[override](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-oh-package-json5#zh-cn_topic_0000001792256137_overrides)机制或开启 `[resolve_conflict](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-ohpmrc#section368717475562)` 解决依赖冲突,减少依赖包导致的重复编译问题。
|
|
18
|
+
4. 将不常用的功能作为按需加载的模块。
|
|
19
|
+
|
|
20
|
+
#### 使用扫描工具分析App大小问题
|
|
21
|
+
|
|
22
|
+
[扫描工具](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/app-check-tool)可用于分析检测应用包,根据不同的参数设定,扫描指定路径的App、HAP、HSP包内容并输出检测结果报告,为开发者优化包结构或排查问题提供数据支撑。
|
|
23
|
+
|
|
24
|
+
根据扫描结果优化应用:
|
|
25
|
+
|
|
26
|
+
1. 重复文件
|
|
27
|
+
|
|
28
|
+
- 删除同一包内的重复资源。多包(HAP、HSP)间重复资源,可以使用HSP实现资源的复用,参考[多包情况下使用HSP共享代码及资源](#section13745162092020)。
|
|
29
|
+
|
|
30
|
+
2. 较大文件
|
|
31
|
+
|
|
32
|
+
- 确认应用是否必需,是否可以删除。
|
|
33
|
+
- JPG、PNG、GIF等文件,可以考虑压缩图片。
|
|
34
|
+
|
|
35
|
+
3. 特定类型的文件
|
|
36
|
+
|
|
37
|
+
so文件,通过[配置so库压缩选项](#section15826132851819)来实现压缩打包。
|
|
38
|
+
|
|
39
|
+
#### 减小应用包大小的方法
|
|
40
|
+
|
|
41
|
+
## 配置so库压缩选项
|
|
42
|
+
|
|
43
|
+
DevEco Studio 默认在打包应用时不压缩 so 库文件。配置 so 压缩选项后,DevEco Studio 将 so 库文件压缩并打包到应用中,从而减小应用包的大小。
|
|
44
|
+
|
|
45
|
+
**配置方法**
|
|
46
|
+
|
|
47
|
+
修改应用模块配置文件module.json5中的compressNativeLibs字段,将值配置为true,重新编译、打包应用。
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
{
|
|
51
|
+
"module": {
|
|
52
|
+
// ...
|
|
53
|
+
"compressNativeLibs": true // Identify whether the so library is packaged in compressed storage. ’true’ means compressed so library, ’false’ means non-compressed.
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
**so压缩效果**
|
|
59
|
+
|
|
60
|
+
以DevEco Studio中的C++默认库文件为例,展示压缩前后的文件大小对比:
|
|
61
|
+
|
|
62
|
+
| 文件名 | 原始大小 | 压缩后大小 | 压缩率 |
|
|
63
|
+
| --- | --- | --- | --- |
|
|
64
|
+
| armeabi-v7a/libc++_shared.so | 1108k | 386k | 34% |
|
|
65
|
+
|
|
66
|
+
## 解决依赖减少依赖包重复编译
|
|
67
|
+
|
|
68
|
+
对于ohpm 1.5.0之前的版本,如果hap依赖了不同版本的har(例如下图中的V1版本的harC和V2版本的harC),默认情况下,V1和V2两个版本的harC都会被打包到hap中。开发者可以使用ohpm的[override](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-oh-package-json5#zh-cn_topic_0000001792256137_overrides)机制,指定只打包一个版本。
|
|
69
|
+
|
|
70
|
+

|
|
71
|
+
|
|
72
|
+
如果使用的是ohpm 1.4.0 版本,可以使用override机制,开发者可以在项目级别的 oh-package.json5 (即项目根目录下的 oh-package.json5)文件中添加 overrides 配置,将依赖树中的依赖替换为另一个版本。替换的版本既可以是一个具体的版本号,也可以是本地存在的HAR包或源码目录。
|
|
73
|
+
|
|
74
|
+
**注意:**
|
|
75
|
+
|
|
76
|
+
必须在项目级别的 oh-package.json5 中配置 overrides,配置在模块级别的 oh-package.json5 中不会生效。
|
|
77
|
+
|
|
78
|
+
例如, 这里以 'foo' 库为例,如果在项目中始终需要使用'1.0.0'版本,可在项目级的 oh-package.json5 中添加以下配置:
|
|
79
|
+
|
|
80
|
+
```
|
|
81
|
+
{
|
|
82
|
+
"overrides": {
|
|
83
|
+
"foo": "1.0.0"
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
若本地存在 foo 的源码或 HAR 包,确保 foo 始终使用本地版本,可在项目级 oh-package.json5 中进行如下配置:
|
|
89
|
+
|
|
90
|
+
1、本地存在"foo"的源码,即配置项目根目录下的foo目录,以"file:./foo"标识其路径。
|
|
91
|
+
|
|
92
|
+
```
|
|
93
|
+
{
|
|
94
|
+
"overrides": {
|
|
95
|
+
"foo": "file:./foo"
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
2、本地存在"foo.har"的HAR包,其存放在libs目录下,即配置"file:./libs/foo.har"。
|
|
101
|
+
|
|
102
|
+
```
|
|
103
|
+
{
|
|
104
|
+
"overrides": {
|
|
105
|
+
"foo": "file:./libs/foo.har"
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
对于1.5.0版本之后的ohpm,可以通过开启`[resolve_conflict](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-ohpmrc#section368717475562)`,自动解决依赖冲突。依赖冲突的处理策略为:当项目同时依赖某个三方库的不同版本时,ohpm会选择其中的最高版本进行安装。
|
|
111
|
+
|
|
112
|
+
## 按需分发
|
|
113
|
+
|
|
114
|
+
对于应用中用户不常用的功能,可以考虑通过[产品特性按需分发](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/store-moduleinstall)的方式,将下载时机交由用户选择,使用时从应用市场获取安装,减少用户初次下载的包大小。
|
|
115
|
+
|
|
116
|
+
## 多包场景下使用HSP共享代码和资源
|
|
117
|
+
|
|
118
|
+
当前系统提供了两种共享包:HAR静态共享包和HSP动态共享包。HAR和HSP都用于实现代码和资源的共享,可以包含代码、C++库、资源和配置文件。HAR中的代码和资源跟随使用方编译,如果有多个使用方,编译产物中会存在多份相同拷贝。HSP中的代码和资源可以独立编译,在运行时进程中只存在一份。
|
|
119
|
+
|
|
120
|
+
在多包场景下,如果应用的多个HAP或HSP包使用HAR包实现代码和资源的共享,打包后的每个HAP或HSP包中都会包含共享HAR包的拷贝,导致App包中存在冗余代码和资源。如下图示例,应用模块HAP1和HAP2/HSP1都引用了HAR2和HAR3,打包后,App包中HAR2和HAR3有多份重复拷贝,体积较大。
|
|
121
|
+
|
|
122
|
+

|
|
123
|
+
|
|
124
|
+
推荐使用HSP代替HAR实现代码和资源共享。如下图示例,使用HSP2对原应用进行升级改造,打包后,APP包中HAR2和HAR3仅保留一份拷贝。当HAR2和HAR3的总大小超过HSP时,可以减小应用包大小。
|
|
125
|
+
|
|
126
|
+

|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
# 操作延时触发
|
|
2
|
+
|
|
3
|
+
> 来源: https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-delayed-trigger-operation
|
|
4
|
+
> 文档标识(fileName): bpta-delayed-trigger-operation
|
|
5
|
+
> 目录(catalogName): best-practices
|
|
6
|
+
> 语言: cn
|
|
7
|
+
> 更新时间: 2026-06-23 03:39:36
|
|
8
|
+
> 导航地址: /hmos/hmos-dp1
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
#### **延迟加载Lazy-Import与动态加载await import**
|
|
12
|
+
|
|
13
|
+
随着业务规模不断扩大,很多应用在冷启动时会静态import大量模块,这种静态import会在应用初始化阶段同步加载所有依赖模块,导致冷启动耗时增加。ArkTS 提供了[Lazy-Import](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-lazy-import-V5)能力和[动态加载](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts-dynamic-import)(动态import)能力,使模块可在真正需要时再加载,从而提升应用启动速度,并有效降低资源消耗。
|
|
14
|
+
|
|
15
|
+
- 动态加载(动态import)是一种异步模块加载机制,允许应用程序在运行时按照实际需求去加载相关模块。例如在用户交互等条件触发时,再动态加载特定模块,可以减少初始化import的加载时间和资源消耗,这将有助于提高应用程序的内存性能和响应速度。
|
|
16
|
+
- 延迟加载(Lazy-Import)是一种延缓模块加载的机制,可以使待加载文件在冷启动阶段不被加载,而在后续导出变量被真正使用时再同步加载执行文件,从而节省资源以提高应用冷启动性能。具体案例与实验数据请参阅[延迟加载Lazy-Import使用指导](https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-arkts-high-performance#section12861143418213)。
|
|
17
|
+
|
|
18
|
+
两种延时加载方案的区别。具体请参阅[Lazy-Import与动态加载的区别](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts-lazy-import#lazy-import与动态加载的区别)。
|
|
19
|
+
|
|
20
|
+

|
|
21
|
+
|
|
22
|
+
延迟加载(lazy-Import)会改变模块执行顺序,可能导致预期的全局变量未定义。具体场景请参阅[Lazy-Import加载副作用](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-module-side-effects-V5#延迟加载lazy-import改变模块执行顺序可能导致预期的全局变量未定义)。
|
|
23
|
+
|
|
24
|
+
## 延迟加载Lazy-Import
|
|
25
|
+
|
|
26
|
+
**模块导入延迟到业务附近**
|
|
27
|
+
|
|
28
|
+
一些应用在冷启动阶段会加载过多未使用模块,针对这种情况导致的启动缓慢问题,开发者可以对冷启动阶段未使用的模块进行 Lazy-Import 改造,使模块导入延迟到对应业务附近加载,从而有效缩短冷启动时间,最终提升用户的启动体验。案例可参考[模块导入延迟到业务附近](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts-lazy-import#使用示例)。
|
|
29
|
+
|
|
30
|
+
**延迟加载非关键路径模块**
|
|
31
|
+
|
|
32
|
+
下面示例中,所有变量均从DeviceInfo模块中导出。除了冷启动用到的name模块,一些非关键路径模块(如screen和storage)也一起被导出。
|
|
33
|
+
|
|
34
|
+

|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
// entry\src\main\ets\pages\Index.ets
|
|
38
|
+
// Before optimization: All variables are exported from the user info
|
|
39
|
+
import { hilog } from '@kit.PerformanceAnalysisKit';
|
|
40
|
+
import { name, screen, storage } from './DeviceInfo';
|
|
41
|
+
|
|
42
|
+
@Entry
|
|
43
|
+
@Component
|
|
44
|
+
struct Index {
|
|
45
|
+
build() {
|
|
46
|
+
RelativeContainer() {
|
|
47
|
+
Text(name)
|
|
48
|
+
.id('HelloWorld')
|
|
49
|
+
.fontSize($r('app.float.page_text_font_size'))
|
|
50
|
+
.fontWeight(FontWeight.Bold)
|
|
51
|
+
.alignRules({
|
|
52
|
+
center: { anchor: '__container__', align: VerticalAlign.Center },
|
|
53
|
+
middle: { anchor: '__container__', align: HorizontalAlign.Center }
|
|
54
|
+
})
|
|
55
|
+
.onClick(() => {
|
|
56
|
+
hilog.info(0x0000, 'testTag', 'screen: %{public}s', screen);
|
|
57
|
+
hilog.info(0x0000, 'testTag', 'storage: %{public}s', storage);
|
|
58
|
+
})
|
|
59
|
+
}
|
|
60
|
+
.height('100%')
|
|
61
|
+
.width('100%')
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
```
|
|
67
|
+
// entry\src\main\ets\pages\DeviceInfo.ets
|
|
68
|
+
import { hilog } from '@kit.PerformanceAnalysisKit';
|
|
69
|
+
|
|
70
|
+
const name = 'Mate 70';
|
|
71
|
+
hilog.info(0x0000, 'testTag', 'export %{public}s', name);
|
|
72
|
+
const screen = 'OLED';
|
|
73
|
+
hilog.info(0x0000, 'testTag', 'export %{public}s', screen);
|
|
74
|
+
const storage = '512GB';
|
|
75
|
+
hilog.info(0x0000, 'testTag', 'export %{public}s', storage);
|
|
76
|
+
|
|
77
|
+
export { name, screen, storage };
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
使用体检工具[体检工具](https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-application-cold-start-optimization#section16955857103112)可以查看冷启动阶段未使用的模块和这些模块的加载耗时。将这些未使用模块(storage和screen)从关键路径中剥离,添加lazy标识进行延迟加载。修改后,从下图Trace中可以观察到冷启动阶段仅加载了DeviceName模块。OtherDeviceInfo模块被推迟到用户首次点击文本时才会执行。从修改前后的Trace可以看出,冷启动耗时有所降低。
|
|
81
|
+
|
|
82
|
+

|
|
83
|
+
|
|
84
|
+
```
|
|
85
|
+
// entry\src\main\ets\pages\Index.ets
|
|
86
|
+
// After optimization: split variables are exported from different modules
|
|
87
|
+
import { hilog } from '@kit.PerformanceAnalysisKit';
|
|
88
|
+
import { name } from './DeviceName';
|
|
89
|
+
import lazy { screen, storage } from './OtherDeviceInfo';
|
|
90
|
+
|
|
91
|
+
@Entry
|
|
92
|
+
@Component
|
|
93
|
+
struct Index {
|
|
94
|
+
build() {
|
|
95
|
+
RelativeContainer() {
|
|
96
|
+
Text(name)
|
|
97
|
+
.id('HelloWorld')
|
|
98
|
+
.fontSize($r('app.float.page_text_font_size'))
|
|
99
|
+
.fontWeight(FontWeight.Bold)
|
|
100
|
+
.alignRules({
|
|
101
|
+
center: { anchor: '__container__', align: VerticalAlign.Center },
|
|
102
|
+
middle: { anchor: '__container__', align: HorizontalAlign.Center }
|
|
103
|
+
})
|
|
104
|
+
.onClick(() => {
|
|
105
|
+
hilog.info(0x0000, 'testTag', 'screen: %{public}s', screen);
|
|
106
|
+
hilog.info(0x0000, 'testTag', 'storage: %{public}s', storage);
|
|
107
|
+
})
|
|
108
|
+
}
|
|
109
|
+
.height('100%')
|
|
110
|
+
.width('100%')
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
```
|
|
116
|
+
// entry\src\main\ets\pages\DeviceName.ets
|
|
117
|
+
import { hilog } from '@kit.PerformanceAnalysisKit';
|
|
118
|
+
|
|
119
|
+
const name = 'Mate 70';
|
|
120
|
+
hilog.info(0x0000, 'testTag', 'export %{public}s', name);
|
|
121
|
+
|
|
122
|
+
export { name };
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
```
|
|
126
|
+
// entry\src\main\ets\pages\OtherDeviceInfo.ets
|
|
127
|
+
import { hilog } from '@kit.PerformanceAnalysisKit';
|
|
128
|
+
|
|
129
|
+
const screen = 'OLED';
|
|
130
|
+
hilog.info(0x0000, 'testTag', 'export %{public}s', screen);
|
|
131
|
+
const storage = '512GB';
|
|
132
|
+
hilog.info(0x0000, 'testTag', 'export %{public}s', storage);
|
|
133
|
+
|
|
134
|
+
export { screen, storage };
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
## 动态加载await import
|
|
138
|
+
|
|
139
|
+
**动态加载冷启动未用到的so**
|
|
140
|
+
|
|
141
|
+
下面示例在应用启动时,界面仅需显示基础文本信息,但可以从下图的Trace中看到一个本地so库(libentry.so)被同步导入。该SO库包含数学运算功能,在用户点击界面之前不需要加载和初始化。
|
|
142
|
+
|
|
143
|
+
```
|
|
144
|
+
// entry\src\main\ets\pages\Index.ets
|
|
145
|
+
// Before optimization: statically import the so that is not used in cold start
|
|
146
|
+
import { hilog } from '@kit.PerformanceAnalysisKit';
|
|
147
|
+
import testNapi from 'libentry.so';
|
|
148
|
+
import { title } from './name';
|
|
149
|
+
|
|
150
|
+
@Entry
|
|
151
|
+
@Component
|
|
152
|
+
struct Index {
|
|
153
|
+
build() {
|
|
154
|
+
Row() {
|
|
155
|
+
Column() {
|
|
156
|
+
Text(title)
|
|
157
|
+
.fontSize($r('app.float.page_text_font_size'))
|
|
158
|
+
.fontWeight(FontWeight.Bold)
|
|
159
|
+
.onClick(() => {
|
|
160
|
+
hilog.info(0x0000, 'testTag', 'Test NAPI 2 + 3 = %{public}d', testNapi.add(2, 3));
|
|
161
|
+
})
|
|
162
|
+
}
|
|
163
|
+
.width('100%')
|
|
164
|
+
}
|
|
165
|
+
.height('100%')
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
```
|
|
171
|
+
// entry\src\main\ets\pages\name.ets
|
|
172
|
+
export const title = 'HarmonyOS';
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+

|
|
176
|
+
|
|
177
|
+
使用[体检工具](https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-application-cold-start-optimization#section16955857103112)记录冷启动Trace,识别启动阶段未使用的模块及其加载耗时。在该示例中,不需要在用户点击事件前加载[libentry.so](https://libentry.so/)模块,建议删除import testNapi from 'libentry.so'语句,仅在需要使用时通过import()函数动态加载该模块。下图为修改后采集的冷启动Trace,从图中可以看到冷启动阶段不再加载libentry.so。从修改前后的Trace可以看出降低了冷启动的耗时。
|
|
178
|
+
|
|
179
|
+
```
|
|
180
|
+
// entry\src\main\ets\pages\Index.ets
|
|
181
|
+
import { hilog } from '@kit.PerformanceAnalysisKit';
|
|
182
|
+
import { title } from './name';
|
|
183
|
+
|
|
184
|
+
@Entry
|
|
185
|
+
@Component
|
|
186
|
+
struct Index {
|
|
187
|
+
build() {
|
|
188
|
+
Row() {
|
|
189
|
+
Column() {
|
|
190
|
+
Text(title)
|
|
191
|
+
.fontSize($r('app.float.page_text_font_size'))
|
|
192
|
+
.fontWeight(FontWeight.Bold)
|
|
193
|
+
.onClick(async () => {
|
|
194
|
+
// After optimization: The SO file is dynamically loaded at the point of use.
|
|
195
|
+
let ns: ESObject | null = null;
|
|
196
|
+
try {
|
|
197
|
+
ns = await import('libentry.so');
|
|
198
|
+
hilog.info(0x0000, 'testTag', 'Test NAPI 2 + 3 = %{public}d', ns.default.add(2, 3));
|
|
199
|
+
} catch (error) {
|
|
200
|
+
hilog.error(0x0000, 'testTag', `Load so failed, code is ${error.code}, message is ${error.message}`);
|
|
201
|
+
}
|
|
202
|
+
})
|
|
203
|
+
}
|
|
204
|
+
.width('100%')
|
|
205
|
+
}
|
|
206
|
+
.height('100%')
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+

|
|
212
|
+
|
|
213
|
+
#### **延迟执行资源释放操作**
|
|
214
|
+
|
|
215
|
+
将资源关闭和释放操作放在[setTimeout](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-timer#settimeout)函数中执行,使其延迟到系统相对空闲的时刻进行,可以避免在程序忙碌时段占用关键资源,提升整体性能及响应能力。例如相机正常使用后,[延迟执行释放相机资源](https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-application-latency-optimization-cases#section8783201923819)的相关操作。
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
# 桌面快捷方式
|
|
2
|
+
|
|
3
|
+
> 来源: https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-desktop-shortcuts
|
|
4
|
+
> 文档标识(fileName): bpta-desktop-shortcuts
|
|
5
|
+
> 目录(catalogName): best-practices
|
|
6
|
+
> 语言: cn
|
|
7
|
+
> 更新时间: 2026-06-23 03:34:36
|
|
8
|
+
> 导航地址: /hmos/hmos-dp1
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
#### 概述
|
|
12
|
+
|
|
13
|
+
随着应用的功能越来越复杂,用户在使用应用时,找到某个功能的操作步骤也在变得更加繁琐。为了提升用户体验,可以对应用中常用的功能创建对应的桌面快捷方式,以达到快速启动应用、一键直达特定功能等目的。例如相机应用的 “快速拍照”、便签应用的 “新建便签” 和地图应用的“常用地点导航”等功能的快捷方式,用户通过快捷方式可以快速进入特定功能页面,既能大大提高操作效率,同时也增加了用户对应用的依赖性。使用快捷方式,还可以实现个性化定制的需求,创建多个快捷方式,以满足个性化的工作流程和操作偏好。
|
|
14
|
+
|
|
15
|
+
#### 场景介绍
|
|
16
|
+
|
|
17
|
+
以导航场景为例,当用户使用地图应用导航时,通常是先搜索目的地,然后开始导航。为了提升导航效率和提高操作便捷性,可以给该地图应用添加常去地点的导航快捷方式,如去公司、回家等。添加常去地点(例如公司、家等)的快捷方式后,用户即可通过长按应用图标,打开快捷方式入口,快速开启导航。
|
|
18
|
+
|
|
19
|
+
快捷方式创建成功后支持以下启动方式:
|
|
20
|
+
|
|
21
|
+
- 点击快捷方式入口列表中的“回家”项,即可快速打开地图应用,开启从当前位置到家的导航路线选择。
|
|
22
|
+
|
|
23
|
+

|
|
24
|
+
- 长按快捷方式入口列表中的“回家”项,可将其拖动至桌面,点击桌面对应图标,即可开启从当前位置到家的导航路线选择。
|
|
25
|
+
|
|
26
|
+

|
|
27
|
+
|
|
28
|
+

|
|
29
|
+
|
|
30
|
+
本文以单[HAP](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/hap-package)包为场景,讲述了快捷方式的实现步骤。多[HAP](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/hap-package)包的场景下, 步骤与单[HAP](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/hap-package)包一致,都是在entry文件夹下进行shortcuts_config.json的创建和module.json5的配置。
|
|
31
|
+
|
|
32
|
+
#### 实现原理
|
|
33
|
+
|
|
34
|
+
## 关键技术
|
|
35
|
+
|
|
36
|
+
使用[shortcuts](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/module-configuration-file#shortcuts标签)来配置应用的快捷方式,其配置值为数组,包含四个子标签shortcutId、label、icon、wants。
|
|
37
|
+
|
|
38
|
+
- shortcutId:标识快捷方式的ID,取值为长度不超过63字节的字符串。
|
|
39
|
+
- label:标识快捷方式的标签信息,即快捷方式对外显示的文字描述信息。取值为长度不超过255字节的字符串,可以是描述性内容,也可以是标识label的资源索引。
|
|
40
|
+
- icon:标识快捷方式的图标,取值为资源文件的索引。
|
|
41
|
+
- [wants](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/module-configuration-file#wants标签):标识快捷方式内定义的目标[wants](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/module-configuration-file#wants标签)信息集合,[wants](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/module-configuration-file#wants标签)中可配置如下参数:
|
|
42
|
+
|
|
43
|
+
| 属性名称 | 含义 |
|
|
44
|
+
| --- | --- |
|
|
45
|
+
| bundleName | 表示快捷方式的目标包名。 |
|
|
46
|
+
| moduleName | 表示快捷方式的目标模块名。 |
|
|
47
|
+
| abilityName | 表示快捷方式的目标组件名。 |
|
|
48
|
+
| parameters | 表示拉起快捷方式时的自定义数据,仅支持配置字符串类型的数据。其中键值均最大支持1024长度的字符串。 |
|
|
49
|
+
|
|
50
|
+
[shortcuts](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/module-configuration-file#shortcuts标签)配置完成后,还需要在[module.json5配置文件](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/module-configuration-file)中配置[metadata](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/module-configuration-file#metadata标签)字段来指定应用的快捷方式配置文件,从而完成快捷方式的基本配置。
|
|
51
|
+
|
|
52
|
+

|
|
53
|
+
|
|
54
|
+
通过在[module.json5配置文件](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/module-configuration-file)中配置[metadata](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/module-configuration-file#metadata标签)字段的快捷方式是一种在系统中创建的可以快速访问应用程序或特定功能的链接,与[卡片](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/formkit-overview)的区别在于:快捷方式只允许跳转至某个具体的UIAbility,无法直接跳转至非入口页面。
|
|
55
|
+
|
|
56
|
+
## 实现流程
|
|
57
|
+
|
|
58
|
+
给地图应用添加常用地点的导航快捷方式需要进行如下步骤:
|
|
59
|
+
|
|
60
|
+
1. 创建页面并配置页面的路由信息。首先需要创建对应的快捷方式页面,且页面组件需要用@Entry装饰。然后在resources/base/profile下的main_pages.json文件中添加对应快捷方式页面的路由信息。
|
|
61
|
+
|
|
62
|
+
```
|
|
63
|
+
{
|
|
64
|
+
"src": [
|
|
65
|
+
"pages/Index",
|
|
66
|
+
"pages/GoHouse",
|
|
67
|
+
"pages/GoCompany"
|
|
68
|
+
]
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
2. 在/resources/base/profile/目录下创建名为shortcuts_config.json的文件,并在文件中定义应用快捷方式的相关配置。其中shortcutId表示快捷方式的ID、label表示快捷方式对外显示的文字描述信息、icon表示快捷方式的图标、[wants](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/module-configuration-file#wants标签)中则是快捷方式内定义的目标wants信息集合。通过wants中的parameters参数来指定拉起快捷方式时的自定义数据。
|
|
72
|
+
|
|
73
|
+
```
|
|
74
|
+
{
|
|
75
|
+
"shortcuts": [
|
|
76
|
+
{
|
|
77
|
+
"shortcutId": "id_company",
|
|
78
|
+
"label": "$string:Go_to_the_Company",
|
|
79
|
+
"icon": "$media:company",
|
|
80
|
+
"wants": [
|
|
81
|
+
{
|
|
82
|
+
"bundleName": "com.example.desktopshortcuts",
|
|
83
|
+
"moduleName": "entry",
|
|
84
|
+
"abilityName": "EntryAbility",
|
|
85
|
+
"parameters": {
|
|
86
|
+
"shortCutKey": "CompanyPage"
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
]
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
"shortcutId": "id_house",
|
|
93
|
+
"label": "$string:Go_to_House",
|
|
94
|
+
"icon": "$media:house",
|
|
95
|
+
"wants": [
|
|
96
|
+
{
|
|
97
|
+
"bundleName": "com.example.desktopshortcuts",
|
|
98
|
+
"moduleName": "entry",
|
|
99
|
+
"abilityName": "EntryAbility",
|
|
100
|
+
"parameters": {
|
|
101
|
+
"shortCutKey": "HousePage"
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
]
|
|
105
|
+
}
|
|
106
|
+
]
|
|
107
|
+
}
|
|
108
|
+
```
|
|
109
|
+
3. 在[module.json5配置文件](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/module-configuration-file)中的[abilities](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/module-configuration-file#abilities标签)标签下的[metadata](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/module-configuration-file#metadata标签)中设置resource属性值为$profile:shortcuts_config,指定应用的快捷方式配置文件,即使用shortcuts_config.json文件中的shortcuts配置。
|
|
110
|
+
|
|
111
|
+
```
|
|
112
|
+
{
|
|
113
|
+
"module": {
|
|
114
|
+
// ...
|
|
115
|
+
"abilities": [
|
|
116
|
+
{
|
|
117
|
+
"name": "EntryAbility",
|
|
118
|
+
"srcEntry": "./ets/entryability/EntryAbility.ets",
|
|
119
|
+
// ...
|
|
120
|
+
"skills": [
|
|
121
|
+
{
|
|
122
|
+
"entities": [
|
|
123
|
+
"entity.system.home"
|
|
124
|
+
],
|
|
125
|
+
"actions": [
|
|
126
|
+
"ohos.want.action.home"
|
|
127
|
+
]
|
|
128
|
+
}
|
|
129
|
+
],
|
|
130
|
+
"metadata": [
|
|
131
|
+
{
|
|
132
|
+
"name": "ohos.ability.shortcuts",
|
|
133
|
+
"resource": "$profile:shortcuts_config"
|
|
134
|
+
}
|
|
135
|
+
]
|
|
136
|
+
}
|
|
137
|
+
],
|
|
138
|
+
// ...
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
```
|
|
142
|
+
4. 定义跳转到指定页面的方法。在步骤2中,通过parameters参数来指定了拉起快捷方式时的自定义数据 ,如"shortCutKey": "HousePage"。此时,可以通过获取want中的parameters里的shortCutKey来判断用户使用了哪种快捷方式,从而进行对应的页面跳转。如用户使用了“回家”的快捷方式进行导航,则获取到的shortCutKey的值为HousePage。
|
|
143
|
+
|
|
144
|
+
```
|
|
145
|
+
export function goToSpecifyPage(context: UIContext, want?: Want) {
|
|
146
|
+
let shortCutKey = want?.parameters?.shortCutKey;
|
|
147
|
+
|
|
148
|
+
if (shortCutKey && shortCutKey === 'CompanyPage') {
|
|
149
|
+
context.getRouter().pushUrl({
|
|
150
|
+
url: 'pages/GoCompany'
|
|
151
|
+
}).catch((err: BusinessError) => {
|
|
152
|
+
hilog.error(0x0000, 'testTag', `Failed to push url. Code is ${err.code}, message is ${err.message}`);
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
if (shortCutKey && shortCutKey === 'HousePage') {
|
|
156
|
+
context.getRouter().pushUrl({
|
|
157
|
+
url: 'pages/GoHouse'
|
|
158
|
+
}).catch((err: BusinessError) => {
|
|
159
|
+
hilog.error(0x0000, 'testTag', `Failed to push url. Code is ${err.code}, message is ${err.message}`);
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
```
|
|
164
|
+
5. 最后,需要在Index.ets文件中定义newWantChange()方法,并在该方法中调用步骤4的goToSpecifyPage()方法,并将want作为参数传入。其中,want需要在EntryAbility.ets文件中的[onNewWant()](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-app-ability-uiability#onnewwant)方法中通过AppStorage存入,然后在newWantChange()方法中获取。
|
|
165
|
+
|
|
166
|
+
```
|
|
167
|
+
newWantChange(): void {
|
|
168
|
+
if (this.isNewWant && AppStorage.has('want')) {
|
|
169
|
+
let want: Want | undefined = AppStorage.get('want');
|
|
170
|
+
if (want?.parameters?.shortCutKey) {
|
|
171
|
+
this.isNewWant = false;
|
|
172
|
+
goToSpecifyPage(this.getUIContext(), want);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
#### 示例代码
|
|
179
|
+
|
|
180
|
+
- [通过module.json5文件配置应用快捷打开方式入口](https://gitcode.com/harmonyos_samples/DesktopShortcut)
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# 性能检测
|
|
2
|
+
|
|
3
|
+
> 来源: https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-detection
|
|
4
|
+
> 文档标识(fileName): bpta-detection
|
|
5
|
+
> 目录(catalogName): best-practices
|
|
6
|
+
> 语言: cn
|
|
7
|
+
> 更新时间: 2026-06-23 03:39:23
|
|
8
|
+
> 导航地址: /hmos/hmos-dp1
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
- **[开发态性能检测](https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-performance-detection)**
|
|
12
|
+
- **[运行态性能检测](https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-performance-runtime-detection)**
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# 界面渲染性能优化
|
|
2
|
+
|
|
3
|
+
> 来源: https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-developing-high-performance-ui
|
|
4
|
+
> 文档标识(fileName): bpta-developing-high-performance-ui
|
|
5
|
+
> 目录(catalogName): best-practices
|
|
6
|
+
> 语言: cn
|
|
7
|
+
> 更新时间: 2026-06-23 03:39:26
|
|
8
|
+
> 导航地址: /hmos/hmos-dp1
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
- **[组件嵌套优化](https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-component-nesting-optimization)**
|
|
12
|
+
- **[懒加载优化性能](https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-lazyforeach-optimization)**
|
|
13
|
+
- **[UI组件性能优化](https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-ui-component-performance-optimization)**
|
|
14
|
+
- **[主线程耗时操作优化](https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-time-optimization-of-the-main-thread)**
|
|
15
|
+
- **[高负载场景分帧渲染](https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-dispose-highly-loaded-component-render)**
|
|
16
|
+
- **[长列表加载丢帧优化](https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-best-practices-long-list)**
|
|
17
|
+
- **[瀑布流加载丢帧优化](https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-waterflow-performance-optimization)**
|
|
18
|
+
- **[Grid组件加载丢帧优化](https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-improve_grid_performance)**
|
|
19
|
+
- **[Swiper组件加载丢帧优化](https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-swiper_high_performance_development_guide)**
|