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.
Files changed (460) hide show
  1. package/README.md +121 -0
  2. package/data/docs/bpta-2in1-window-shape.md +296 -0
  3. package/data/docs/bpta-abckitts-implements-instrumentation.md +1279 -0
  4. package/data/docs/bpta-add-watermark.md +379 -0
  5. package/data/docs/bpta-ads-jump.md +67 -0
  6. package/data/docs/bpta-agent.md +472 -0
  7. package/data/docs/bpta-always-on-market-watch.md +703 -0
  8. package/data/docs/bpta-analysis-of-image-blurring.md +231 -0
  9. package/data/docs/bpta-analyze-memory-problem.md +17 -0
  10. package/data/docs/bpta-animation-frame.md +28 -0
  11. package/data/docs/bpta-antipeep-protection.md +291 -0
  12. package/data/docs/bpta-app-architecture-overview.md +25 -0
  13. package/data/docs/bpta-app-asset-protection-design.md +277 -0
  14. package/data/docs/bpta-app-code-ob.md +180 -0
  15. package/data/docs/bpta-app-concurrency-design.md +1189 -0
  16. package/data/docs/bpta-app-data-security.md +397 -0
  17. package/data/docs/bpta-app-icon-configuration.md +226 -0
  18. package/data/docs/bpta-app-privacy-protection.md +295 -0
  19. package/data/docs/bpta-application-aspect-programming-design.md +675 -0
  20. package/data/docs/bpta-application-cold-start-optimization.md +1397 -0
  21. package/data/docs/bpta-application-continue-progess.md +285 -0
  22. package/data/docs/bpta-application-gesture-share.md +468 -0
  23. package/data/docs/bpta-application-knock-file-share.md +263 -0
  24. package/data/docs/bpta-application-knock-video-share.md +552 -0
  25. package/data/docs/bpta-application-latency-optimization-cases.md +615 -0
  26. package/data/docs/bpta-application-power-analysis.md +15 -0
  27. package/data/docs/bpta-application-power-optimization.md +12 -0
  28. package/data/docs/bpta-application-power-test.md +52 -0
  29. package/data/docs/bpta-application-track-practice.md +595 -0
  30. package/data/docs/bpta-arkts-high-performance.md +464 -0
  31. package/data/docs/bpta-arkts-js-memory-analysis.md +111 -0
  32. package/data/docs/bpta-arkts-language.md +18 -0
  33. package/data/docs/bpta-arkweb-component-security.md +1134 -0
  34. package/data/docs/bpta-arkweb_rendering_framework.md +412 -0
  35. package/data/docs/bpta-aspect-implements-aop.md +505 -0
  36. package/data/docs/bpta-audio-and-video.md +30 -0
  37. package/data/docs/bpta-audio-cast.md +460 -0
  38. package/data/docs/bpta-audio-focus-management.md +862 -0
  39. package/data/docs/bpta-audio-in-ear-monitor.md +803 -0
  40. package/data/docs/bpta-audio-playback-series.md +16 -0
  41. package/data/docs/bpta-audio-record-base-on-audiocapturer.md +188 -0
  42. package/data/docs/bpta-audio-record-base-on-avrecorder-arkts.md +179 -0
  43. package/data/docs/bpta-audio-record-base-on-avrecorder.md +207 -0
  44. package/data/docs/bpta-audio-record-base-on-avscreencapture.md +165 -0
  45. package/data/docs/bpta-audio-record-base-on-ohaudio.md +162 -0
  46. package/data/docs/bpta-audio-record-overview.md +34 -0
  47. package/data/docs/bpta-audio-record.md +16 -0
  48. package/data/docs/bpta-audio-ripple-animation.md +198 -0
  49. package/data/docs/bpta-audio-video-synchronization.md +508 -0
  50. package/data/docs/bpta-audio-video.md +15 -0
  51. package/data/docs/bpta-automated-testing-frameworks.md +481 -0
  52. package/data/docs/bpta-avplayer-basic-control.md +533 -0
  53. package/data/docs/bpta-avplayer-embeded-network-video.md +486 -0
  54. package/data/docs/bpta-avplayer-embeded-short-video.md +512 -0
  55. package/data/docs/bpta-avplayer-long-video.md +907 -0
  56. package/data/docs/bpta-avplayer-short-video.md +158 -0
  57. package/data/docs/bpta-avplayer-video-practices.md +15 -0
  58. package/data/docs/bpta-avscreencapture-for-screen-recording.md +1121 -0
  59. package/data/docs/bpta-back-task-implement.md +317 -0
  60. package/data/docs/bpta-background-blur.md +316 -0
  61. package/data/docs/bpta-background-sensors-baned-analysis.md +93 -0
  62. package/data/docs/bpta-best-practices-long-list.md +891 -0
  63. package/data/docs/bpta-best-practices-overview.md +48 -0
  64. package/data/docs/bpta-bluetooth-low-energy.md +905 -0
  65. package/data/docs/bpta-buffer-mode-transcoding.md +728 -0
  66. package/data/docs/bpta-buffer-power-optimization.md +224 -0
  67. package/data/docs/bpta-camera-shot2see.md +368 -0
  68. package/data/docs/bpta-card-update-and-data-interaction.md +670 -0
  69. package/data/docs/bpta-carousel-graphic-works.md +379 -0
  70. package/data/docs/bpta-cell-phone.md +13 -0
  71. package/data/docs/bpta-click-to-click-response-optimization.md +264 -0
  72. package/data/docs/bpta-click-to-complete-delay-analysis.md +637 -0
  73. package/data/docs/bpta-collaboration-office.md +1178 -0
  74. package/data/docs/bpta-comment-reply-pop-up-window.md +523 -0
  75. package/data/docs/bpta-common-list-flows.md +688 -0
  76. package/data/docs/bpta-common-list-operations.md +828 -0
  77. package/data/docs/bpta-common-network-query.md +784 -0
  78. package/data/docs/bpta-comparative_practice_of_taskpool_and_worker.md +381 -0
  79. package/data/docs/bpta-compatible-scheme.md +11 -0
  80. package/data/docs/bpta-complex-type-pass.md +868 -0
  81. package/data/docs/bpta-component-nesting-optimization.md +421 -0
  82. package/data/docs/bpta-component-reuse-issue-diagnosis-and-analysis.md +637 -0
  83. package/data/docs/bpta-component-reuse.md +1258 -0
  84. package/data/docs/bpta-concurrency-capability.md +23 -0
  85. package/data/docs/bpta-concurrent-optimization.md +369 -0
  86. package/data/docs/bpta-content-creation.md +646 -0
  87. package/data/docs/bpta-continue-cast.md +702 -0
  88. package/data/docs/bpta-continue-data.md +335 -0
  89. package/data/docs/bpta-continue.md +1323 -0
  90. package/data/docs/bpta-control-rendering-range.md +29 -0
  91. package/data/docs/bpta-controlling-background-process-cpu.md +31 -0
  92. package/data/docs/bpta-crash-monitor-practice.md +116 -0
  93. package/data/docs/bpta-cross-domain-solutions-for-web-pages.md +308 -0
  94. package/data/docs/bpta-cross-end-migration.md +13 -0
  95. package/data/docs/bpta-cross-module-reference.md +406 -0
  96. package/data/docs/bpta-cross-platform-compatibility.md +321 -0
  97. package/data/docs/bpta-custom-camera-photo.md +454 -0
  98. package/data/docs/bpta-custom-camera-preview.md +1170 -0
  99. package/data/docs/bpta-custom-camera-video.md +322 -0
  100. package/data/docs/bpta-custom-font-settings.md +354 -0
  101. package/data/docs/bpta-custom-hvigor-plugin.md +159 -0
  102. package/data/docs/bpta-custom-keyboard.md +519 -0
  103. package/data/docs/bpta-customdialog-selection-and-development.md +406 -0
  104. package/data/docs/bpta-dark-mode-adaptation.md +321 -0
  105. package/data/docs/bpta-deal-stride-solution.md +261 -0
  106. package/data/docs/bpta-decrease_pakage_size.md +126 -0
  107. package/data/docs/bpta-delayed-trigger-operation.md +215 -0
  108. package/data/docs/bpta-desktop-shortcuts.md +180 -0
  109. package/data/docs/bpta-detection.md +12 -0
  110. package/data/docs/bpta-developing-high-performance-ui.md +19 -0
  111. package/data/docs/bpta-development-scenarios-for-tabs.md +934 -0
  112. package/data/docs/bpta-dialog-encapsulation.md +201 -0
  113. package/data/docs/bpta-dispose-highly-loaded-component-render.md +352 -0
  114. package/data/docs/bpta-distribute-drag-cast.md +60 -0
  115. package/data/docs/bpta-distributed-pasteboard-cast.md +88 -0
  116. package/data/docs/bpta-distributed-pasteboard.md +314 -0
  117. package/data/docs/bpta-drawing-capability-improve-performance.md +436 -0
  118. package/data/docs/bpta-dynamic-link-library.md +272 -0
  119. package/data/docs/bpta-easygo-parallel.md +402 -0
  120. package/data/docs/bpta-fair-use-animation.md +1693 -0
  121. package/data/docs/bpta-file-transmission-based-on-sfft.md +265 -0
  122. package/data/docs/bpta-file-upload-and-download-performance.md +484 -0
  123. package/data/docs/bpta-foldable-guide.md +205 -0
  124. package/data/docs/bpta-folded-hover.md +202 -0
  125. package/data/docs/bpta-form-kit.md +12 -0
  126. package/data/docs/bpta-frontend-invisible-animation-analysis.md +187 -0
  127. package/data/docs/bpta-full-scenario-collaborative-development.md +13 -0
  128. package/data/docs/bpta-fuzzy-scene-performance-optimization.md +256 -0
  129. package/data/docs/bpta-game-prelaunch-practice.md +175 -0
  130. package/data/docs/bpta-general-comments.md +17 -0
  131. package/data/docs/bpta-gestures-practice.md +619 -0
  132. package/data/docs/bpta-global-state-management-state-store.md +472 -0
  133. package/data/docs/bpta-gpu-acceleration-practices.md +11 -0
  134. package/data/docs/bpta-graphic-drawing-practices.md +13 -0
  135. package/data/docs/bpta-grid-based-on-scrollcomponents.md +1112 -0
  136. package/data/docs/bpta-grid-drag-swap.md +725 -0
  137. package/data/docs/bpta-hadss_dialoghub.md +786 -0
  138. package/data/docs/bpta-harmony-application-security.md +1253 -0
  139. package/data/docs/bpta-hdrtosdr.md +439 -0
  140. package/data/docs/bpta-hdrvivid.md +700 -0
  141. package/data/docs/bpta-high-cpu-load-analysis.md +113 -0
  142. package/data/docs/bpta-high-performance-json-parsing.md +263 -0
  143. package/data/docs/bpta-high-performance-protobuf-parsing.md +259 -0
  144. package/data/docs/bpta-hmos-live-stream-audio-call.md +140 -0
  145. package/data/docs/bpta-hmos-live-stream-solution.md +495 -0
  146. package/data/docs/bpta-hmrouter.md +659 -0
  147. package/data/docs/bpta-hopping.md +60 -0
  148. package/data/docs/bpta-hwc-self-rendering-layer-analysis.md +77 -0
  149. package/data/docs/bpta-image-processing-practices.md +13 -0
  150. package/data/docs/bpta-image-to-video-synthesis.md +459 -0
  151. package/data/docs/bpta-image-white-lump-solution.md +282 -0
  152. package/data/docs/bpta-image_get_and_save.md +120 -0
  153. package/data/docs/bpta-implement-timeline-based-on-canvas.md +493 -0
  154. package/data/docs/bpta-implementing-image-filters.md +406 -0
  155. package/data/docs/bpta-implementing-image-resizable.md +270 -0
  156. package/data/docs/bpta-improve-layout-performance.md +547 -0
  157. package/data/docs/bpta-improve-running-efficiency.md +187 -0
  158. package/data/docs/bpta-improve_grid_performance.md +268 -0
  159. package/data/docs/bpta-input-method-framework.md +12 -0
  160. package/data/docs/bpta-intent-recommend-practice.md +313 -0
  161. package/data/docs/bpta-js-leak-watcher.md +153 -0
  162. package/data/docs/bpta-kernel-memory-analysis.md +38 -0
  163. package/data/docs/bpta-keyboard-layout-adapt.md +725 -0
  164. package/data/docs/bpta-landscape-and-portrait-development.md +947 -0
  165. package/data/docs/bpta-layered-architecture-design.md +82 -0
  166. package/data/docs/bpta-lazyforeach-optimization.md +217 -0
  167. package/data/docs/bpta-link-between-apps-overview.md +99 -0
  168. package/data/docs/bpta-list-based-on-scrollcomponents.md +1643 -0
  169. package/data/docs/bpta-lite-wearable-guide.md +1899 -0
  170. package/data/docs/bpta-live-form-development-practice.md +544 -0
  171. package/data/docs/bpta-live-streaming-optimization.md +397 -0
  172. package/data/docs/bpta-local-file-and-data-multithreaded-io.md +367 -0
  173. package/data/docs/bpta-local-file.md +11 -0
  174. package/data/docs/bpta-lock-screen-immersive-live-window.md +473 -0
  175. package/data/docs/bpta-long-snapshot-practice.md +1046 -0
  176. package/data/docs/bpta-low-power-consumption-of-background-tasks.md +14 -0
  177. package/data/docs/bpta-low-power-consumption-of-foreground-tasks.md +14 -0
  178. package/data/docs/bpta-low-power-design-in-dark-mode.md +418 -0
  179. package/data/docs/bpta-ltpo-description.md +323 -0
  180. package/data/docs/bpta-maleoon-gpu-best-practices.md +1297 -0
  181. package/data/docs/bpta-malloc-dispatch-table.md +144 -0
  182. package/data/docs/bpta-managing-audio-input-devices.md +350 -0
  183. package/data/docs/bpta-managing-audio-output-devices.md +399 -0
  184. package/data/docs/bpta-mate-book-fold.md +229 -0
  185. package/data/docs/bpta-matetv-guide.md +223 -0
  186. package/data/docs/bpta-matext-guide.md +269 -0
  187. package/data/docs/bpta-memory-basic-knowledge.md +71 -0
  188. package/data/docs/bpta-memory-optimization.md +545 -0
  189. package/data/docs/bpta-modular-design.md +282 -0
  190. package/data/docs/bpta-multi-device-adaptive-layout.md +775 -0
  191. package/data/docs/bpta-multi-device-adaptive.md +11 -0
  192. package/data/docs/bpta-multi-device-camera.md +584 -0
  193. package/data/docs/bpta-multi-device-collaboration.md +19 -0
  194. package/data/docs/bpta-multi-device-component-layout.md +190 -0
  195. package/data/docs/bpta-multi-device-design-principles.md +26 -0
  196. package/data/docs/bpta-multi-device-function.md +99 -0
  197. package/data/docs/bpta-multi-device-hardware.md +12 -0
  198. package/data/docs/bpta-multi-device-ide.md +124 -0
  199. package/data/docs/bpta-multi-device-interaction.md +11 -0
  200. package/data/docs/bpta-multi-device-layout-overview.md +47 -0
  201. package/data/docs/bpta-multi-device-overview.md +340 -0
  202. package/data/docs/bpta-multi-device-page-layout.md +699 -0
  203. package/data/docs/bpta-multi-device-page.md +19 -0
  204. package/data/docs/bpta-multi-device-resource.md +122 -0
  205. package/data/docs/bpta-multi-device-responsive-layout.md +1274 -0
  206. package/data/docs/bpta-multi-device-responsive.md +14 -0
  207. package/data/docs/bpta-multi-device-screen-diff.md +197 -0
  208. package/data/docs/bpta-multi-device-screen-layout.md +834 -0
  209. package/data/docs/bpta-multi-device-start.md +376 -0
  210. package/data/docs/bpta-multi-device-ui-development.md +27 -0
  211. package/data/docs/bpta-multi-device-window-direction.md +1322 -0
  212. package/data/docs/bpta-multi-device-window-immersive.md +364 -0
  213. package/data/docs/bpta-multi-device-window-mode.md +1293 -0
  214. package/data/docs/bpta-multi-device-window.md +13 -0
  215. package/data/docs/bpta-multi-device.md +13 -0
  216. package/data/docs/bpta-multi-interaction.md +368 -0
  217. package/data/docs/bpta-multi-mobile-payment.md +282 -0
  218. package/data/docs/bpta-multi-music-app-overview.md +365 -0
  219. package/data/docs/bpta-multi-settings-application-page.md +163 -0
  220. package/data/docs/bpta-multi-tab-practice.md +750 -0
  221. package/data/docs/bpta-multi-target.md +490 -0
  222. package/data/docs/bpta-multi-window-practice.md +795 -0
  223. package/data/docs/bpta-multi_game.md +472 -0
  224. package/data/docs/bpta-music-card.md +1916 -0
  225. package/data/docs/bpta-music-playback-scenarios.md +120 -0
  226. package/data/docs/bpta-native-memory-analysis.md +101 -0
  227. package/data/docs/bpta-native-sub-main-comm.md +323 -0
  228. package/data/docs/bpta-navigation-scenarios.md +69 -0
  229. package/data/docs/bpta-network-ca-security.md +241 -0
  230. package/data/docs/bpta-network-reconnection.md +327 -0
  231. package/data/docs/bpta-network-resources.md +24 -0
  232. package/data/docs/bpta-news-reading.md +12 -0
  233. package/data/docs/bpta-news_homepage.md +449 -0
  234. package/data/docs/bpta-object-serialization-performance.md +12 -0
  235. package/data/docs/bpta-one-shot-to-the-end.md +932 -0
  236. package/data/docs/bpta-online-video-playback-lags-practice.md +298 -0
  237. package/data/docs/bpta-optimization-overview.md +227 -0
  238. package/data/docs/bpta-optimization-tool-practice.md +20 -0
  239. package/data/docs/bpta-package-structure.md +13 -0
  240. package/data/docs/bpta-pad-guide.md +268 -0
  241. package/data/docs/bpta-page-brightness-settings.md +256 -0
  242. package/data/docs/bpta-page-transition.md +583 -0
  243. package/data/docs/bpta-pc-guide.md +438 -0
  244. package/data/docs/bpta-pc.md +12 -0
  245. package/data/docs/bpta-perceived-smoothness.md +49 -0
  246. package/data/docs/bpta-performance-detection.md +160 -0
  247. package/data/docs/bpta-performance-guide-reading.md +50 -0
  248. package/data/docs/bpta-performance-mainthread-consumption-detection.md +11 -0
  249. package/data/docs/bpta-performance-optimization.md +23 -0
  250. package/data/docs/bpta-performance-runtime-detection.md +13 -0
  251. package/data/docs/bpta-performance-sliding-frame-drop-detection.md +19 -0
  252. package/data/docs/bpta-performance-startup-time-detection.md +13 -0
  253. package/data/docs/bpta-permission-application.md +318 -0
  254. package/data/docs/bpta-permission-timeout-analysis.md +51 -0
  255. package/data/docs/bpta-photo.md +15 -0
  256. package/data/docs/bpta-picture-preview.md +464 -0
  257. package/data/docs/bpta-picture.md +12 -0
  258. package/data/docs/bpta-playing-formatted-audio-based-avplayer-arkts.md +481 -0
  259. package/data/docs/bpta-playing-formatted-audio-based-avplayer-cpp.md +593 -0
  260. package/data/docs/bpta-playing-pcm-audio-based-audiorenderer.md +959 -0
  261. package/data/docs/bpta-playing-pcm-audio-based-ohaudio.md +599 -0
  262. package/data/docs/bpta-playing-short-audio-based-soundpool.md +182 -0
  263. package/data/docs/bpta-positioning.md +364 -0
  264. package/data/docs/bpta-power-basic-quality-test.md +35 -0
  265. package/data/docs/bpta-power-consumption-analysis.md +12 -0
  266. package/data/docs/bpta-power-consumption-develop-analysis.md +12 -0
  267. package/data/docs/bpta-power-consumption-experience.md +119 -0
  268. package/data/docs/bpta-power-consumption-runtime-analysis.md +15 -0
  269. package/data/docs/bpta-power_overview.md +26 -0
  270. package/data/docs/bpta-pptimized-component-drawing.md +27 -0
  271. package/data/docs/bpta-pre-connect.md +133 -0
  272. package/data/docs/bpta-preloading-resources.md +21 -0
  273. package/data/docs/bpta-program-framework.md +15 -0
  274. package/data/docs/bpta-properly-use-foreground-resources.md +22 -0
  275. package/data/docs/bpta-purax-guide.md +215 -0
  276. package/data/docs/bpta-quality-overview.md +79 -0
  277. package/data/docs/bpta-reader-page-flip.md +890 -0
  278. package/data/docs/bpta-reasonable-audio-playback-use.md +42 -0
  279. package/data/docs/bpta-reasonable-audio-use.md +163 -0
  280. package/data/docs/bpta-reasonable-bluetooth-use.md +52 -0
  281. package/data/docs/bpta-reasonable-gps-use.md +59 -0
  282. package/data/docs/bpta-reasonable-network-use.md +105 -0
  283. package/data/docs/bpta-reasonable-position-navigation-use.md +47 -0
  284. package/data/docs/bpta-reasonable-request-use.md +77 -0
  285. package/data/docs/bpta-reasonable-sensor-use.md +53 -0
  286. package/data/docs/bpta-reasonable-system-use.md +67 -0
  287. package/data/docs/bpta-recommended-use-of-device-id.md +79 -0
  288. package/data/docs/bpta-reduce-layout-nodes.md +30 -0
  289. package/data/docs/bpta-reduce-time-consuming.md +36 -0
  290. package/data/docs/bpta-redundancy-refresh-guide.md +409 -0
  291. package/data/docs/bpta-render-web-using-same-layer-render.md +601 -0
  292. package/data/docs/bpta-resource-and-storage-optimization.md +14 -0
  293. package/data/docs/bpta-retrieve-process-memory-info.md +49 -0
  294. package/data/docs/bpta-rich-text-display.md +475 -0
  295. package/data/docs/bpta-rich-text-editor.md +426 -0
  296. package/data/docs/bpta-risk-control-engine.md +146 -0
  297. package/data/docs/bpta-scenario-performance-optimization.md +17 -0
  298. package/data/docs/bpta-scenario-power-optimization.md +12 -0
  299. package/data/docs/bpta-scenario-stability-address-sanitizer.md +210 -0
  300. package/data/docs/bpta-scenario-stability-app-freeze.md +615 -0
  301. package/data/docs/bpta-scenario-stability-cppcrash.md +516 -0
  302. package/data/docs/bpta-scenario-stability-exception-exit.md +12 -0
  303. package/data/docs/bpta-scenario-stability-jscrash.md +922 -0
  304. package/data/docs/bpta-scenario-stability-leak.md +276 -0
  305. package/data/docs/bpta-scenario-stability.md +14 -0
  306. package/data/docs/bpta-screen-flicker-solution.md +480 -0
  307. package/data/docs/bpta-shared-bicycle.md +509 -0
  308. package/data/docs/bpta-short-video-base-adaptivevideo.md +403 -0
  309. package/data/docs/bpta-smart-reach.md +306 -0
  310. package/data/docs/bpta-smartwatch.md +755 -0
  311. package/data/docs/bpta-smartwatchnavigation.md +384 -0
  312. package/data/docs/bpta-smooth-application-design.md +225 -0
  313. package/data/docs/bpta-smooth-switching.md +294 -0
  314. package/data/docs/bpta-social-communications.md +11 -0
  315. package/data/docs/bpta-social-share.md +637 -0
  316. package/data/docs/bpta-solutions-to-special-issues.md +12 -0
  317. package/data/docs/bpta-sound-quality-switching.md +422 -0
  318. package/data/docs/bpta-spatiality-immersive.md +531 -0
  319. package/data/docs/bpta-special-text-recognition.md +137 -0
  320. package/data/docs/bpta-stability-address-illegal-way.md +190 -0
  321. package/data/docs/bpta-stability-address-sanitizer-catagory.md +212 -0
  322. package/data/docs/bpta-stability-address-sanitizer-faq.md +32 -0
  323. package/data/docs/bpta-stability-address-sanitizer-opt.md +170 -0
  324. package/data/docs/bpta-stability-address-sanitizer-overview.md +23 -0
  325. package/data/docs/bpta-stability-address-sanitizer-principle.md +179 -0
  326. package/data/docs/bpta-stability-analysis.md +17 -0
  327. package/data/docs/bpta-stability-app-analyzer.md +11 -0
  328. package/data/docs/bpta-stability-app-crash-cpp-way.md +200 -0
  329. package/data/docs/bpta-stability-app-crash-js-way.md +148 -0
  330. package/data/docs/bpta-stability-app-crash.md +13 -0
  331. package/data/docs/bpta-stability-app-freeze-ark-runtime.md +339 -0
  332. package/data/docs/bpta-stability-app-freeze-opt.md +80 -0
  333. package/data/docs/bpta-stability-app-freeze-way.md +410 -0
  334. package/data/docs/bpta-stability-app-freeze.md +12 -0
  335. package/data/docs/bpta-stability-app-killed-way.md +49 -0
  336. package/data/docs/bpta-stability-ark-detection.md +12 -0
  337. package/data/docs/bpta-stability-ark-exception-detection.md +38 -0
  338. package/data/docs/bpta-stability-ark-runtime-detection.md +134 -0
  339. package/data/docs/bpta-stability-asan-detection.md +450 -0
  340. package/data/docs/bpta-stability-coding-standard-api.md +2054 -0
  341. package/data/docs/bpta-stability-coding-standard-cpp.md +91 -0
  342. package/data/docs/bpta-stability-coding-standard-libuv.md +772 -0
  343. package/data/docs/bpta-stability-coding-standard-ndk-arkts.md +189 -0
  344. package/data/docs/bpta-stability-coding-standard-node.md +478 -0
  345. package/data/docs/bpta-stability-coding-standard.md +16 -0
  346. package/data/docs/bpta-stability-cpp-crash-opt.md +346 -0
  347. package/data/docs/bpta-stability-detection.md +14 -0
  348. package/data/docs/bpta-stability-deveco-testing.md +73 -0
  349. package/data/docs/bpta-stability-develop-detection.md +17 -0
  350. package/data/docs/bpta-stability-exception-exit-opt.md +12 -0
  351. package/data/docs/bpta-stability-fault-log.md +14 -0
  352. package/data/docs/bpta-stability-fault-type.md +31 -0
  353. package/data/docs/bpta-stability-file-handle-detection.md +96 -0
  354. package/data/docs/bpta-stability-gwpasan-detection.md +588 -0
  355. package/data/docs/bpta-stability-hwasan-detection.md +360 -0
  356. package/data/docs/bpta-stability-ide-static-detection.md +343 -0
  357. package/data/docs/bpta-stability-js-crash-opt.md +21 -0
  358. package/data/docs/bpta-stability-js-memleak-detection.md +214 -0
  359. package/data/docs/bpta-stability-leak-detection.md +15 -0
  360. package/data/docs/bpta-stability-leak-opt.md +251 -0
  361. package/data/docs/bpta-stability-leak-way.md +459 -0
  362. package/data/docs/bpta-stability-log-specs.md +31 -0
  363. package/data/docs/bpta-stability-log-standard-hilog.md +191 -0
  364. package/data/docs/bpta-stability-log-standard.md +11 -0
  365. package/data/docs/bpta-stability-memleak-detection-overview.md +109 -0
  366. package/data/docs/bpta-stability-native-memleak-detection.md +204 -0
  367. package/data/docs/bpta-stability-operate-apm.md +113 -0
  368. package/data/docs/bpta-stability-operate-app-event.md +320 -0
  369. package/data/docs/bpta-stability-operate-event.md +11 -0
  370. package/data/docs/bpta-stability-operate.md +15 -0
  371. package/data/docs/bpta-stability-opt.md +18 -0
  372. package/data/docs/bpta-stability-overview.md +17 -0
  373. package/data/docs/bpta-stability-ram-detection.md +17 -0
  374. package/data/docs/bpta-stability-runtime-address-sanitizer-detection.md +21 -0
  375. package/data/docs/bpta-stability-runtime-appkilled-detection.md +44 -0
  376. package/data/docs/bpta-stability-runtime-crash-detection.md +14 -0
  377. package/data/docs/bpta-stability-runtime-detection.md +14 -0
  378. package/data/docs/bpta-stability-runtime-exception-exit-detection.md +12 -0
  379. package/data/docs/bpta-stability-runtime-freeze-detection.md +21 -0
  380. package/data/docs/bpta-stability-runtime-leak-detection.md +31 -0
  381. package/data/docs/bpta-stability-testing.md +11 -0
  382. package/data/docs/bpta-stability-thread-detection.md +11 -0
  383. package/data/docs/bpta-stability-thread-leak-detection.md +35 -0
  384. package/data/docs/bpta-stability-tsan-detection.md +477 -0
  385. package/data/docs/bpta-stability-ubsan-detection.md +350 -0
  386. package/data/docs/bpta-startup-response-optimization.md +12 -0
  387. package/data/docs/bpta-state-refresh.md +48 -0
  388. package/data/docs/bpta-static-scenarios.md +63 -0
  389. package/data/docs/bpta-status-management.md +872 -0
  390. package/data/docs/bpta-surface-encoder.md +427 -0
  391. package/data/docs/bpta-swiper_high_performance_development_guide.md +357 -0
  392. package/data/docs/bpta-tablet-pc.md +11 -0
  393. package/data/docs/bpta-taskpool_usage_specifications_and_faqs.md +625 -0
  394. package/data/docs/bpta-text-expand-collapse.md +274 -0
  395. package/data/docs/bpta-texture-compression-improve-performance.md +336 -0
  396. package/data/docs/bpta-thread-priority-setting.md +233 -0
  397. package/data/docs/bpta-threads-serialization-timeout-analysis.md +169 -0
  398. package/data/docs/bpta-time-optimization-of-the-main-thread.md +1239 -0
  399. package/data/docs/bpta-travel-navigation.md +11 -0
  400. package/data/docs/bpta-tv.md +11 -0
  401. package/data/docs/bpta-ui-component-encapsulation.md +585 -0
  402. package/data/docs/bpta-ui-component-performance-optimization.md +597 -0
  403. package/data/docs/bpta-ui-dynamic-operations.md +618 -0
  404. package/data/docs/bpta-ui-skip-analysis.md +191 -0
  405. package/data/docs/bpta-unified-drag-and-drop.md +1189 -0
  406. package/data/docs/bpta-use-of-background-hardware-resources.md +16 -0
  407. package/data/docs/bpta-use-of-background-software-resources.md +14 -0
  408. package/data/docs/bpta-use-of-background-tasks.md +23 -0
  409. package/data/docs/bpta-utilize-hwc-efficiently.md +461 -0
  410. package/data/docs/bpta-vdeocast.md +558 -0
  411. package/data/docs/bpta-video-adaptation-based-web.md +462 -0
  412. package/data/docs/bpta-video-barrage.md +68 -0
  413. package/data/docs/bpta-video-codec.md +42 -0
  414. package/data/docs/bpta-video-component-long-video.md +659 -0
  415. package/data/docs/bpta-video-component-short-video.md +337 -0
  416. package/data/docs/bpta-video-layer.md +32 -0
  417. package/data/docs/bpta-video-practices.md +12 -0
  418. package/data/docs/bpta-video-render.md +1225 -0
  419. package/data/docs/bpta-video-rom.md +37 -0
  420. package/data/docs/bpta-video-thumbnail.md +179 -0
  421. package/data/docs/bpta-video-wifi.md +40 -0
  422. package/data/docs/bpta-vsync-power-optimization.md +116 -0
  423. package/data/docs/bpta-waterflow-based-on-scrollcomponents.md +989 -0
  424. package/data/docs/bpta-waterflow-operations.md +991 -0
  425. package/data/docs/bpta-waterflow-performance-optimization.md +191 -0
  426. package/data/docs/bpta-wavewheel-for-image-editor.md +421 -0
  427. package/data/docs/bpta-wear.md +12 -0
  428. package/data/docs/bpta-web-adaptation.md +451 -0
  429. package/data/docs/bpta-web-app-jump-and-pull-up.md +310 -0
  430. package/data/docs/bpta-web-click-response-delay-analysis.md +164 -0
  431. package/data/docs/bpta-web-completion-delay-analysis.md +209 -0
  432. package/data/docs/bpta-web-develop-optimization.md +2596 -0
  433. package/data/docs/bpta-web-development.md +15 -0
  434. package/data/docs/bpta-web-frame-rate-performance-analysis.md +252 -0
  435. package/data/docs/bpta-web-interceptor.md +724 -0
  436. package/data/docs/bpta-web-performance-optimization.md +11 -0
  437. package/data/docs/bpta-window-and-screen-management.md +12 -0
  438. package/data/docs/bpta-zhenlv.md +559 -0
  439. package/data/docs/changelog.md +1410 -0
  440. package/data/docs/low-power-consumption-suggestions.md +246 -0
  441. package/data/docs/multi-business-office.md +275 -0
  442. package/data/docs/multi-communication-app.md +240 -0
  443. package/data/docs/multi-community-app.md +257 -0
  444. package/data/docs/multi-convenient-life.md +501 -0
  445. package/data/docs/multi-financial-app.md +288 -0
  446. package/data/docs/multi-news-read.md +286 -0
  447. package/data/docs/multi-picture-app.md +219 -0
  448. package/data/docs/multi-shopping-price-comparison.md +254 -0
  449. package/data/docs/multi-short-video-app.md +315 -0
  450. package/data/docs/multi-ticket-class.md +458 -0
  451. package/data/docs/multi-travel-accommodation.md +361 -0
  452. package/data/docs/multi-travel-navigation.md +449 -0
  453. package/data/docs/multi-video-app.md +492 -0
  454. package/data/index.md +2886 -0
  455. package/dist/data.js +180 -0
  456. package/dist/index.js +203 -0
  457. package/dist/search.js +102 -0
  458. package/package.json +57 -0
  459. package/scripts/trim-code-extra.mjs +78 -0
  460. 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
+ ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/d/v3/MwcTWun5Q26s817KO82Wsg/note_3.0-zh-cn.png?HW-CC-KV=V1&HW-CC-Date=20260623T075540Z&HW-CC-Expire=86400&HW-CC-Sign=9B31841369CE12473FA4AFE34CD4627FAFBCD78646018E26029EA472967A73A4)
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
+ ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/87/v3/02USr4-1RKWF4NYrm5bYpw/zh-cn_image_0000002229337273.png?HW-CC-KV=V1&HW-CC-Date=20260623T075540Z&HW-CC-Expire=86400&HW-CC-Sign=FF5118F5B0679106A090FBD0CA83F5155C14CC3252AFDF59AB26AA15000C514A "点击放大")
182
+
183
+ **图2** 三角形子窗口效果
184
+ ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/7b/v3/hQ9uqtTiS6aic7yw2DLlrA/zh-cn_image_0000002194011476.png?HW-CC-KV=V1&HW-CC-Date=20260623T075540Z&HW-CC-Expire=86400&HW-CC-Sign=E0103FC25813B6AC5A1C078DB863C8535647F4CF5B024D8B15617C3BFEDA2BD1 "点击放大")
185
+
186
+ #### 不规则形状窗口
187
+
188
+ ## 场景案例
189
+
190
+ 待开发的异形窗口,呈现出不规则的形状。这种情况通常先由设计人员提供图形文件,开发人员以文件为输入,基于ArkUI提供的图片处理能力,转化为相应的形状掩码,最后实现不规则的窗口形状。
191
+
192
+ **图3** 不规则示例图
193
+ ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/fa/v3/vo987MavTLiyF1XzfLGiGA/zh-cn_image_0000002229451765.png?HW-CC-KV=V1&HW-CC-Date=20260623T075540Z&HW-CC-Expire=86400&HW-CC-Sign=599273397F9F25A97AE057EBBCF5466E9D22437D312751FCF9B411776DF72A10)
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
+ ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/33/v3/GqN0BPIJQVeXl0WiqFLx8A/zh-cn_image_0000002193851884.png?HW-CC-KV=V1&HW-CC-Date=20260623T075540Z&HW-CC-Expire=86400&HW-CC-Sign=1B10FE8A93A64CAAA2B1417A6652CDAD66D0267EF1AA73157950461F161F8AF7 "点击放大")
293
+
294
+ #### **示例代码**
295
+
296
+ - [实现PC/2in1异形窗口](https://gitcode.com/harmonyos_samples/special-window-shape)