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
package/README.md
ADDED
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
# HarmonyOS 最佳实践 MCP 服务器
|
|
2
|
+
|
|
3
|
+
把鸿蒙应用开发最佳实践资料(452 篇文档 + 186 个示例仓库)通过 MCP 暴露为检索工具,供 Claude Code / Cursor / Cline 等 MCP 客户端在开发时动态调用。
|
|
4
|
+
|
|
5
|
+
**文档(9MB)随包发布,装包即用、零配置。** 代码(8GB)不随包,按需配置本地路径(见下)。
|
|
6
|
+
|
|
7
|
+
## 提供的工具
|
|
8
|
+
|
|
9
|
+
| 工具 | 作用 |
|
|
10
|
+
|------|------|
|
|
11
|
+
| `search_best_practices({query, limit?})` | 全文检索文档(中文友好),返回相关度排序的文档列表(含主题、是否有代码、代码仓库名) |
|
|
12
|
+
| `get_doc({name})` | 读取指定文档(docId)的完整 Markdown 正文 |
|
|
13
|
+
| `get_code_example({docName})` | 返回文档关联的参考代码:本地仓库绝对路径、远程 URL、入口 `.ets/.ts` 文件 |
|
|
14
|
+
| `list_by_topic({topic?})` | 按大类浏览(稳定性/性能/媒体/功耗/一多…);省略参数返回所有大类及文档数 |
|
|
15
|
+
|
|
16
|
+
## 安装(最终用户)
|
|
17
|
+
|
|
18
|
+
无需 clone 本仓库。直接用 npx 或全局安装:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
# 方式一:一次性运行(推荐)
|
|
22
|
+
npx harmonyos-best-practices-mcp
|
|
23
|
+
|
|
24
|
+
# 方式二:全局安装
|
|
25
|
+
npm install -g harmonyos-best-practices-mcp
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
### 配置客户端
|
|
29
|
+
|
|
30
|
+
**Claude Code**(`.mcp.json`):
|
|
31
|
+
|
|
32
|
+
```json
|
|
33
|
+
{
|
|
34
|
+
"mcpServers": {
|
|
35
|
+
"harmonyos-best-practices": {
|
|
36
|
+
"command": "npx",
|
|
37
|
+
"args": ["-y", "harmonyos-best-practices-mcp"]
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
**Cursor / Cline / 其他 stdio 客户端**:同上,指向 `npx -y harmonyos-best-practices-mcp`。
|
|
44
|
+
|
|
45
|
+
### (可选)启用本地代码读取
|
|
46
|
+
|
|
47
|
+
默认 `get_code_example` 只返回 gitcode 远程 URL。若想直接读取真实 `.ets` 源码,获取代码并指向它:
|
|
48
|
+
|
|
49
|
+
**方式 A:直接下载瘦身后的代码包(推荐,97MB)**
|
|
50
|
+
|
|
51
|
+
从本项目 GitHub Release 下载 `harmonyos-best-practices-code.tar.gz`,解压得到 `best_practices_code/`。
|
|
52
|
+
|
|
53
|
+
**方式 B:自行克隆并瘦身(原始 15GB → 505MB 解压)**
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
# 1. 克隆示例代码(约 15GB)
|
|
57
|
+
git clone <各仓库> best_practices_code/
|
|
58
|
+
|
|
59
|
+
# 2. 瘦身两刀(脚本随 npm 包附带,用 npx 拉取后通过包内路径运行)
|
|
60
|
+
npx -y harmonyos-best-practices-mcp@latest node_modules/harmonyos-best-practices-mcp/scripts/trim-code.mjs best_practices_code/
|
|
61
|
+
# 或先全局安装: npm i -g harmonyos-best-practices-mcp
|
|
62
|
+
# 再跑: harmonyos-best-practices-mcp-trim-code best_practices_code/ (见下方 bin 说明)
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
> 瘦身脚本也提供为可执行 bin:`harmonyos-best-practices-mcp-trim-code` 与 `-trim-code-extra`,全局安装后可直接调用。
|
|
66
|
+
|
|
67
|
+
> 注:`trim-code` 会删除 `.git` 历史,瘦身后无法 `git pull` 更新。建议先 `--dry-run` 预览。
|
|
68
|
+
|
|
69
|
+
**方式 C:用完整代码(15GB,可编译)** —— 仅当你需要可编译工程时。
|
|
70
|
+
|
|
71
|
+
Claude Code 配置加 env:
|
|
72
|
+
|
|
73
|
+
```json
|
|
74
|
+
{
|
|
75
|
+
"mcpServers": {
|
|
76
|
+
"harmonyos-best-practices": {
|
|
77
|
+
"command": "npx",
|
|
78
|
+
"args": ["-y", "harmonyos-best-practices-mcp"],
|
|
79
|
+
"env": { "BP_CODE_DIR": "/abs/path/to/best_practices_code" }
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### 环境变量
|
|
86
|
+
|
|
87
|
+
| 变量 | 默认 | 说明 |
|
|
88
|
+
|------|------|------|
|
|
89
|
+
| `BP_DOCS_DIR` | 包内 `data/docs` | 文档目录(一般无需改) |
|
|
90
|
+
| `BP_INDEX` | 包内 `data/index.md` | 索引文件(一般无需改) |
|
|
91
|
+
| `BP_CODE_DIR` | 空 | 本地代码根目录;为空时 `get_code_example` 只给 URL |
|
|
92
|
+
|
|
93
|
+
## 开发与发布(维护者)
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
cd harmonyos-best-practices-mcp
|
|
97
|
+
npm install
|
|
98
|
+
npm run build # 编译 TS
|
|
99
|
+
npm run prepack # 拷贝文档到 data/ + 编译(发布前自动跑)
|
|
100
|
+
npm run selfcheck # 自检四个工具
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
发布到 npm:
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
npm login
|
|
107
|
+
npm publish # 自动触发 prepack 拷数据
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
包内含:`dist/` + `data/`(9MB 文档+索引) + `scripts/trim-code.mjs` + README。源码 `src/` 不随包。
|
|
111
|
+
|
|
112
|
+
## 验证
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
npx @modelcontextprotocol/inspector node dist/index.js
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## 配套 Skill
|
|
119
|
+
|
|
120
|
+
`skills/harmonyos-best-practices/SKILL.md` 是薄 Skill,引导 AI"动手前先检索"。复制到 Claude Code 的 skills 目录即可启用。
|
|
121
|
+
|
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
# PC/2in1异形窗口
|
|
2
|
+
|
|
3
|
+
> 来源: https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-2in1-window-shape
|
|
4
|
+
> 文档标识(fileName): bpta-2in1-window-shape
|
|
5
|
+
> 目录(catalogName): best-practices
|
|
6
|
+
> 语言: cn
|
|
7
|
+
> 更新时间: 2026-06-23 03:34:55
|
|
8
|
+
> 导航地址: /hmos/hmos-dp1
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
#### 概述
|
|
12
|
+
|
|
13
|
+
一般情况下,UI开发都是在矩形窗口上操作,但在PC/2in1设备上,应用还可以使用各类异形窗口来展现交互内容。这里的异形是指除默认矩形以外的形状,包括但不限于圆形、三角形以及其他不规则的形状等。开发者通过使用这些异形形状的窗口,结合窗口中的内容展示UI交互的多样性,一定程度上能够提升应用体验。类似的示例有:文字应用中的放大镜、带指示箭头的气泡框、提供辅助功能的悬浮窗等。
|
|
14
|
+
|
|
15
|
+
本文主要介绍在PC/2in1设备上实现异形窗口。根据窗口的形状类别,可分为以下场景:
|
|
16
|
+
|
|
17
|
+
- [图形形状窗口](#section6137113512381)
|
|
18
|
+
- [不规则形状窗口](#section42071254407)
|
|
19
|
+
|
|
20
|
+
#### 实现原理
|
|
21
|
+
|
|
22
|
+
在创建窗口时,ArkUI以宽、高为参数描绘窗口初始大小,其形状默认为矩形,可以通过设置掩码改变窗口最终呈现的形状。
|
|
23
|
+
|
|
24
|
+
该掩码是一个二维数组,其大小对应初始窗口的宽和高,所以可以把该数组中的元素与窗口中的像素一一对应起来;数组中的每一项值只能是0或1,其中数字0表示窗口对应位置的像素是透明的,数字1代表对应像素不透明。
|
|
25
|
+
|
|
26
|
+
简单来说,掩码即是由数字1描绘的窗口形状点阵图。具体使用可参考[setWindowMask()](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/arkts-apis-window-window#setwindowmask12)接口。
|
|
27
|
+
|
|
28
|
+
## 开发流程
|
|
29
|
+
|
|
30
|
+
1. 创建异形子窗口或悬浮窗,设置窗口的位置、大小等属性,设置窗口加载的page页面。
|
|
31
|
+
2. 根据待实现的异形形状,计算出与其对应的二维数组掩码,对目标窗口设置该掩码。
|
|
32
|
+
3. 根据逻辑需要,显示目标异形窗口。
|
|
33
|
+
|
|
34
|
+

|
|
35
|
+
|
|
36
|
+
掩码windowMask二维数组的大小需要与窗口初始宽、高一致,且每项值只能是0或1,否则设置的形状不会生效。
|
|
37
|
+
|
|
38
|
+
#### 图形形状窗口
|
|
39
|
+
|
|
40
|
+
## 场景案例
|
|
41
|
+
|
|
42
|
+
待开发的异形窗口,其形状是具有一定规则的几何图形,通过描述语言能得到精确且唯一的形状。本节以下面两种形状的实现为例进行说明:直径为500的圆形;底500、高500的等腰三角形。
|
|
43
|
+
|
|
44
|
+
## 创建子窗口
|
|
45
|
+
|
|
46
|
+
在得到异形窗口前,需要先创建一个默认的矩形窗口,开发步骤如下:
|
|
47
|
+
|
|
48
|
+
1. 为使用setWindowMask()等接口,需要额外配置syscap.json文件,在模块/src/main目录下,创建syscap.json文件,填入以下内容:
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
// entry/src/main/syscap.json
|
|
52
|
+
{
|
|
53
|
+
"devices": {
|
|
54
|
+
"general": [
|
|
55
|
+
"2in1"
|
|
56
|
+
]
|
|
57
|
+
},
|
|
58
|
+
"development": {
|
|
59
|
+
"addedSysCaps": [
|
|
60
|
+
"SystemCapability.Window.SessionManager"
|
|
61
|
+
]
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
```
|
|
65
|
+
2. 具体代码中,使用createSubWindow()创建子窗口(参考[设置应用子窗口](https://developer.huawei.com/consumer/cn/doc/atomic-guides/atomic-application-window#设置应用子窗口)),或使用createWindow()接口创建悬浮窗,设置窗口的位置、大小及其他属性等,然后使用setUIContent()接口设置窗口加载的page页面。
|
|
66
|
+
|
|
67
|
+
```
|
|
68
|
+
windowStage = AppStorage.get('windowStage');
|
|
69
|
+
if (windowStage === null) {
|
|
70
|
+
hilog.error(0x0000, 'Sample', 'Failed to create the subwindow. Cause: windowStage is null');
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
const windowWidth = 500;
|
|
74
|
+
const windowHeight = 500;
|
|
75
|
+
try {
|
|
76
|
+
subWindow = await windowStage!.createSubWindow('mySubWindow');
|
|
77
|
+
subWindow.moveWindowTo(300, 300);
|
|
78
|
+
subWindow.resize(windowWidth, windowHeight);
|
|
79
|
+
subWindow.setUIContent('pages/SubPage');
|
|
80
|
+
// ...
|
|
81
|
+
subWindow.showWindow();
|
|
82
|
+
} catch (exception) {
|
|
83
|
+
hilog.error(0x0000, 'Sample', 'Failed to create sub window. Cause: ' + JSON.stringify(exception));
|
|
84
|
+
}
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## 设置窗口形状
|
|
88
|
+
|
|
89
|
+
1. 根据要实现的异形窗口形状,计算二维数组掩码windowMask。
|
|
90
|
+
- 以下是以原矩形中点为圆心、直径为500的圆。最终效果见圆形子窗口效果。
|
|
91
|
+
|
|
92
|
+
```
|
|
93
|
+
function fillCircle(array: number[][], x: number, y: number, radius: number): void {
|
|
94
|
+
for (let i = x - radius; i <= x + radius; i++) {
|
|
95
|
+
for (let j = y - radius; j <= y + radius; j++) {
|
|
96
|
+
const distSquared = (i - x)**2 + (j - y)**2;
|
|
97
|
+
if (distSquared <= radius**2 && i >= 0 && j >= 0 && i < array.length && j < array[0].length) {
|
|
98
|
+
array[i][j] = 1;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
async function getCircleMask(width: number, height: number): Promise<number[][]> {
|
|
105
|
+
const radius = Math.min(width, height) / 2;
|
|
106
|
+
const maskArray: number[][] = new Array(height).fill(null).map(() => new Array(width).fill(0));
|
|
107
|
+
fillCircle(maskArray, height / 2, width / 2, radius);
|
|
108
|
+
return maskArray;
|
|
109
|
+
}
|
|
110
|
+
```
|
|
111
|
+
- 以下以原矩形宽为底边、原矩形高为高的等腰三角形。最终效果见三角形子窗口效果。
|
|
112
|
+
|
|
113
|
+
```
|
|
114
|
+
function fillTriangle(array: number[][], base: number, height: number): void {
|
|
115
|
+
// i < height-10 in order to remove the round corner
|
|
116
|
+
for (let i = 0; i < height - 10; i++) {
|
|
117
|
+
for (let j = 0; j < base; j++) {
|
|
118
|
+
if (j >= base / 2 - base / 2 * i / height && j <= base / 2 + base / 2 * i / height) {
|
|
119
|
+
array[i][j] = 1;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
async function getTriangleMask(width: number, height: number): Promise<number[][]> {
|
|
126
|
+
const maskArray: number[][] = new Array(height).fill(null).map(() => new Array(width).fill(0));
|
|
127
|
+
fillTriangle(maskArray, width, height);
|
|
128
|
+
return maskArray;
|
|
129
|
+
}
|
|
130
|
+
```
|
|
131
|
+
2. 使用setWindowMask(windowMask)接口,设置窗口形状。
|
|
132
|
+
|
|
133
|
+
```
|
|
134
|
+
async function setWindowShape(win: window.Window, width: number,
|
|
135
|
+
height: number, getMaskFunc: (w: number, h: number, picPath?: string) => Promise<number[][]>,
|
|
136
|
+
picPath?: string): Promise<void> {
|
|
137
|
+
const windowMask = await getMaskFunc(width, height, picPath);
|
|
138
|
+
if (canIUse('SystemCapability.Window.SessionManager')) {
|
|
139
|
+
try {
|
|
140
|
+
win.setWindowMask(windowMask);
|
|
141
|
+
} catch (e) {
|
|
142
|
+
let err = e as BusinessError;
|
|
143
|
+
hilog.error(0x0000, 'Simple', `failed code=${err.code}, message=${err.message}`);
|
|
144
|
+
}
|
|
145
|
+
} else {
|
|
146
|
+
hilog.info(0x0000, 'Simple', 'can not use SessionManager syscap');
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* Set the window with circle shape
|
|
152
|
+
* @param win The target window
|
|
153
|
+
* @param width The original window width
|
|
154
|
+
* @param height The original window height
|
|
155
|
+
*/
|
|
156
|
+
export async function setWindowCircleShape(win: window.Window, width: number,
|
|
157
|
+
height: number): Promise<void> {
|
|
158
|
+
setWindowShape(win, width, height, getCircleMask)
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Set the window with triangle shape
|
|
163
|
+
* @param win The target window
|
|
164
|
+
* @param width The original window width
|
|
165
|
+
* @param height The original window height
|
|
166
|
+
*/
|
|
167
|
+
export async function setWindowTriangleShape(win: window.Window, width: number,
|
|
168
|
+
height: number): Promise<void> {
|
|
169
|
+
setWindowShape(win, width, height, getTriangleMask)
|
|
170
|
+
}
|
|
171
|
+
```
|
|
172
|
+
3. 使用showWindow()接口显示异形子窗口。
|
|
173
|
+
|
|
174
|
+
```
|
|
175
|
+
subWindow.showWindow();
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
## 实现效果
|
|
179
|
+
|
|
180
|
+
**图1** 圆形子窗口效果
|
|
181
|
+

|
|
182
|
+
|
|
183
|
+
**图2** 三角形子窗口效果
|
|
184
|
+

|
|
185
|
+
|
|
186
|
+
#### 不规则形状窗口
|
|
187
|
+
|
|
188
|
+
## 场景案例
|
|
189
|
+
|
|
190
|
+
待开发的异形窗口,呈现出不规则的形状。这种情况通常先由设计人员提供图形文件,开发人员以文件为输入,基于ArkUI提供的图片处理能力,转化为相应的形状掩码,最后实现不规则的窗口形状。
|
|
191
|
+
|
|
192
|
+
**图3** 不规则示例图
|
|
193
|
+

|
|
194
|
+
|
|
195
|
+
本节以上图为例说明不规则形状窗口的实现过程。
|
|
196
|
+
|
|
197
|
+
## 开发步骤
|
|
198
|
+
|
|
199
|
+
首先同样需要先[创建子窗口](#section10343161441819),然后再依以下步骤开发。
|
|
200
|
+
|
|
201
|
+
1. 读取图片文件,将其转化为pixelMap数据。
|
|
202
|
+
|
|
203
|
+
```
|
|
204
|
+
/**
|
|
205
|
+
* Convert image to PixelMap object
|
|
206
|
+
*/
|
|
207
|
+
export async function image2PixelMap(Context: Context, icon: string, w: number, h: number): Promise<image.PixelMap> {
|
|
208
|
+
try {
|
|
209
|
+
const rawFileDescriptor: resourceManager.RawFileDescriptor = Context.resourceManager.getRawFdSync(icon);
|
|
210
|
+
const imageSource: image.ImageSource = image.createImageSource(rawFileDescriptor);
|
|
211
|
+
const pixelMap: Promise<PixelMap> = imageSource.createPixelMap({
|
|
212
|
+
editable: false,
|
|
213
|
+
desiredPixelFormat: image.PixelMapFormat.BGRA_8888,
|
|
214
|
+
desiredSize: { width: w, height: h }
|
|
215
|
+
});
|
|
216
|
+
imageSource.release()
|
|
217
|
+
return pixelMap;
|
|
218
|
+
} catch (e) {
|
|
219
|
+
let err = e as BusinessError;
|
|
220
|
+
hilog.error(0x0000, 'Simple', `failed code=${err.code}, message=${err.message}`);
|
|
221
|
+
}
|
|
222
|
+
return new Promise<image.PixelMap>((resolve, reject) => {
|
|
223
|
+
reject('null')
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
```
|
|
227
|
+
2. 从pixelMap数据中取出颜色信息数组,将每个像素的透明度单独提取至allPixels,再转化生成为对应形状的二维数组掩码maskArray。
|
|
228
|
+
|
|
229
|
+
```
|
|
230
|
+
export async function getPicMask(Context: Context,width: number, height: number, picPath: string): Promise<number[][]> {
|
|
231
|
+
const maskArray: number[][] = new Array(height).fill(null).map(() => new Array(width).fill(0));
|
|
232
|
+
const pixelMap: image.PixelMap = await image2PixelMap(Context, picPath, width, height);
|
|
233
|
+
const pixelArrayBuffer: ArrayBuffer = new ArrayBuffer(width * height * 4);
|
|
234
|
+
await pixelMap.readPixelsToBuffer(pixelArrayBuffer);
|
|
235
|
+
const allPixels: number[] = [];
|
|
236
|
+
const unit8Pixels: Uint8Array = new Uint8Array(pixelArrayBuffer);
|
|
237
|
+
for (let i = 0, j = 0; i < unit8Pixels.length; i += 4, j++) {
|
|
238
|
+
// unit8Pixels[i+3] is alpha channel of BGRA_8888
|
|
239
|
+
allPixels[j] = unit8Pixels[i + 3] > 0 ? 1 : 0;
|
|
240
|
+
}
|
|
241
|
+
pixelMap.release()
|
|
242
|
+
let k = 0;
|
|
243
|
+
for (let i = 0; i < height; i++) {
|
|
244
|
+
for (let j = 0; j < width; j++) {
|
|
245
|
+
maskArray[i][j] = allPixels[k++];
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
return maskArray;
|
|
249
|
+
}
|
|
250
|
+
```
|
|
251
|
+
3. 使用setWindowMask(windowMask)接口,设置窗口形状。
|
|
252
|
+
|
|
253
|
+
```
|
|
254
|
+
async function setWindowShape(win: window.Window, width: number,
|
|
255
|
+
height: number, getMaskFunc: (w: number, h: number, picPath?: string) => Promise<number[][]>,
|
|
256
|
+
picPath?: string): Promise<void> {
|
|
257
|
+
const windowMask = await getMaskFunc(width, height, picPath);
|
|
258
|
+
if (canIUse('SystemCapability.Window.SessionManager')) {
|
|
259
|
+
try {
|
|
260
|
+
win.setWindowMask(windowMask);
|
|
261
|
+
} catch (e) {
|
|
262
|
+
let err = e as BusinessError;
|
|
263
|
+
hilog.error(0x0000, 'Simple', `failed code=${err.code}, message=${err.message}`);
|
|
264
|
+
}
|
|
265
|
+
} else {
|
|
266
|
+
hilog.info(0x0000, 'Simple', 'can not use SessionManager syscap');
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Set the window with pic shape
|
|
271
|
+
* @param win The target window
|
|
272
|
+
* @param width The original window width
|
|
273
|
+
* @param height The original window height
|
|
274
|
+
* @param picPath The pic path in rawfile
|
|
275
|
+
*/
|
|
276
|
+
export async function setWindowPicShape(win: window.Window, Context: Context, width: number,
|
|
277
|
+
height: number, picPath: string): Promise<void> {
|
|
278
|
+
setWindowShape(win, width, height, (w, h, picPath) => {
|
|
279
|
+
return getPicMask(Context,w, h, picPath!)
|
|
280
|
+
}, picPath)
|
|
281
|
+
}
|
|
282
|
+
```
|
|
283
|
+
4. 使用showWindow()接口显示异形子窗口。
|
|
284
|
+
|
|
285
|
+
```
|
|
286
|
+
subWindow.showWindow();
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
## 实现效果
|
|
290
|
+
|
|
291
|
+
**图4** 不规则形状子窗口效果
|
|
292
|
+

|
|
293
|
+
|
|
294
|
+
#### **示例代码**
|
|
295
|
+
|
|
296
|
+
- [实现PC/2in1异形窗口](https://gitcode.com/harmonyos_samples/special-window-shape)
|